Python开平方

如题,如何使用Python开平方

1. 最简单的方法

将某个数乘以0.5次方

sqrtin=float(input(正数:))
sqrtout=sqrtin**0.5
print('平方根:',sqrtout)

2. 使用内置库math

import math
sqrtin=float(input(正数:))
sqrtout=math.sqrt(sqrtin)
print('平方根:',sqrtout)

3.复杂版1(摘抄)

#! /usr/bin/env python
# -*- coding: utf-8 -*- 
# 开平方
import time
 
 
class NumberNode(object):
    def __init__(self, num):
        self.num = num
        self.square_result = 0
        self.current_target_number = 0
        self.square_result_str = ''
        self.finished = False
 
    @property
    def data_list(self):
        """对num从低位向高位,每两位划分在一起,对num拆分成数组。
        这么拆分的原因是,每次求根号的下一位,最大不会超过一百,所以向下获取两位用来求的开平方的下一位"""
        number = self.num
        divisor = 100
        _data_list = []
        while number:
            remainder = number % divisor
            _data_list.append(remainder)
            number = number / divisor
        return _data_list
 
    @property
    def data_list_len(self):
        return len(self.data_list)
 
    def get_target_number(self, index):
        if index < self.data_list_len:
            return self.data_list[self.data_list_len-1-index]
        return 0
 
    def get_reducer(self, index_ret):
        return (self.square_result * 10 * 2 + index_ret) * index_ret
 
    def reload_result(self, index_ret):
        self.square_result = self.square_result * 10 + index_ret
        ret_str_list = list(str(self.square_result))
        ret_str_list.insert(self.data_list_len, '.')
        self.square_result_str = ''.join(ret_str_list)
 
    def reload_current_target_number(self, index, index_ret):
        minute_ret = self.current_target_number - self.get_reducer(index_ret)
        self.current_target_number = minute_ret * 100 + self.get_target_number(index)
        if not self.current_target_number and index == self.data_list_len:
            self.finished = True
 
    def get_index_ret(self):
        for i in range(9, -1, -1):
            if self.get_reducer(i) <= self.current_target_number:
                return i
        return 0
 
    def square(self):
        """计算开平方结果,主要理论依据是:(a.b)**2 == (a+0.b)**2 = a**2 + (0.b)**2 + 2*a*(0.b)"""
        index = 0
        index_ret = 0
        self.reload_current_target_number(index, index_ret)
        self.reload_result(index_ret)
        while not self.finished:
            index_ret = self.get_index_ret()
 
            index += 1
            self.reload_current_target_number(index, index_ret)
            self.reload_result(index_ret)
 
            print index_ret
            print self.square_result_str
            time.sleep(0.1)
 
        print index_ret
        print self.square_result_str
 
 
if __name__ == '__main__':
    number = int(input('正数:'))
    num_node = NumberNode(number)
    num_node.square()

4.复杂版2(摘抄)

image

print('请输入开方正数:')
x2 = input()                       #输入开方数
x2 = x2 + "0000000000"               #放大10位,即精确到小数点后5位
x = ""                             #开方结果

digits = len(x2)                   #统计位数
if digits % 2 == 1:                #判断单双位数
    x2_1 = int(x2[0:1])            #取第一个数
    digit = 1                      #从第一位后开始取数
    digits = digits-1
else:
    x2_1 = int(x2[0:2])            #取第一个数
    digit = 2                      #从第二位后开始取数
    digits = digits - 2

if x2_1 >= 9*9:                     #判断a*a是否合适,并减出余数
    x = "9"                        #计算第一个a*a
    x2_2 = x2_1-9*9                #得出余数
elif x2_1 >= 8*8:
    x = "8"
    x2_2 = x2_1-8*8
elif x2_1 >= 7*7:
    x = "7"
    x2_2 = x2_1-7*7
elif x2_1 >= 6*6:
    x = "6"
    x2_2 = x2_1-6*6
elif x2_1 >= 5*5:
    x = "5"
    x2_2 = x2_1-5*5
elif x2_1 >= 4*4:
    x = "4"
    x2_2 = x2_1-4*4
elif x2_1 >= 3*3:
    x = "3"
    x2_2 = x2_1-3*3
elif x2_1 >= 2*2:
    x = "2"
    x2_2 = x2_1-2*2
elif x2_1 >= 1*1:
    x = "1"
    x2_2 = x2_1-1*1
else:
    pass


while digits >= 2:                                  #数字每两位取数
    x2_2 = int(str(x2_2) + x2[digit:digit+2])       #余数补上后面两位数字
    if x2_2 >= (2*int(x)*10+9)*9:                   #(2a+b)b
        a2bb = "9"
        x2_2 = x2_2-(2*int(x)*10+9)*9
    elif x2_2 >= (2*int(x)*10+8)*8:
        a2bb = "8"
        x2_2 = x2_2 - (2 * int(x) * 10 + 8) * 8
    elif x2_2 >= (2*int(x)*10+7)*7:
        a2bb = "7"
        x2_2 = x2_2 - (2 * int(x) * 10 + 7) * 7
    elif x2_2 >= (2*int(x)*10+6)*6:
        a2bb = "6"
        x2_2 = x2_2 - (2 * int(x) * 10 + 6) * 6
    elif x2_2 >= (2*int(x)*10+5)*5:
        a2bb = "5"
        x2_2 = x2_2 - (2 * int(x) * 10 + 5) * 5
    elif x2_2 >= (2*int(x)*10+4)*4:
        a2bb = "4"
        x2_2 = x2_2 - (2 * int(x) * 10 + 4) * 4
    elif x2_2 >= (2*int(x)*10+3)*3:
        a2bb = "3"
        x2_2 = x2_2 - (2 * int(x) * 10 + 3) * 3
    elif x2_2 >= (2*int(x)*10+2)*2:
        a2bb = "2"
        x2_2 = x2_2 - (2 * int(x) * 10 + 2) * 2
    elif x2_2 >= (2*int(x)*10+1)*1:
        a2bb = "1"
        x2_2 = x2_2 - (2 * int(x) * 10 + 1) * 1
    elif x2_2 >= (2*int(x)*10+0)*0:
        a2bb = "0"
        x2_2 = x2_2 - (2 * int(x) * 10 + 0) * 0
    else:
        pass
    x = str(x)                                #转为字符串
    x = x + a2bb                              #将得到的数字连串起来
    digit = digit+2
    digits = digits-2
x = int(x)/100000                        #缩小5位,补上小数点
print(x)

5. 复杂版3(摘抄)

tips:支持负数,10f为小数位数

import cmath
num = int(input("请输入一个数字: "))
num_sqrt = cmath.sqrt(num)
print('{0} 的平方根为 {1:0.10f}+{2:0.10f}j'.format(num ,num_sqrt.real,num_sqrt.imag))

你学废了吗?

posted @ 2022-09-28 23:31  html5syt  阅读(2513)  评论(0)    收藏  举报