Cum pot calcula rădăcina pătrată în Python?

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 folosisqrt`. Dar eu'm în căutarea pentru un răspuns la cele de mai sus.

Comentarii la întrebare (5)
Soluția

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ă.

Comentarii (3)

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 la0`.

Și pentru înregistrare, modul preferat de a calcula rădăcina pătrată este aceasta:

import math
math.sqrt(x)
Comentarii (0)
import math
math.sqrt( x )

Este un banal plus față de răspunsul lanț. Cu toate acestea, deoarece Subiectul este foarte frecvente, google a lovit, acesta merită să fie adăugat, cred.

Comentarii (0)

/ efectuează un număr întreg de divizie în Python 2:

>>> 1/2
0

Dacă unul dintre numere este un float, funcționează cum era de așteptat:

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
Comentarii (0)

Ce-ai're văzându-este număr întreg divizie. Pentru a obține în virgulă mobilă divizia implicit,

from __future__ import division

Sau, ai putea converti 1 sau 2 de 1/2 într-o valoare în virgulă mobilă.

sqrt = x**(1.0/2)
Comentarii (0)

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().

Comentarii (0)

Poate un simplu mod de a aminti: adauga un punct după numărător (sau la numitor)

16 ** (1. / 2)   # 4
289 ** (1. / 2)  # 17
27 ** (1. / 3)   # 3
Comentarii (0)

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) 
Comentarii (1)

Puteți utiliza NumPy pentru a calcula rădăcina pătrată de tablouri:

 import numpy as np
 np.sqrt([1, 4, 9])
Comentarii (1)