Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन ValueError: math domain error समाधान

ValueError: math domain error

गणित में, ऐसे संक्रियाएं हैं जो नकारात्मक संख्याओं या शून्य संख्याओं पर काम नहीं करती हैं। उदाहरण के लिए, वर्गमूल पर विचार करें। आप नकारात्मक संख्या का वर्गमूल नहीं ढूंढ सकते। पायथन पहचानता है कि सभी संक्रियाएं नकारात्मक या शून्य संख्याओं के साथ काम नहीं करती हैं।

जब आप किसी ऐसे ऑपरेशन पर नकारात्मक संख्या का उपयोग करने का प्रयास करते हैं जो उसका समर्थन नहीं करता है, तो पायथन त्रुटि उठाएगा। इस गाइड में, हम ValueError: math domain error के कारण के बारे में बात करने जा रहे हैं। गाइड के अंत में, हम इस समस्या के समाधान के माध्यम से चलेंगे।

ValueError: math domain error

पायथन 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" के मान को पूर्णांक में बदलते हैं, जो वह संख्या संग्रहीत करता है जिसका वर्गमूल उपयोगकर्ता ढूंढना चाहता है। यह आवश्यक है क्योंकि 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 डाला। हमारा कोड त्रुटि लौटाता है।

आइए इस त्रुटि को ठीक करें।

समाधान

इस त्रुटि को ठीक करने के लिए, हमें 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 तब उठाया जाता है जब आप किसी नकारात्मक या शून्य संख्या पर गणितीय फ़ंक्शन करते हैं जिसकी गणना नहीं की जा सकती। इस त्रुटि को हल करने के लिए, सुनिश्चित करें कि आप जिस गणितीय फ़ंक्शन का उपयोग कर रहे हैं उसके लिए वैध संख्या का उपयोग कर रहे हैं।

यदि आप पायथन में कोडिंग के बारे में अधिक जानना चाहते हैं, तो हमारा How to Learn Python गाइड देखें। इस गाइड में पायथन प्रोग्रामिंग भाषा सीख रहे लोगों के लिए डिज़ाइन किए गए कई सीखने के संसाधन, पाठ्यक्रम, और पुस्तकें हैं।

  1. - पायथन में संख्या का स्क्वायर रूट कैसे कैलकुलेट करें?

    पायथन लाइब्रेरी के मैथ मॉड्यूल में परिभाषित sqrt() फ़ंक्शन का उपयोग करना संख्या का स्क्वायर रूट कैलकुलेट करने का सबसे आसान तरीका है। >>> import math >>> math.sqrt(10) 3.1622776601683795 >>> math.sqrt(3) 1.7320508075688772

  1. - पायथन में संख्या की घात कैसे खोजें?

    संख्या की घात की गणना दो विधियों का उपयोग करके की जा सकती है। math.pow() फ़ंक्शन का उपयोग करके >>> math.pow(10,2) 100.0 एक्सपोनेंशिएशन ऑपरेटर का उपयोग करके >>> 10**2 100

  1. - पायथन में संख्या का नेचुरल लॉग कैसे कैलकुलेट करें?

    मैथ मॉड्यूल में, लॉगरिदमिक वैल्यू की गणना के लिए दो फ़ंक्शन परिभाषित हैं। log() फ़ंक्शन संख्या का नेचुरल लॉगरिदम लौटाता है, जबकि log10() स्टैंडर्ड लॉगरिदम यानी बेस 10 की गणना करता है। log() फ़ंक्शन दो आर्गुमेंट लेता है, संख्या और बेस। import math print(math.log(100.12) : , math.log(100.12)) print(m