我是Python的新手,正在解决一个练习,但出现此错误: TypeError:在字符串格式化期间并非所有参数都已转换 我尝试阅读一些说明,但没有发现我的代码哪里错了
def reverse(num):
r=0
while(num!=0):
r=(r*10)+(num%10)
num //= 10
return r
num=input("Enter a number: ")
n=reverse(num)
numOdd=[]
numEven=[]
c=1
while(n!=0):
if (c%2==0):
numEven.append(n%10)
else:
numOdd.append(n%10)
n//= 10
c += 1
sortedEven=True
sortedOdd=True
for i in range(len(numOdd)-1):
if(numOdd[i]>numOdd[i+1]):
sortedOdd=False
for i in range(len(numEven)-1):
if(numEven[i]<numEven[i+1]):
sortedEven=False
if(sortedOdd==True and sortedEven==True):
print ("True")
else:
print ("False")
答案 0 :(得分:0)
TL; DR:
input
返回一个字符串,因此num
中的num=input("Enter a number: ")
是一个字符串,而不是数字。 reverse
期望它的参数是一个数字,但是得到一个字符串,因此这“使事情变得混乱”(实际原因在下面说明)。要解决此问题,请将num
转换为整数:
num=int(input("Enter a number: "))
实际上,这是一个棘手的问题。
num=input("Enter a number: ")
input
返回一个 string ,所以num
是一个字符串reverse
中,这里:r=(r*10)+(num%10)
num % 10
与"whatever string" % 10
基本上相同,其中%
将执行string formatting(!! ),不计算数字的模数。%
)的第一个参数,它必须至少有一个conversion specification-基本上,它必须包含一个百分号({{1 }}),像这样:%
"whatever %s"
的第二个参数的元素:如果字符串中有1个这样的说明符,则必须为%
提供一个参数,即不是一个空元组(%
),反之亦然()
得到了第二个参数%
。这样一来,正如错误消息所指出的那样,不能“ 10在字符串格式化期间进行转换”,因为没有格式说明符与之关联。好的,那是什么?!基本上,您的代码尝试对 string 进行数学运算,因此碰巧10
运算符对字符串和数字都有意义,但是在这些情况下它具有不同的含义。>