获取TypeError:在字符串格式化期间并非所有参数都已转换

时间:2019-11-30 15:30:26

标签: python-3.x

我是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")

1 个答案:

答案 0 :(得分:0)

TL; DR: input返回一个字符串,因此num中的num=input("Enter a number: ")是一个字符串,而不是数字。 reverse期望它的参数是一个数字,但是得到一个字符串,因此这“使事情变得混乱”(实际原因在下面说明)。要解决此问题,请将num转换为整数:

num=int(input("Enter a number: "))

实际上,这是一个棘手的问题。

  1. 在这里:num=input("Enter a number: ") input返回一个 string ,所以num是一个字符串
  2. reverse中,这里:r=(r*10)+(num%10) num % 10"whatever string" % 10基本上相同,其中%将执行string formatting(!! ),计算数字的模数。
  3. 要使一个字符串适合作为字符串格式运算符(%)的第一个参数,它必须至少有一个conversion specification-基本上,它必须包含一个百分号({{1 }}),像这样:%
  4. 这些转换说明符一对一映射到"whatever %s"的第二个参数的元素:如果字符串中有1个这样的说明符,则必须为%提供一个参数,即不是一个空元组(%),反之亦然
  5. 您的电话号码肯定不包含转换说明符,但是()得到了第二个参数%。这样一来,正如错误消息所指出的那样,不能“ 10在字符串格式化期间进行转换”,因为没有格式说明符与之关联。

好的,那是什么?!基本上,您的代码尝试对 string 进行数学运算,因此碰巧10运算符对字符串和数字都有意义,但是在这些情况下它具有不同的含义。