Trong toán học, có các hoạt động không hoạt động trên các số âm hoặc số 0. Hãy xem xét căn bậc hai, ví dụ. 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 bằng không.
Python sẽ gây ra lỗi khi bạn cố gắng sử dụng số âm trên một thao tác không hỗ trợ. Trong hướng dẫn này, chúng tôi sẽ nói về nguyên nhân của ValueError: math domain error
. Đến cuối hướng dẫn, chúng tôi sẽ đi qua một giải pháp cho vấn đề này.
Tìm Bootcamp của bạn phù hợp
- Karma nghề nghiệp phù hợp với bạn với bootcamp công nghệ hàng đầu
- Truy cập các học bổng và khóa học chuẩn bị độc quyền
Chọn mối quan tâm của bạn họ Tên điện thoại Email Tên của bạn
First name
Last name
Email
Phone number
Bằng cách tiếp tục, bạn đồng ý với các điều khoản dịch vụ và chính sách quyền riêng tư của chúng tôi và bạn đồng ý nhận được các ưu đãi và cơ hội từ Karma nghề nghiệp qua điện thoại, tin nhắn văn bản và email.
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 hỗ trợ bởi một hoạt động toán học. Lỗi này thường được nêu ra bằng phương pháp sqrt[]
và phương pháp
answer = math.sqrt[int[number]]0.
ValueError là một loại lỗi cho thấy bạn đang thực hiện một thao tác toán học trên một giá trị không hoạt động với thao tác đó. Trong trường hợp lỗi miền Math Math, chúng tôi đang sử dụng số âm hoặc số 0 mà chúng tôi không nên có.
Hãy cùng đi qua một ví dụ về vấn đề ValueError: math domain error
trong hành động.
Một kịch bản ví dụ
Chúng tôi đang xây dựng một chương trình tính toán căn bậc hai của một số nhất định. Chương trình này được thiết kế để giúp sinh viên sửa đổi kiến thức về gốc vuông.
Hãy để viết một chương trình tính toán căn bậc hai của một số nhất định. Chúng tôi sẽ bắt đầu bằng cách nhập thư viện toán học mà chúng tôi cần tính toán một căn bậc hai:
Tiếp theo, chúng tôi sẽ thu thập một số từ người dùng:
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 tôi sẽ tìm thấy 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 số Số, 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 bởi vì phương pháp
answer = math.sqrt[int[number]]2, mà chúng tôi đã sử dụng để thu thập số đã nói ở trên, trả về một chuỗi. Chúng ta 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 bản in câu trả lời cho bảng điều khiển:
print["The square root of {} is {}.".format[number, answer]]
Chúng tôi sử dụng câu lệnh
answer = math.sqrt[int[number]]3 để 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 để thử nghiệm 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 answer = math.sqrt[int[number]] ValueError: math domain error
Chúng tôi đã chèn giá trị
answer = math.sqrt[int[number]]4 vào chương trình của chúng tôi. Mã của chúng tôi trả về một lỗi.
Hãy để sửa lỗi 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 toán căn bậc hai của số âm trước khi chúng tôi thực thi hàm
answer = math.sqrt[int[number]]5.
Hãy để sửa đổi mã của chúng tôi để thực hiện điều này:
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 câu lệnh
answer = math.sqrt[int[number]]6 để kiểm tra xem số người dùng chèn vào chương trình có 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 câu lệnh
answer = math.sqrt[int[number]]6 chạy. Mặt khác, câu lệnh
answer = math.sqrt[int[number]]8 thực thi, trình bày cho chúng tôi một thông báo mà 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.
Sự kết luận
ValueError: math domain error
được nâng lên khi bạn thực hiện hàm toán học trên số âm hoặc 0 không thể tính được. Để giải quyết lỗi này, hãy đảm bảo bạn đang sử dụng một số hợp lệ cho hàm toán học bạn đang sử dụng.
Nếu bạn muốn tìm hiểu thêm về mã hóa trong Python, hãy xem Cách học hướng dẫn 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.