Computer >> Máy Tính >  >> Lập trình >> Python

Python ValueError:Giải pháp lỗi miền toán học

Trong toán học, có những phép toán không hoạt động trên số âm hoặc số không. Hãy xem xét căn bậc hai, chẳng hạn. Bạn không thể tìm thấy căn bậc hai của một số âm. Python nhận ra rằng không phải tất cả các hoạt động đều hoạt động với số âm hoặc số không.

Python sẽ phát sinh lỗi khi bạn cố gắng sử dụng một số âm trên một hoạt động không hỗ trợ một số âm. Trong hướng dẫn này, chúng ta sẽ nói về nguyên nhân của ValueError: math domain error . Ở phần cuối của hướng dẫn, chúng ta sẽ xem xét một giải pháp cho vấn đề này.

ValueError:lỗi miền toán học

Python ValueError: math domain error được nâng lên khi bạn sử dụng một số không được phép toán hỗ trợ. Lỗi này thường xảy ra với sqrt()log() phương pháp.

ValueError là một loại lỗi cho biết bạn đang thực hiện một phép toán trên một giá trị không hoạt động với phép toán đó. Trong trường hợp "lỗi miền toán học", chúng tôi đang sử dụng một số âm hoặc một số 0 mà chúng tôi không nên làm như vậy.

Hãy xem qua một ví dụ về ValueError: math domain error vấn đề đang hoạt động.

Một tình huống mẫu

Chúng tôi đang xây dựng một chương trình tính căn bậc hai của một số nhất định. Chương trình này được biên soạn nhằm giúp học sinh ôn tập kiến ​​thức về căn bậc hai.

Hãy viết một chương trình tính căn bậc hai của một số nhất định. Chúng ta sẽ bắt đầu bằng cách nhập thư viện toán học mà chúng ta cần để tính căn bậc hai:

import math

Tiếp theo, chúng tôi sẽ thu thập một số từ người dùng:

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

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

Chúng tôi nhắc người dùng thử tự tìm câu trả lời vì chương trình của chúng tôi được thiết kế để giúp mọi người kiểm tra câu trả lời của họ. Tiếp theo, chúng ta sẽ tìm căn bậc hai của giá trị mà người dùng chèn:

answer = math.sqrt(int(number))

Chúng tôi chuyển đổi giá trị của "number", lưu trữ số có căn bậc hai mà người dùng muốn tìm, thành một số nguyên. Điều này là cần thiết vì input() , mà chúng tôi đã sử dụng để thu thập số nói trên, trả về một chuỗi. Chúng tôi không thể tìm thấy căn bậc hai của một giá trị chuỗi.

Cuối cùng, hãy in câu trả lời vào bảng điều khiển:

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

Chúng tôi sử dụng format() câu lệnh để thêm số vào chuỗi của chúng tôi. Chuỗi của chúng tôi sẽ hiển thị:

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

Hãy kiểm tra chương trình của chúng tôi với một số âm:

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 <module>
	answer = math.sqrt(int(number))
ValueError: math domain error

Chúng tôi đã chèn giá trị -16 vào chương trình của chúng tôi. Mã của chúng tôi trả lại một lỗi.

Hãy sửa lỗi này.

Giải pháp

Để khắc phục lỗi này, chúng tôi cần nhắc người dùng rằng bạn không thể tính căn bậc hai của một số âm trước khi chúng tôi thực thi math.sqrt() chức năng.

Hãy sửa đổi mã của chúng tôi để làm cho điều này xảy ra:

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

Chúng tôi sử dụng if để kiểm tra xem số người dùng chèn vào chương trình bằng hoặc lớn hơn không. Nếu số đáp ứng tiêu chí này, nội dung của if câu lệnh chạy. Nếu không, else thực thi câu lệnh, hiển thị cho chúng tôi một thông báo rằng chúng tôi đã chèn một số không hợp lệ.

Hãy chạy lại chương trình của chúng tôi. Chương trình của chúng tôi trả về:

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.

Mã của chúng tôi hoạt động thành công.

Kết luận

ValueError: math domain error được nâng lên khi bạn thực hiện một hàm toán học trên một số âm hoặc số 0 không thể tính được. Để giải quyết lỗi này, hãy đảm bảo rằng bạn đang sử dụng một số hợp lệ cho hàm toán học mà bạn đang sử dụng.

Nếu bạn muốn tìm hiểu thêm về cách viết mã bằng Python, hãy xem hướng dẫn Cách học Python của chúng tôi. Hướng dẫn này chứa một số tài nguyên học tập, khóa học và sách được thiết kế cho những người đang học ngôn ngữ lập trình Python.