ทำไมไพ ธ อนจึงให้คำตอบที่ "ผิด"?
x = 16
sqrt = x**(.5) #returns 4
sqrt = x**(1/2) #returns 1
ใช่ฉันรู้และการใช้งานimport math
sqrt
แต่ฉันกำลังมองหาคำตอบข้างต้น
import math
จากนั้นx = math.sqrt(25)
ซึ่งจะกำหนดค่า5.0
ให้กับ x
ทำไมไพ ธ อนจึงให้คำตอบที่ "ผิด"?
x = 16
sqrt = x**(.5) #returns 4
sqrt = x**(1/2) #returns 1
ใช่ฉันรู้และการใช้งานimport math
sqrt
แต่ฉันกำลังมองหาคำตอบข้างต้น
import math
จากนั้นx = math.sqrt(25)
ซึ่งจะกำหนดค่า5.0
ให้กับ x
คำตอบ:
sqrt=x**(1/2)
กำลังทำการแบ่งจำนวนเต็ม 1/2 == 0
.
คุณกำลังคำนวณ x (1/2)ในตัวอย่างแรก x (0)ในวินาที
ดังนั้นจึงไม่ผิดมันเป็นคำตอบที่ถูกต้องสำหรับคำถามอื่น
sqrt = x**(float(1)/2)
คุณต้องเขียน: sqrt = x**(1/2.0)
มิฉะนั้นส่วนจำนวนเต็มจะดำเนินการและการแสดงออกผลตอบแทน1/2
0
ลักษณะการทำงานนี้เป็น "ปกติ" ในหลาม 2.x ในขณะที่ในหลาม 3.x ประเมิน1/2
0.5
หากคุณต้องการรหัส 2.x หลามของคุณเพื่อทำตัวเหมือน 3.x WRT ส่วนเขียนfrom __future__ import division
- แล้ว1/2
จะประเมิน0.5
และหลังเข้ากันได้, จะมีการประเมินเพื่อ1//2
0
และสำหรับบันทึกวิธีที่ต้องการในการคำนวณรากที่สองคือ:
import math
math.sqrt(x)
import math
math.sqrt( x )
มันเป็นเรื่องเล็กน้อยนอกจากนี้ในห่วงโซ่คำตอบ อย่างไรก็ตามเนื่องจากหัวเรื่องเป็นสิ่งที่พบเห็นได้ทั่วไปใน google Hit ฉันสมควรได้รับการเพิ่มสิ่งนี้
/
ดำเนินการแบ่งจำนวนเต็มใน Python 2:
>>> 1/2
0
หากหนึ่งในตัวเลขนั้นเป็นทศนิยมมันจะทำงานตามที่คาดไว้:
>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
สิ่งที่คุณเห็นคือการหารจำนวนเต็ม ในการรับค่าทศนิยมหารตามค่าเริ่มต้น
from __future__ import division
หรือคุณสามารถแปลง 1 หรือ 2 ของ 1/2 เป็นค่าทศนิยม
sqrt = x**(1.0/2)
นี่อาจเป็นคำตอบที่ล่าช้าเล็กน้อย แต่วิธีที่ง่ายและแม่นยำที่สุดในการคำนวณสแควร์รูทเป็นวิธีการของนิวตัน
คุณมีจำนวนที่คุณต้องการคำนวณสแควร์รูทของมัน(num)
และคุณก็เดาได้ว่าสแควร์รูท(estimate)
นั้น การประมาณสามารถเป็นตัวเลขใด ๆ ที่มากกว่า 0 แต่ตัวเลขที่เหมาะสมจะทำให้ความลึกของการโทรซ้ำเกิดขึ้นอย่างมีนัยสำคัญ
new_estimate = (estimate + num / estimate) / 2
บรรทัดนี้คำนวณการประมาณการที่แม่นยำยิ่งขึ้นด้วยพารามิเตอร์ทั้งสอง คุณสามารถส่งค่า new_estimate ไปยังฟังก์ชันและคำนวณ new_estimate อื่นที่มีความแม่นยำมากกว่าค่าก่อนหน้านี้หรือคุณสามารถสร้างนิยามฟังก์ชันแบบเรียกซ้ำได้เช่นนี้
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)
ตัวอย่างเช่นเราต้องการค้นหาสแควร์รูทของ 30 เรารู้ว่าผลลัพธ์อยู่ระหว่าง 5 ถึง 6
newtons_method(30,5)
หมายเลขคือ 30 และค่าประมาณคือ 5 ผลลัพธ์จากการโทรซ้ำแต่ละครั้งคือ:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
ผลลัพธ์สุดท้ายคือการคำนวณที่ถูกต้องที่สุดของสแควร์รูทของจำนวน มันเป็นค่าเดียวกับฟังก์ชั่นในตัว math.sqrt ()
อาจเป็นวิธีง่ายๆในการจำ: เพิ่มจุดหลังตัวเศษ (หรือส่วน)
16 ** (1. / 2) # 4
289 ** (1. / 2) # 17
27 ** (1. / 3) # 3
คุณสามารถใช้ NumPy เพื่อคำนวณรากที่สองของอาร์เรย์:
import numpy as np
np.sqrt([1, 4, 9])
ฉันหวังว่ารหัสที่กล่าวถึงด้านล่างจะตอบคำถามของคุณ
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)