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

पायथन नाम त्रुटि:नाम 'xrange' परिभाषित नहीं है समाधान

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

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

NameError:नाम 'xrange' परिभाषित नहीं है

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

print(xrange(0, 3))

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

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

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

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

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

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

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

81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।

बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।

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])

हम xrange() . का उपयोग करते हैं 0 और उपयोगकर्ता द्वारा डाली गई संख्या के बीच संख्याओं की एक श्रृंखला उत्पन्न करने के लिए कार्य करता है। हमारे लूप के लिए, हम एक 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 <module>
	for l in xrange(0, to_view):
NameError: name 'xrange' is not defined

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

समाधान

हमने xrange() . का इस्तेमाल किया है संख्याओं की एक श्रृंखला उत्पन्न करने के लिए कार्य करता है। पायथन 2 में, यह मान्य होगा। हम अपने प्रोग्राम को चलाने के लिए पायथन 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() . के लिए कथन और यह सुनिश्चित करने के लिए कि आपका कोडबेस पायथन 3 में काम करता है, कोई भी आवश्यक परिवर्तन करने के लिए।

निष्कर्ष

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

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


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

    पायथन में def के साथ परिभाषित एक फ़ंक्शन को प्लॉट करने के लिए, हम निम्नलिखित कदम उठा सकते हैं - आकृति का आकार सेट करें और सबप्लॉट के बीच और आसपास पैडिंग समायोजित करें। def, . का उपयोग करके एक उपयोगकर्ता-परिभाषित फ़ंक्शन बनाएं यानी, f(x). बनाएं x डेटा अंक numpy का उपयोग कर रहे हैं। प्लॉट x और f(x)

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

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

  1. पायथन में NameError अपवाद कैसे पकड़ें?

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