Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python ValueError: math domain error - สาเหตุและวิธีแก้ไข

Python ValueError: math domain error - สาเหตุและวิธีแก้ไข

ในคณิตศาสตร์ มีการดำเนินการที่ไม่ทำงานกับตัวเลขลบหรือศูนย์ ตัวอย่างเช่น รากที่สอง (square root) คุณไม่สามารถหารากที่สองของตัวเลขลบได้ Python สังเกตเห็นว่าไม่ใช่ทุกการดำเนินการที่ทำงานกับตัวเลขลบหรือศูนย์

Python จะยกข้อผิดพลาดเมื่อคุณพยายามใช้ตัวเลขลบในการดำเนินการที่ไม่รองรับ ในคู่มือนี้ เราจะพูดถึงสาเหตุของ ValueError: math domain error ไปจนถึงท้ายคู่มือ เราจะเดินทางผ่านวิธีแก้ไขปัญหานี้

ValueError: math domain error

Python ValueError: math domain error ถูกยกขึ้นเมื่อคุณใช้ตัวเลขที่ไม่ได้รับการรองรับโดยการดำเนินการทางคณิตศาสตร์ ข้อผิดพลาดนี้มักถูกยกขึ้นกับเมธอด sqrt() และ log()

ValueError เป็นชนิดข้อผิดพลาดที่บ่งชี้ว่าคุณกำลังดำเนินการทางคณิตศาสตร์บนค่าที่ไม่ทำงานกับการดำเนินการนั้น ในกรณี "math domain error" เราใช้ตัวเลขลบหรือศูนย์ที่ไม่ควรใช้

มาเดินทางผ่านตัวอย่างปัญหา ValueError: math domain error ในการทำงาน

สถานการณ์ตัวอย่าง

เรากำลังสร้างโปรแกรมคำนวณรากที่สองของตัวเลขที่กำหนด โปรแกรมนี้ออกแบบมาเพื่อช่วยนักเรียบทบทวนความรู้เรื่องรากที่สอง

มาเขียนโปรแกรมคำนวณรากที่สองของตัวเลขที่กำหนด เริ่มต้นด้วยการนำเข้าไลบรารี math ที่ต้องการคำนวณรากที่สอง:

import math

ต่อไป เราจะรับตัวเลขจากผู้ใช้:

number = input("Try solving the problem first using pencil and paper. Then, insert the number whose square root you want to verify: ")

เราแจ้งให้ผู้ใช้ลองหาคำตอบเองก่อน เนื่องจากโปรแกรมออกแบบมาเพื่อช่วยตรวจสอบคำตอบ ต่อไป เราจะหารากที่สองของค่าที่ผู้ใช้ป้อน:

answer = math.sqrt(int(number))

เราแปลงค่า number ซึ่งเก็บตัวเลขที่ผู้ใช้ต้องการหาราก ที่สอง เป็นจำนวนเต็ม (integer) จำเป็นเพราะเมธอด input() ที่เราใช้รับตัวเลข คืนค่าสตริง เราไม่สามารถหารากที่สองของค่าสตริงได้

สุดท้าย มาพิมพ์คำตอบไปคอนโซล:

print("The square root of {} is {}.".format(number, answer))

เราใช้คำสั่ง format() เพิ่มตัวเลขเข้าไปในสตริง สตริงของเราจะแสดง:

"The square root of [Number user inserted] is [The square root our program calculated]"

มาทดสอบโปรแกรมด้วยตัวเลขลบ:

Try solving the problem first using pencil and paper. Then, insert the number whose square root you want to verify: -16
Traceback (most recent call last):
File "test.py", line 5, in 
answer = math.sqrt(int(number))
ValueError: math domain error

เราใส่ค่า -16 เข้าโปรแกรม โค้ดคืนข้อผิดพลาด

มาแก้ไขข้อผิดพลาดนี้

วิธีแก้ไข (The Solution)

เพื่อแก้ไขข้อผิดพลาดนี้ เราต้องแจ้งเตือนผู้ใช้ว่าคุณไม่สามารถหารากที่สองของตัวเลขลบได้ ก่อนที่เราจะรันฟังก์ชัน math.sqrt()

มาปรับโค้ดให้ทำได้:

import math
number = input("Try solving the problem first using pencil and paper. Then, insert the number whose square root you want to verify: ")
if int(number) >= 0:
    answer = math.sqrt(int(number))
    print("The square root of {} is {}.".format(number, answer))
else:
    print("You cannot find the square root of a number less than 0.")

เราใช้คำสั่ง if ตรวจสอบว่าตัวเลขที่ผู้ใช้ป้อนเท่ากับหรือมากกว่าศูนย์ หากตัวเลขตรงเกณฑ์ เนื้อหา if จะรัน มิฉะนั้น คำสั่ง else จะรัน แสดงข้อความว่าเราใส่ตัวเลขไม่ถูกต้อง

มารันโปรแกรมอีกครั้ง โปรแกรมคืนค่า:

Try solving the problem first using pencil and paper. Then, insert the number whose square root you want to verify: -16
You cannot find the square root of a number less than 0.

โค้ดของเราทำงานสำเร็จ

สรุป

ValueError: math domain error ถูกยกขึ้นเมื่อคุณดำเนินการฟังก์ชันทางคณิตศาสตร์บนตัวเลขลบหรือศูนย์ที่ไม่สามารถคำนวณได้ เพื่อแก้ไขข้อผิดพลาดนี้ ตรวจสอบให้แน่ใจว่าคุณใช้ตัวเลขที่ถูกต้องสำหรับฟังก์ชันทางคณิตศาสตร์ที่ใช้

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโค้ด Python ดูคู่มือ How to Learn Python ของเรา คู่มือนี้มีแหล่งทรัพยากรการเรียนรู้ คอร์ส และหนังสือ สำหรับคนเรียนภาษาโปรแกรมมิ่ง Python