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

Python NameError: name 'xrange' is not defined समाधान

Python 3 में, xrange फ़ंक्शन को हटा दिया गया था। यदि आप Python 3 प्रोग्राम में xrange फ़ंक्शन का उपयोग करने का प्रयास करते हैं, तो आपको NameError: name 'xrange' is not defined त्रुटि का सामना करना पड़ेगा।

इस गाइड में, हम चर्चा करेंगे कि इस त्रुटि का क्या अर्थ है और आप इसका सामना क्यों कर सकते हैं। हम इस त्रुटि का एक उदाहरण चर्चा करेंगे ताकि आप सीख सकें कि इसे अपने कोड में कैसे ठीक किया जाए।

NameError: name 'xrange' is not defined

Python 2 में, xrange फ़ंक्शन आपको संख्याओं की एक श्रृंखला बनाने देता है। निम्न कोड स्निपेट पर विचार करें:

print(xrange(0, 3))

हमारा कोड [0, 1, 2] लौटाता है, जो 0 और 3 की सीमा में सभी संख्याएं हैं (3 को छोड़कर)। xrange() फ़ंक्शन संख्याओं की एक सूची लौटाता है।

Python 3 ने xrange() फ़ंक्शन को range() नामक एक नए फ़ंक्शन के पक्ष में हटा दिया। range() फ़ंक्शन, xrange() की तरह, संख्याओं की एक श्रृंखला उत्पन्न करता है।

xrange() और range() के बीच दो अंतर हैं:

  • xrange() और range() के अलग-अलग नाम हैं।
  • xrange() फ़ंक्शन संख्याओं की एक सूची उत्पन्न करता है। range() फ़ंक्शन एक ऑब्जेक्ट उत्पन्न करता है।

क्योंकि range() फ़ंक्शन एक ऑब्जेक्ट उत्पन्न करता है, यदि आप संख्याओं की सूची देखना चाहते हैं तो आपको इसे सूची में बदलना होगा। अन्यथा, ये दोनों मेथड्स समान तरीके से कार्य करते हैं।

एक उदाहरण परिदृश्य

हम एक प्रोग्राम लिखने जा रहे हैं जो कार्ड गेम लीडरबोर्ड में शीर्ष पर मौजूद पहले कुछ खिलाड़ियों को प्रदर्शित करता है। शुरू करने के लिए, आइए अपने लीडरबोर्ड को एक सूची के रूप में घोषित करें:

leaderboard = ["Alex", "Jonas", "Emma", "Kate"]

अगला, हम उपयोगकर्ता से पूछेंगे कि वे कितने स्कोर देखना चाहते हैं:

to_view = int(input("How many scores would you like to view? "))

हम उपयोगकर्ता द्वारा डाले गए मान को एक पूर्णांक में बदलते हैं। ऐसा इसलिए है क्योंकि xrange() फ़ंक्शन केवल पूर्णांकों का समर्थन करता है।

अगला, आइए एक फॉर लूप का उपयोग करके अपने लीडरबोर्ड सूची पर पुनरावृति करें। हम केवल कंसोल पर उतने परिणाम प्रदर्शित करेंगे जितने उपयोगकर्ता ने देखने का अनुरोध किया है:

for l in xrange(0, to_view):
    print(l + 1, leaderboard[l])

हम 0 और उपयोगकर्ता द्वारा डाली गई संख्या के बीच संख्याओं की एक श्रृंखला उत्पन्न करने के लिए xrange() फ़ंक्शन का उपयोग करते हैं। हमारे फॉर लूप में, हम print() स्टेटमेंट का उपयोग उस लीडरबोर्ड एंट्री को प्रिंट करने के लिए करते हैं जो xrange() सूची में उस संख्या से संबंधित है जिसे हमारा लूप देख रहा है।

हम "l" के मान को एक के साथ प्रिंट करते हैं और एक खिलाड़ी का नाम। यह हमें उनकी स्थिति देखने देता है। क्योंकि सूचियाँ शून्य से अनुक्रमित होती हैं, हम "l" में एक जोड़ते हैं। यह हमारी सूची में पहले खिलाड़ी को स्थिति "0" पर होने से रोकता है और इसी तरह।

आइए अपना कोड चलाएं और देखें कि क्या होता है:

How many scores would you like to view? 2
Traceback (most recent call last):
  File "main.py", line 5, in 
    for l in xrange(0, to_view):
NameError: name 'xrange' is not defined

हमारा प्रोग्राम एक त्रुटि लौटाता है।

समाधान

हमने संख्याओं की एक श्रृंखला उत्पन्न करने के लिए xrange() फ़ंक्शन का उपयोग किया है। Python 2 में, यह मान्य होता। हम अपना प्रोग्राम चलाने के लिए Python 3 का उपयोग कर रहे हैं, जिसका अर्थ है कि हम xrange() फ़ंक्शन को संदर्भित नहीं कर सकते।

हमारी त्रुटि को हल करने के लिए, हमें xrange() को range() मेथड से बदलना होगा:

for l in range(0, to_view):
    print(l + 1, leaderboard[l])

इस उपयोग के मामले के लिए, दोनों xrange() और range() समान परिणाम लौटाएंगे। आइए अपना कोड चलाकर देखें कि यह काम करता है या नहीं:

How many scores would you like to view? 2
1 Alex
2 Jonas

हमारा प्रोग्राम सफलतापूर्वक टूर्नामेंट में उन खिलाड़ियों के नाम प्रदर्शित करता है जो लीडरबोर्ड पर पहले दो स्थानों पर दिखाई देते हैं।

xrange() मेथड को पुनः परिभाषित करना

इस समस्या का एक संभावित समाधान आपके प्रोग्राम की शुरुआत में xrange नामक एक वेरिएबल को परिभाषित करना है जो range() फ़ंक्शन के बराबर हो:

xrange = range

यह इस त्रुटि का अच्छा समाधान नहीं है। ऐसा इसलिए है क्योंकि आप मौजूदा मेथड्स का नाम बदलने की समस्या से केवल बच रहे हैं। Python 3 कोडबेस में xrange() स्टेटमेंट्स देखकर किसी के लिए भ्रमित करने वाला होगा, भले ही आपने xrange को एक वेरिएबल के रूप में परिभाषित किया हो।

सबसे अच्छा समाधान अपने xrange() स्टेटमेंट्स का नाम बदलकर range() करना है और यह सुनिश्चित करने के लिए कोई भी आवश्यक परिवर्तन करना है कि आपका कोडबेस Python 3 में काम करता है।

निष्कर्ष

"NameError: name 'xrange' is not defined" त्रुटि तब उत्पन्न होती है जब आप Python 3 में संख्याओं की एक श्रृंखला बनाने के लिए xrange() मेथड का उपयोग करने का प्रयास करते हैं। इस त्रुटि को हल करने के लिए, अपने कोड को Python 3 के साथ आने वाले range() मेथड का उपयोग करने के लिए अपडेट करें।

range() xrange() के लिए Python 3 का प्रतिस्थापन है। अब आपके पास इस त्रुटि को एक पेशेवर की तरह हल करने का ज्ञान है!

  1. Python में def से परिभाषित फंक्शन को कैसे प्लॉट करें? (Matplotlib) Python में def से परिभाषित फंक्शन को कैसे प्लॉट करें? (Matplotlib)

    Python में def से परिभाषित फंक्शन को प्लॉट करने के लिए, हम निम्नलिखित चरण अपना सकते हैं -फिगर का आकार सेट करें और सबप्लॉट्स के बीच और आसपास पैडिंग एडजस्ट करें।def का उपयोग करके यूजर-डिफाइंड फंक्शन बनाएं, यानी f(x)।NumPy का उपयोग करके x डेटा पॉइंट्स बनाएं।plot() मेथड का उपयोग करके x और f(x) प्लॉट करे

  1. पायथन में issubset() फंक्शन पायथन में issubset() फंक्शन

    इस लेख में, हम पायथन स्टैंडर्ड लाइब्रेरी में उपलब्ध issubset() फंक्शन के कार्यान्वयन और उपयोग के बारे में जानेंगे।issubset() मेथड बूलियन True वापस करता है जब एक सेट के सभी तत्व दूसरे सेट में मौजूद होते हैं (जिसे तर्क के रूप में पारित किया जाता है) अन्यथा, यह बूलियन False वापस करता है।नीचे दिए गए चित

  1. - पायथन में NameError एक्सेप्शन कैसे पकड़ें?

    NameErrors तब उठाए जाते हैं जब आपका कोड किसी ऐसे नाम को संदर्भित करता है जो वर्तमान स्कोप में मौजूद नहीं है। उदाहरण के लिए, एक अनक्वालिफाइड वेरिएबल नाम। दिए गए कोड को एक्सेप्शन पकड़ने और उसका प्रकार खोजने के लिए निम्न प्रकार से फिर से लिखा गया है। उदाहरण import sys try: def foo(): print(