Hoe bereken ik de vierkantswortel in Python?

Waarom geeft Python het "verkeerde" antwoord?

x = 16

sqrt = x**(.5)
returns 4

sqrt = x**(1/2)
returns 1

Ja, ik ken import math en gebruik sqrt. Maar ik'ben op zoek naar een antwoord op het bovenstaande.

Oplossing

sqrt=x**(1/2) is een gehele deling. 1/2 == 0.

Je berekent dus x(1/2) in het eerste geval, x(0) in het tweede geval.

Het is dus niet verkeerd, het is het juiste antwoord op een andere vraag.

Commentaren (3)

Je moet schrijven: sqrt = x**(1/2,0), anders wordt er een gehele deling uitgevoerd en geeft de uitdrukking 1/2 0 terug.

Dit gedrag is "normaal" in Python 2.x, terwijl in Python 3.x 1/2 evalueert naar 0.5. Als u wilt dat uw Python 2.x code zich gedraagt als 3.x met betrekking tot deling, schrijf dan from __future__ import division - dan zal 1/2 evalueren naar 0.5 en voor achterwaartse compatibiliteit zal 1//2 evalueren naar 0.

En voor de goede orde, de beste manier om een vierkantswortel te berekenen is deze:

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

/ voert een gehele deling uit in Python 2:

>>> 1/2
0

Als een van de getallen een float is, werkt het zoals verwacht:

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