2013-08-05 12 views
105

के दौरान परिवर्तित सभी तर्क नहीं, कार्यक्रम दो नामों में लेना चाहिए, और यदि वे एक ही लंबाई हैं तो यह जांचना चाहिए कि वे एक ही शब्द हैं या नहीं। यदि यह वही शब्द है तो यह प्रिंट करेगा "नाम समान हैं"। यदि वे एक ही लंबाई हैं लेकिन विभिन्न अक्षरों के साथ यह प्रिंट करेगा "नाम अलग हैं लेकिन समान लंबाई"। जिस हिस्से में मुझे समस्या है, वह नीचे 4 लाइनों में है।टाइपरर: स्ट्रिंग स्वरूपण पायथन

#!/usr/bin/env python 
# Enter your code for "What's In (The Length Of) A Name?" here. 
name1 = input("Enter name 1: ") 
name2 = input("Enter name 2: ") 
len(name1) 
len(name2) 
if len(name1) == len(name2): 
    if name1 == name2: 
     print ("The names are the same") 
    else: 
     print ("The names are different, but are the same length") 
    if len(name1) > len(name2): 
     print ("'{0}' is longer than '{1}'"% name1, name2) 
    elif len(name1) < len(name2): 
     print ("'{0}'is longer than '{1}'"% name2, name1) 

यह प्रदर्शित करता है जब मैं इस कोड को चलाएँ:

Traceback (most recent call last): 
    File "program.py", line 13, in <module> 
    print ("'{0}' is longer than '{1}'"% name1, name2) 
TypeError: not all arguments converted during string formatting 

कोई सुझाव अत्यधिक सराहना कर रहे हैं।

उत्तर

132

आप विभिन्न प्रारूप कार्यों को मिश्रित कर रहे हैं।

पुरानी शैली % स्वरूपण प्रारूपण के लिए % कोड का उपयोग करता है:

'It will cost $%d dollars.' % 95 

नई शैली {} स्वरूपण {} कोड का उपयोग करता है और .format विधि

'It will cost ${0} dollars.'.format(95) 

ध्यान दें कि पुरानी शैली स्वरूपण के साथ , आपको टुपल का उपयोग करके कई तर्क निर्दिष्ट करना होगा:

'%d days and %d nights' % (40, 40) 

आपके मामले में, जब से तुम {} प्रारूप विनिर्देशक का उपयोग कर रहे .format का उपयोग करें:

"'{0}' is longer than '{1}'".format(name1, name2) 
+4

पायथन 3.6: 'एफ" 'इसकी लागत $ {your_variable} डॉलर होगी। "' – JinSnow

27

त्रुटि अपने स्ट्रिंग स्वरूपण में है।

"'%s' is longer than '%s'" % (name1, name2) 

हालांकि, '%':

सही तरीका '%' ऑपरेटर उपयोग कर रहा है एक printf शैली प्रारूप स्ट्रिंग (: http://docs.python.org/2/library/string.html#format-string-syntax अजगर प्रलेखन इस यहाँ के लिए) का उपयोग करने के स्वरूपण परंपरागत स्ट्रिंग का उपयोग करना ऑपरेटर will probably be deprecated in the future। काम करने के नए PEP 3101 तरह से इस तरह है:

"'{0}' is longer than '{1}'".format(name1, name2) 
+7

scnr: "शायद भविष्य में बहिष्कृत हो जाएगा" अब तक नहीं हुआ (पायथन 3.5)। पुराने '%' वाक्यविन्यास को [3.1] (https://docs.python.org/3.1/whatsnew/3.1.html) में हटाया नहीं गया था और केवल 3.2 में [लॉगिंग मॉड्यूल ने नई शैली के साथ प्रारूपित करना सीखा था { } '] (https://docs.python.org/3.2/whatsnew/3.2.html#logging)। और अचानक 3.5 लाता है [पीईपी 461: बाइट्स के लिए '%' स्वरूपण] (https://docs.python.org/3.5/whatsnew/3.5.html#pep-461-formatting-support-for-bytes-and-bytearray) । इससे मुझे लगता है कि आने वाले लंबे समय तक '% 'बनी हुई है। – cfi

+5

'%' अधिक संक्षिप्त है। खुशी है कि यह हमारे साथ रहता है। –

+1

मैं सहमत हूं। % अधिक संक्षेप में है और हटाने से भाषा में कोई फायदा नहीं होगा। – chevydog

2

अन्य दो जवाब के अलावा, मुझे लगता है कि indentations भी पिछले दो की स्थिति में सही नहीं हैं। स्थितियां हैं कि एक नाम दूसरे की तुलना में लंबा है और उन्हें 'elif' से शुरू करने की आवश्यकता है और बिना किसी इंडेंटेशन के। यदि आप इसे पहली स्थिति में डालते हैं (इसे मार्जिन से चार इंडेंटेशन देकर), यह विरोधाभासी होने लगता है क्योंकि नामों की लंबाई एक ही समय में बराबर और अलग नहीं हो सकती है।

else: 
     print ("The names are different, but are the same length") 
elif len(name1) > len(name2): 
    print ("{0} is longer than {1}".format(name1, name2)) 
23

मेरे लिए, यह त्रुटि तब हुई जब मैं स्ट्रिंग प्रारूप विधि में टुपल में पास करने का प्रयास कर रहा था।

I found the solution from this question/answer

कॉपी करने और (नहीं मेरे काम) लिंक से सही उत्तर चिपकाने:

>>> thetuple = (1, 2, 3) 
>>> print "this is a tuple: %s" % (thetuple,) 
this is a tuple: (1, 2, 3) 

Making a singleton tuple with the tuple of interest as the only item, i.e. the (thetuple,) part, is the key bit here.

+0

यह अक्सर समस्या का कारण है! –

+0

मैं निम्नलिखित कथनों में से किसी एक का उपयोग करके टुपल को एक स्ट्रिंग में परिवर्तित कर दूंगा: 'प्रिंट ("यह एक टुपल है:% s"% str (thetuple))' या 'प्रिंट (" यह एक tuple:% s "% है repr (thetuple)) ' – AlexG

1

मेरे मामले में, यह क्योंकि मैं केवल एक ही %s की जरूरत है, मैं गुम मूल्य इनपुट।

+0

यहां एक ही समस्या है – Taylor

0

मैं भी त्रुटि का सामना करना,

_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting 

लेकिन सूची आर्ग अच्छी तरह से काम करते हैं।

मैं mysqlclient पायथन lib का उपयोग करता हूं। Lib लगता है कि tuple args स्वीकार नहीं है। सूची तर्क पास करने के लिए ['arg1', 'arg2'] काम करेगा।

संबंधित मुद्दे