python - मैं str और int वस्तुओं को कैसे जोड़ सकता हूं?




string python-3.x (3)

इस समस्या को हल करने के सबसे सरल तरीकों में से एक (यह सवाल था, है ना?) कॉम्टेनेशन ऑपरेटर के रूप में अल्पविराम (',') का उपयोग करके स्ट्रिंग में किसी भी प्रकार की ऑब्जेक्ट को संयोजित करने के लिए उपयोग किया जाता है। यह प्रिंट () के साथ अच्छा काम करता है और यदि यह पर्याप्त नहीं है (सिलाई पॉइंट 'प्रिंट ()' इन्सर्ट पर रिक्त स्थान से बचने के लिए) बस नीचे दिए गए 'myprint ()' फ़ंक्शन का उपयोग करें। एक और आसान उपकरण "concatByComma ()" फ़ंक्शन होगा जो उचित स्ट्रिंग देता है।

बस नीचे दिए गए कोड को चलाएं और मज़े करें :)

def myprint(*arg): 
    strToPrint = ""
    for item in arg:
        strToPrint += str(item)
    print(strToPrint)
def concatByComma(*arg):
    strToPrint = ""
    for item in arg:
        strToPrint += str(item)
    return strToPrint
I = "I"; i=5
print(I, " am " , i , " years old")
print(('s','o', I),[' wrote','it:'],' ',{1:'hour'},'and',5," min.")
myprint(('s','o', I),[' wrote','it:'],' ',{1:'hour'},'and',5," min.")

अगर मैं निम्नलिखित करने का प्रयास करता हूं:

things = 5
print("You have " + things + " things.")

मुझे पाइथन 3.x में निम्न त्रुटि मिलती है:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be str, not int

... और पायथन 2.x में एक समान त्रुटि:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

मैं इस समस्या के आसपास कैसे हो सकता हूं?


यहां समस्या यह है कि + ऑपरेटर (कम से कम) पाइथन में दो अलग-अलग अर्थ हैं: संख्यात्मक प्रकारों के लिए, इसका अर्थ है "संख्याएं एक साथ जोड़ें":

>>> 1 + 2
3
>>> 3.4 + 5.6
9.0

... और अनुक्रम प्रकारों के लिए, इसका अर्थ है "अनुक्रमों को संयोजित करें":

>>> [1, 2, 3] + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> 'abc' + 'def'
'abcdef'

एक नियम के रूप में, पाइथन संचालन को "समझ में लाने" के लिए वस्तुओं को एक प्रकार से दूसरे में परिवर्तित नहीं करता है, क्योंकि यह भ्रमित होगा: उदाहरण के लिए, आपको लगता है कि '3' + 5 का मतलब '35' होना चाहिए , लेकिन किसी और को लगता है कि इसका मतलब 8 या यहां तक ​​कि '8' होना चाहिए।

इसी प्रकार, पायथन आपको दो अलग-अलग प्रकार के अनुक्रमों को संयोजित नहीं करने देगा:

>>> [7, 8, 9] + 'ghi'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

इस वजह से, आपको रूपांतरण को स्पष्ट रूप से करने की आवश्यकता है, चाहे आप जो चाहते हैं वह संगतता या अतिरिक्त है:

>>> 'Total: ' + str(123)
'Total: 123'
>>> int('456') + 789
1245

हालांकि, एक बेहतर तरीका है । आपके द्वारा उपयोग किए जाने वाले पायथन के किस संस्करण के आधार पर, तीन अलग-अलग प्रकार के स्ट्रिंग स्वरूपण उपलब्ध हैं 2 , जो आपको केवल एकाधिक + संचालन से बचने की अनुमति नहीं देता है:

>>> things = 5

>>> 'You have %d things.' % things  # % interpolation
'You have 5 things.'

>>> 'You have {} things.'.format(things)  # str.format()
'You have 5 things.'

>>> f'You have {things} things.'  # f-string (since Python 3.6)
'You have 5 things.'

... लेकिन यह भी नियंत्रित करने की अनुमति देता है कि मूल्य कैसे प्रदर्शित होते हैं:

>>> value = 5
>>> sq_root = value ** 0.5
>>> sq_root
2.23606797749979

>>> 'The square root of %d is %.2f (roughly).' % (value, sq_root)
'The square root of 5 is 2.24 (roughly).'

>>> 'The square root of {v} is {sr:.2f} (roughly).'.format(v=value, sr=sq_root)
'The square root of 5 is 2.24 (roughly).'

>>> f'The square root of {value} is {sq_root:.2f} (roughly).'
'The square root of 5 is 2.24 (roughly).'

चाहे आप % इंटरपोलेशन का उपयोग करें, str.format() , या f-strings आपके ऊपर है:% इंटरपोलेशन सबसे लंबे समय तक रहा है (और सी में पृष्ठभूमि वाले लोगों से परिचित है), str.format() अक्सर अधिक शक्तिशाली होता है , और एफ-स्ट्रिंग अभी भी अधिक शक्तिशाली हैं (लेकिन केवल पायथन 3.6 और बाद में उपलब्ध हैं)।

एक अन्य विकल्प इस तथ्य का उपयोग करना है कि यदि आप एकाधिक स्थितित्मक तर्क print करते हैं, तो यह sep कीवर्ड तर्क (जो ' ' डिफ़ॉल्ट) का उपयोग करके एक साथ उनके स्ट्रिंग प्रस्तुतियों में शामिल होगा:

>>> things = 5
>>> print('you have', things, 'things.')
you have 5 things.
>>> print('you have', things, 'things.', sep=' ... ')
you have ... 5 ... things.

... लेकिन यह आमतौर पर पाइथन की अंतर्निहित स्ट्रिंग स्वरूपण क्षमताओं का उपयोग करने के रूप में लचीला नहीं है।

1 हालांकि यह संख्यात्मक प्रकारों के लिए अपवाद बनाता है, जहां अधिकांश लोग 'सही' चीज़ पर सहमत होंगे:

>>> 1 + 2.3
3.3
>>> 4.5 + (5.6+7j)
(10.1+7j)

2 असल में चार ... लेकिन टेम्पलेट तारों का शायद ही कभी उपयोग किया जाता है और कुछ हद तक अजीब होता है।








python-2.x