De ce Python da "prost" răspuns?
x = 16
sqrt = x**(.5)
returns 4
sqrt = x**(1/2)
returns 1
Da, știu, pentru import mathși de a folosi
sqrt`. Dar eu'm în căutarea pentru un răspuns la cele de mai sus.
sqrt=x**(1/2)
este de a face împărțirii întregi. 1/2 == 0
.
Deci're de calcul x(1/2) în primă instanță, x(0) în cel de-al doilea.
Deci'nu s-a înșelat, l's răspunsul corect la o întrebare diferită.
Trebuie să scrie: sqrt = x**(1/2.0)
, altfel un întreg diviziune este realizată și expresia 1/2
a se întoarce 0
.
Acest comportament este "normale" în Python 2.x, întrucât în Python 3.x 1/2
se evaluează la 0.5
. Dacă doriți Python 2.x cod să se comporte ca 3.x w.r.t. divizia scrie din __viitoarele__ import divizia
- apoi 1/2
va evalua la 0.5 și pentru compatibilitate,
1//2se va evalua la
0`.
Și pentru înregistrare, modul preferat de a calcula rădăcina pătrată este aceasta:
import math
math.sqrt(x)
Acest lucru ar putea fi un pic cam tarziu pentru raspuns, dar cel mai simplu și precis pentru a calcula rădăcina pătrată este newton's metoda.
Aveți un număr pe care doriți pentru a calcula rădăcina pătrată (num) și ai ghici sale square root
(estimare)`. Estimarea poate fi orice număr mai mare decât 0, dar un număr care are sens scurtează apel recursiv adâncime în mod semnificativ.
new_estimate = (estimate + num / estimate) / 2
Această linie se calculează o estimare mai exactă a celor 2 parametri. Puteți trece new_estimate valoare pentru funcția de calcul si un alt new_estimate care este mai precisă decât cea anterioară sau puteți face o funcție recursivă definiție de genul asta.
def newtons_method(num, estimate):
# Computing a new_estimate
new_estimate = (estimate + num / estimate) / 2
print(new_estimate)
# Base Case: Comparing our estimate with built-in functions value
if new_estimate == math.sqrt(num):
return True
else:
return newtons_method(num, new_estimate)
De exemplu, avem nevoie pentru a găsi 30's de rădăcină pătrată. Știm că rezultatul este între 5 și 6.
newtons_method(30,5)
numărul este de 30, iar estimarea este de 5. Rezultatul de la fiecare apelurile recursive sunt:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
Ultimul rezultat este cel mai precis calcul a rădăcinii pătrate a numărului. Este aceeași valoare ca built-in funcția de matematica.sqrt().
Sper menționate mai jos codul va răspunde la întrebarea dumneavoastră.
def root(x,a):
y = 1 / a
y = float(y)
print y
z = x ** y
print z
base = input("Please input the base value:")
power = float(input("Please input the root value:"))
root(base,power)