程序应该接受两个名字,如果它们的长度相同,它应该检查它们是否是同一个单词。如果是同一个单词,它会打印“名字相同”。如果它们的长度相同,但字母不同,它将打印“名称不同,但长度相同”。我有一个问题的部分是在底部的四行。
#!/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
错误出现在字符串格式中。
使用'%'操作符使用传统字符串格式化的正确方法是使用printf风格的格式字符串(Python文档:http://docs.python.org/2/library/string.html#format-string-syntax):)
"'%s' is longer than '%s'" % (name1, name2)
但是,“%”操作符将来可能会被弃用。新的PEP 3101做事的方式是这样的:
"'{0}' is longer than '{1}'".format(name1, name2)
错误出现在字符串格式中。
使用'%'操作符使用传统字符串格式化的正确方法是使用printf风格的格式字符串(Python文档:http://docs.python.org/2/library/string.html#format-string-syntax):)
"'%s' is longer than '%s'" % (name1, name2)
但是,“%”操作符将来可能会被弃用。新的PEP 3101做事的方式是这样的:
"'{0}' is longer than '{1}'".format(name1, name2)
你混合了不同的格式函数。
老式的%格式化使用%代码进行格式化:
'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)
对我来说,这个错误是在我试图将一个元组传递到字符串格式方法时引起的。
我从这个问题/答案中找到了答案
复制和粘贴正确的答案从链接(不是我的工作):
>>> thetuple = (1, 2, 3)
>>> print "this is a tuple: %s" % (thetuple,)
this is a tuple: (1, 2, 3)
用感兴趣的元组作为唯一项创建一个单元组,
也就是说,(tuple,)部分是这里的关键位。