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。