【问题标题】:Error: not all arguments converted during string formatting错误:字符串格式化期间并非所有参数都转换了
【发布时间】:2020-04-05 11:11:42
【问题描述】:

我开始学习 Python 我编写了一个代码来从用户那里获取数字列表并显示偶数:

numbers=list(input("Please enter numbers:"))

def is_even_num():
    enum = []
    for n in numbers:
        if n % 2 == 0:
            enum.append(n)
    return enum

print(is_even_num())

但不幸的是它显示以下错误 你能告诉我这个错误是什么意思吗?我该如何解决这个错误?

【问题讨论】:

    标签: python string for-loop types converters


    【解决方案1】:

    numbers=list(input("Please enter numbers:")) 会将每个字符转换为列表中的一个元素,即如果您输入1 2 3 4,每个空格也将是一个元素。试试

    numbers=input("Please enter numbers:").split()
    

    这将省略空格。

    此外,您正在尝试将字符串文字与整数进行比较。在您的循环中,将 n 解析为整数,即

    if int(n) % 2 == 0:
    

    【讨论】:

      【解决方案2】:
      numbers=[int(i) for i in input().split()]
      def is_even_num():
      
          enum = []
          for n in numbers:
              if n % 2 == 0:
                  enum.append(n)
          return enum
      print(is_even_num())
      

      输入存储为字符串,我们需要在对其执行任何类型的算术运算之前将其类型转换为整数

      【讨论】:

        【解决方案3】:

        但不幸的是它显示以下错误你能告诉我这个错误是什么意思吗?我该如何解决这个错误?

        您在if n % 2 == 0: 处收到TypeError 异常,因为解释器正在尝试应用formatting using %input() 返回一个 str 对象,如果你将它传递给 list 构造函数,它将在你的字符串中形成一个字符列表。

        因此,numbers=list(input("Please enter numbers:")) 将形成一个str 对象列表(例如,如果您将1 2 3 传递给您的程序,它会将其转换为str 对象列表:['1', ' ', '2', ' ', '3'])。

        您需要使用int 构造函数将它们转换为int。如果您可以将程序中的第一行更改为numbers=list(map(int, input("Please enter numbers: ").split(" "))),它将开始工作

        试试这个:

        numbers=list(map(int, input("Please enter numbers: ").split(" ")))
        def is_even_num():
        
            enum = []
            for n in numbers:
                if n % 2 == 0:
                    enum.append(n)
            return enum
        print(is_even_num())
        

        使用list comprehension 做同样事情的 Pythonic 方式:

        print([i for i in map(int, input("Please enter the number: ").split(" ")) if not i % 2])
        

        【讨论】:

          【解决方案4】:

          numbers 是一个字符串列表,包括只有空格的字符串

          ['3', ' ', '5', ' ', '8']
          

          在使用模 % 之前,您必须删除这些空格,然后将剩余的数字字符串转换为整数

          numbers = list(input("Please enter numbers:"))
          
          print(numbers)
          
          def is_even_num():
              enum = []
              for n in numbers:
                  if n.strip(' '):
                      if int(n) % 2 == 0:
                          enum.append(int(n))
              return enum
          
          print(is_even_num())
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-01-21
            • 1970-01-01
            • 2014-10-05
            • 2021-08-19
            • 2015-03-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多