【问题标题】:python----The name of the error is'TypeError: not all arguments converted during string formatting'(っ °Д °;)っpython----错误的名字是'TypeError: not all arguments conversion during string formatting'(っ°Д°;)っ
【发布时间】:2020-08-29 10:13:25
【问题描述】:

我正在编写一个程序,输入一个数字,区分该数字是否为素数,然后打印出来。

当我输入'o'时,我把函数再次运行程序。

下面是程序

print('Prime number distinction')
print('=' * 50)
again = 'o'
while again == 'o':
    s = 0
    a = 0
    i = 0
    pn = input('Please enter a number')
    pn = int(pn)
    if pn == 2 or pn == 3:
        print('%dis a prime number' %pn)
    else:
        for i in range(2, pn):
                if pn % i == 0:
                    print('%dis not a prime number.' %pn)
                    a = pn/i
                    i = str(i)
                    pn = str(pn)
                    a = int(a)
                    print(pn+'='+i+'x'+'%d' %a)
                    
                else:
                    s = s + 1
        if s == pn - 2:
            print('%dis a prime number.' %pn)
    
    again = input('Enter o to do it one more time.')

但是'TypeError:字符串格式化期间并非所有参数都转换' 发生错误。 奇怪的是,程序按预期运行后,出现了错误。


line 13, in <module>
    if pn % i == 0:

调用的部分有错误, 但是,它是程序操作的重要组成部分, 如果这里发生错误,整个程序将不得不中断。 我想知道为什么。

我会修改程序。 很多人告诉我添加一个'break'语句

print('Prime number distinction')
print('=' * 50)
again = 'o'
while again == 'o':
    s = 0
    a = 0
    i = 0
    pn = input('Please enter a number')
    pn = int(pn)
    if pn == 2 or pn == 3:
        print('%dis a prime number' %pn)
    else:
        for i in range(2, pn):
                if pn % i == 0:
                    print('%dis not a prime number.' %pn)
                    a = pn/i
                    i = str(i)
                    str_pn = str(pn)  # use a new variable str_pn
                    a = int(a)
                    print(str_pn+'='+i+'x'+'%d' %a) # use str_pn here
                    break
                else:
                    s = s + 1
        if s == pn - 2:
            print('%dis a prime number.' %pn)
    
    again = input('Enter o to do it one more time.')   

现在结果只打印一次。 感谢您的反馈。

【问题讨论】:

  • 1.什么输入值给你这个错误? 2. 请粘贴完整的错误信息,而不仅仅是开头。
  • 您需要为您的问题提供错误/回溯。另外,我建议使用 f 字符串代替插值。 f"{pn} is a prime number" 代替 "%d is a prime number" % pnf"{pn}={i}x{a}" 代替 str(pn)+'='+i+'x'+'%d' %a)
  • 您使用的是 IDE 吗?哟应该了解它的调试功能。如果不是 Python Debugger 模块值得学习。
  • 如果你使用字符串格式,你不需要make pn a str - stackoverflow.com/a/13945777/2823755, docs.python.org/3/library/string.html#formatstrings

标签: python


【解决方案1】:

问题是当您已经将pn 转换为string 时,它正在尝试计算pn % 2

解决方案(查看注释行)

print('Prime number distinction')
print('=' * 50)
again = 'o'
while again == 'o':
    s = 0
    a = 0
    i = 0
    pn = input('Please enter a number')
    pn = int(pn)
    if pn == 2 or pn == 3:
        print('%dis a prime number' %pn)
    else:
        for i in range(2, pn):
                if pn % i == 0:
                    print('%dis not a prime number.' %pn)
                    a = pn/i
                    i = str(i)
                    # pn = str(pn)  # remove this line
                    a = int(a)
                    print(str(pn)+'='+i+'x'+'%d' %a) # add str(pn) around pn
                    
                else:
                    s = s + 1
        if s == pn - 2:
            print('%dis a prime number.' %pn)
    
    again = input('Enter o to do it one more time.')

【讨论】:

  • 我想再补充一件事。在 if pn % i == o: 语句中,在末尾包含一个 break 语句,否则它将打印两次答案
  • 我不明白你的意思。当我执行它时只打印一次。
  • 尝试输入 10。当我这样做时它打印了两次
猜你喜欢
  • 2019-10-10
  • 2020-03-19
  • 1970-01-01
  • 2020-01-05
  • 2020-04-29
  • 1970-01-01
  • 2021-08-04
  • 2016-03-25
  • 1970-01-01
相关资源
最近更新 更多