TypeError:不是在string格式化python过程中转换的所有参数
程序应该有两个名字,如果长度相同,应该检查它们是否是相同的单词。 如果它是相同的单词,它将打印“名称是相同的” 。 如果长度相同但字母不同,则会打印“名称不同但长度相同” 。 我有一个问题的部分是在底部的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
任何build议,高度赞赏。
你正在混合不同的格式function。
旧式%
格式使用%
代码格式化:
'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)
错误是在你的string格式。
使用'%'运算符使用传统string格式的正确方法是使用printf样式的格式string(这里是Python文档: http : //docs.python.org/2/library/string.html#format-string语法 ):
"'%s' is longer than '%s'" % (name1, name2)
但是,'%'操作符将来可能会被弃用 。 新的PEP 3101做事的方式是这样的:
"'{0}' is longer than '{1}'".format(name1, name2)
对我来说,这个错误是当我试图传入一个元组到string格式的方法。
我从这个问题/答案find了解决scheme
从链接复制并粘贴正确的答案(不是我的工作) :
>>> thetuple = (1, 2, 3) >>> print "this is a tuple: %s" % (thetuple,) this is a tuple: (1, 2, 3)
使用感兴趣的元组作为唯一的元素,即(thetuple)部分,是这里的关键。
除了另外两个答案,我认为在最后两个条件中,缩进也是不正确的。 条件是一个名字比另一个更长,他们需要以“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))
在我的情况下,因为我需要一个单一的%s,我缺less值input。