Γιατί η Python δίνει τη "λάθος" απάντηση;
x = 16
sqrt = x**(.5)
returns 4
sqrt = x**(1/2)
returns 1
Ναι, ξέρω την import math
και χρησιμοποιώ την sqrt
. Αλλά ψάχνω για μια απάντηση στο παραπάνω θέμα.
sqrt=x**(1/2)
κάνει ακέραια διαίρεση. 1/2 == 0
.
Έτσι υπολογίζετε το x(1/2) στην πρώτη περίπτωση, το x(0) στη δεύτερη.
Επομένως, δεν είναι λάθος, είναι η σωστή απάντηση σε μια διαφορετική ερώτηση.
Πρέπει να γράψετε: Διαφορετικά εκτελείται μια ακέραια διαίρεση και η έκφραση "1/2" επιστρέφει "0".
Αυτή η συμπεριφορά είναι "φυσιολογική" στην Python 2.x, ενώ στην Python 3.x το 1/2
αξιολογείται σε 0.5
. Αν θέλετε ο κώδικάς σας στην Python 2.x να συμπεριφέρεται όπως στην 3.x όσον αφορά τη διαίρεση γράψτε from __future__ import division
- τότε το 1/2
θα αποτιμηθεί σε 0.5
και για λόγους συμβατότητας προς τα πίσω, το 1//2
θα αποτιμηθεί σε 0
.
Και για την ιστορία, ο προτιμώμενος τρόπος υπολογισμού της τετραγωνικής ρίζας είναι αυτός:
import math
math.sqrt(x)