पायथन नियमों के लिए एक स्टिकर है। पायथन भाषा की मुख्य विशेषताओं में से एक आपको नियंत्रण में रखती है ताकि आपके कार्यक्रम आपके इच्छित तरीके से काम करें। जब आप स्ट्रिंग्स के साथ काम कर रहे हों, तो आपको यह कहते हुए एक त्रुटि का सामना करना पड़ सकता है कि "स्ट्रिंग फ़ॉर्मेटिंग के दौरान सभी तर्क परिवर्तित नहीं हुए"।
इस गाइड में, हम इस त्रुटि के बारे में बात करते हैं और यह क्यों पॉप अप होता है। हम दो सामान्य परिदृश्यों से गुजरते हैं जहां यह त्रुटि आपके कोड में इसे हल करने में आपकी सहायता करने के लिए उठाई जाती है।
आगे की हलचल के बिना, चलिए शुरू करते हैं!
समस्या:टाइपरर:सभी तर्क स्ट्रिंग स्वरूपण के दौरान परिवर्तित नहीं होते हैं
TypeError एक प्रकार की त्रुटि है जो हमें बताती है कि हम एक ऐसा कार्य कर रहे हैं जिसे एक निश्चित प्रकार के मान पर निष्पादित नहीं किया जा सकता है। इस मामले में, हमारे प्रकार की त्रुटि एक स्ट्रिंग मान से संबंधित है।
पायथन कई तरीके प्रदान करता है जिससे आप स्ट्रिंग्स को प्रारूपित कर सकते हैं। यह आपको स्ट्रिंग्स में मान डालने या स्ट्रिंग के अंत में मानों को जोड़ने की अनुमति देता है।
स्ट्रिंग्स को फ़ॉर्मेट करने के दो सबसे सामान्य तरीके हैं:
- % ऑपरेटर (पुरानी शैली) का उपयोग करना
- .format() फ़ंक्शन के साथ {} ऑपरेटर का उपयोग करना
जब आप इन दोनों सिंटैक्स का एक साथ उपयोग करने का प्रयास करते हैं, तो एक त्रुटि उत्पन्न होती है।
उदाहरण:मिक्सिंग स्ट्रिंग फ़ॉर्मेटिंग रूल्स
आइए एक प्रोग्राम लिखते हैं जो एक बेकरी में बेचे जाने वाले उत्पाद पर 5% मूल्य वृद्धि की गणना करता है।
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
हम उपयोगकर्ता से जानकारी के दो टुकड़े एकत्र करके शुरू करते हैं:उत्पाद का नाम और उत्पाद की कीमत। हम एक इनपुट () स्टेटमेंट का उपयोग करके ऐसा करते हैं:
name = input("Enter the name of the product: ") price = input("Enter the price of the product: ")
इसके बाद, हम "कीमत" के मूल्य को 1.05 से गुणा करके उत्पाद की नई कीमत की गणना करते हैं। यह 5% मूल्य वृद्धि दर्शाता है:
increase = round(float(price) * 1.05, 2)
हम एक राउंड () स्टेटमेंट का उपयोग करके "वृद्धि" के मान को दो दशमलव स्थानों तक गोल करते हैं। अंत में, कंसोल पर उत्पाद की नई कीमत प्रिंट करने के लिए स्ट्रिंग स्वरूपण का उपयोग करें:
print("The new price of {} is ${}. " % name, str(increase))
यह कोड हमारी स्ट्रिंग में "नाम" और "वृद्धि" के मान जोड़ता है। हम "वृद्धि" को अपनी स्ट्रिंग में मर्ज करने के लिए एक स्ट्रिंग में परिवर्तित करते हैं। इससे पहले कि हम मान परिवर्तित करें, "वृद्धि" एक फ़्लोटिंग-पॉइंट संख्या है। हमारा कोड चलाएँ और देखें कि क्या होता है:
Traceback (most recent call last): File "main.py", line 6, in <module> print("The new price of {} is {}" % name, str(discount)) TypeError: not all arguments converted during string formatting
ऐसा प्रतीत होता है कि हमारे कोड की अंतिम पंक्ति में कोई त्रुटि है।
समस्या यह है कि हमने अपने स्ट्रिंग स्वरूपण सिंटैक्स को मिश्रित किया है। हमने {} और % ऑपरेटरों का इस्तेमाल किया। इनका उपयोग दो अलग-अलग प्रकार के स्ट्रिंग स्वरूपण के लिए किया जाता है।
इस समस्या को हल करने के लिए, हम अपने प्रोग्रामिंग की अंतिम पंक्ति को कोड की निम्नलिखित दो पंक्तियों में से किसी एक से बदल देते हैं:
print("The new price of {} is ${}.".format(name, str(increase))) print("The new price of %s is $%s." % (name, str(increase)))
कोड की पहली पंक्ति .format()
. का उपयोग करती है वाक्य - विन्यास। यह {} के मानों को .format()
. के मानों से बदल देता है वे निर्दिष्ट क्रम में बयान।
कोड की दूसरी पंक्ति पुरानी शैली% स्ट्रिंग स्वरूपण तकनीक का उपयोग करती है। मान "%s" को उनके साथ बदल दिया गया है जो % ऑपरेटर के बाद कोष्ठक में संलग्न हैं।
आइए अपना कोड फिर से चलाएं और देखें कि क्या होता है:
Enter the name of the product: Babka Enter the price of the product: 2.50 The new price of Babka is $2.62.
हमारे कोड ने हमारे तर्कों को हमारी स्ट्रिंग में सफलतापूर्वक जोड़ दिया।
उदाहरण:मोडुलो ऑपरेटर को भ्रमित करना
मॉड्यूलो संख्या और स्ट्रिंग स्वरूपण की गणना करने के लिए पायथन प्रतिशत चिह्न (%) का उपयोग करता है। मॉडुलो संख्या एक विभाजन योग के बाद शेष बचे हुए हैं।
यदि आप किसी स्ट्रिंग पर प्रतिशत चिह्न का उपयोग करते हैं, तो इसका उपयोग स्वरूपण के लिए किया जाता है; यदि आप किसी संख्या पर प्रतिशत चिह्न का उपयोग करते हैं, तो इसका उपयोग मॉड्यूलो की गणना के लिए किया जाता है। इसलिए, यदि एक मान को एक स्ट्रिंग के रूप में स्वरूपित किया जाता है जिस पर आप एक मॉड्यूल गणना करना चाहते हैं, तो एक त्रुटि उठाई जाती है।
एक प्रोग्राम पर एक नज़र डालें जो गणना करता है कि कोई संख्या विषम है या सम:
number = input("Please enter a number: ") mod_calc = number % 2 if mod_calc == 0: print("This number is even.") else: print("This number is odd.")
सबसे पहले, हम उपयोगकर्ता को एक नंबर दर्ज करने के लिए कहते हैं। हम तब शेष की गणना करने के लिए मोडुलो ऑपरेटर का उपयोग करते हैं जो "संख्या" को 2 से विभाजित करने पर लौटाया जाता है।
यदि मॉड्यूलो ऑपरेटर द्वारा वापसी मूल्य 0 के बराबर है, तो हमारे if
. की सामग्री कथन निष्पादित। अन्यथा, else
. की सामग्री बयान चलता है।
चलिए अपना कोड चलाते हैं:
Please enter a number: 7 Traceback (most recent call last): File "main.py", line 2, in <module> mod_calc = number % 2 TypeError: not all arguments converted during string formatting
एक और टाइप एरर। यह त्रुटि इसलिए उठाई गई है क्योंकि "नंबर" एक स्ट्रिंग है। input()
विधि एक स्ट्रिंग देता है। यदि हम एक मोडुलो गणना करना चाहते हैं, तो हमें "नंबर" को एक फ्लोटिंग-पॉइंट या एक पूर्णांक में बदलने की आवश्यकता है।
हम फ्लोट () फ़ंक्शन का उपयोग करके "नंबर" को एक फ्लोट में बदल सकते हैं:
mod_calc = float(number) % 2
आइए अपना कोड फिर से चलाने का प्रयास करें:
Please enter a number: 7 This number is odd.
हमारा कोड काम करता है!
निष्कर्ष
"सभी तर्क स्ट्रिंग स्वरूपण के दौरान परिवर्तित नहीं होते हैं" त्रुटि तब उठाई जाती है जब पायथन सभी तर्कों को एक स्ट्रिंग प्रारूप संचालन में नहीं जोड़ता है। यह तब होता है जब आप अपने स्ट्रिंग स्वरूपण सिंटैक्स को मिलाते हैं या यदि आप एक स्ट्रिंग पर एक मॉड्यूलो ऑपरेशन करने का प्रयास करते हैं।
अब आप एक पेशेवर सॉफ्टवेयर इंजीनियर की तरह इस सामान्य पायथन त्रुटि को हल करने के लिए तैयार हैं!