Python 字符串格式化代码中出现 TypeError
Python TypeError in string formatting code
我有一个问题,我必须将伪代码转换为 Python,但出现错误:
Traceback (most recent call last):
File "C:/Users/Toshiba/Documents/Stevens stuff/Rings work.py", line 16, in <module>
Rings[i] = int(input(("How many teeth are on ring #i ?") % (i + 1)))
TypeError: not all arguments converted during string formatting
我的代码目前看起来像:
Rings = [0,0,0,0,0,0,0,0]
n = 0
while n == 0:
NumberofRings = int(input("How many rings are on your bike? "))
if NumberofRings <1 or NumberofRings >8:
print("Enter a number between 1 and 8")
else:
n = n + 1
Rings[0] = int(input("How many teeth are on ring 1? "))
for i in range (1, NumberofRings):
T = 0
while T == 0:
Rings[i] = int(input(("How many teeth are on ring #i ?") % (i + 1)))
if Rings[1] >= Rings(i - 1):
print("The number of teeth must be lower that the previious ring")
else:
T = 1
print ("=================")
for i in range(0, (len(Rings))):
print (("Ring #i has #i teeth") % (i + 1, Rings[i]))
这个表达式使用%
做string formatting:
("How many teeth are on ring #i ?") % (i + 1)
它告诉 Python 用 (i + 1)
代替地标(例如 %s
或 %d
)
在字符串 "How many teeth are on ring #i ?"
中。但是字符串中没有地标。
因此,Python抱怨,
TypeError: not all arguments converted during string formatting
要修复错误,您可能需要
("How many teeth are on ring %d ?") % (i + 1)
%s
当您想要对象的 str
表示时使用。 %d
被使用
当你想要求被格式化的对象是一个 int.
你会在这一行遇到同样的错误
print (("Ring #i has #i teeth") % (i + 1, Rings[i]))
你可以用类似的方法修复。
此外,
if Rings[1] >= Rings(i - 1):
会引发错误
TypeError: 'list' object is not callable
因为圆括号用于调用函数,而括号([
和]
)用于索引容器对象中的项。 Rings(i - 1)
因此应该是 Rings[i-1]
.
如果我正确理解代码的用途,使用
可能会更好
if Rings[i] >= Rings[i - 1]:
(注意 Rings[i]
而不是 Rings[1]
),因为如果 NumberofRings
大于 2,Rings[1]
会将代码陷入无限循环。
我有一个问题,我必须将伪代码转换为 Python,但出现错误:
Traceback (most recent call last):
File "C:/Users/Toshiba/Documents/Stevens stuff/Rings work.py", line 16, in <module>
Rings[i] = int(input(("How many teeth are on ring #i ?") % (i + 1)))
TypeError: not all arguments converted during string formatting
我的代码目前看起来像:
Rings = [0,0,0,0,0,0,0,0]
n = 0
while n == 0:
NumberofRings = int(input("How many rings are on your bike? "))
if NumberofRings <1 or NumberofRings >8:
print("Enter a number between 1 and 8")
else:
n = n + 1
Rings[0] = int(input("How many teeth are on ring 1? "))
for i in range (1, NumberofRings):
T = 0
while T == 0:
Rings[i] = int(input(("How many teeth are on ring #i ?") % (i + 1)))
if Rings[1] >= Rings(i - 1):
print("The number of teeth must be lower that the previious ring")
else:
T = 1
print ("=================")
for i in range(0, (len(Rings))):
print (("Ring #i has #i teeth") % (i + 1, Rings[i]))
这个表达式使用%
做string formatting:
("How many teeth are on ring #i ?") % (i + 1)
它告诉 Python 用 (i + 1)
代替地标(例如 %s
或 %d
)
在字符串 "How many teeth are on ring #i ?"
中。但是字符串中没有地标。
因此,Python抱怨,
TypeError: not all arguments converted during string formatting
要修复错误,您可能需要
("How many teeth are on ring %d ?") % (i + 1)
%s
当您想要对象的 str
表示时使用。 %d
被使用
当你想要求被格式化的对象是一个 int.
你会在这一行遇到同样的错误
print (("Ring #i has #i teeth") % (i + 1, Rings[i]))
你可以用类似的方法修复。
此外,
if Rings[1] >= Rings(i - 1):
会引发错误
TypeError: 'list' object is not callable
因为圆括号用于调用函数,而括号([
和]
)用于索引容器对象中的项。 Rings(i - 1)
因此应该是 Rings[i-1]
.
如果我正确理解代码的用途,使用
可能会更好if Rings[i] >= Rings[i - 1]:
(注意 Rings[i]
而不是 Rings[1]
),因为如果 NumberofRings
大于 2,Rings[1]
会将代码陷入无限循环。