【问题标题】:Having trouble finding the sum of a list无法找到列表的总和
【发布时间】:2019-11-19 04:39:15
【问题描述】:

所以对于这个问题,我有:

  1. 一个字符串,我把它转换成一个列表
  2. 我在该列表中找到了奇数和偶数并将它们保存到odd_list 和 even_list 中
  3. 我想计算每个列表的总和,这应该是一个简单的 sum(list),但它一直说“int object is not callable” - 但我不确定如何对列表进行反整数。
  4. 如果你们中的一些人可能会问,我这样做的唯一原因 int(user_list[i]) % 2 是因为这是我发现通过我的列表来确定哪个元素是偶数或奇数的唯一方法 - 否则系统弹出另一个错误“在字符串格式化期间并非所有参数都转换了
  5. 代码如下:
user_input = '5 1 7 8 2 1 3'
user_list = list(user_input.split())

even_nums = []
odd_nums = []

for i in range(len(user_list)):
  if int(user_list[i]) % 2 == 0:
    even_nums.append(user_list[i])
  else: 
    odd_nums.append(user_list[i])

print(even_nums)
print(odd_nums)

even_sum = sum(even_nums)
odd_sum = sum(odd_nums)

if even_sum > odd_sum:
  print('Even Wins!')
else:
  print('Odd Wins!') 

【问题讨论】:

    标签: python python-3.x list


    【解决方案1】:

    当您使用.split()时,您正在创建一个字符串列表

    改为这样做:

    user_list = [int(number) for number in user_input.split(' ')]
    

    所以完整的代码是:

    user_input = '5 1 7 8 2 1 3'
    user_list = [int(number) for number in user_input.split(' ')]
    
    even_nums = []
    odd_nums = []
    
    for i in range(len(user_list)):
      if int(user_list[i]) % 2 == 0:
        even_nums.append(user_list[i])
      else: 
        odd_nums.append(user_list[i])
    
    print(even_nums)
    print(odd_nums)
    
    even_sum = sum(even_nums)
    odd_sum = sum(odd_nums)
    
    if even_sum > odd_sum:
      print('Even Wins!')
    else:
      print('Odd Wins!') 
    

    【讨论】:

    • 现在的问题是,当我调用“even_sum = sum(even_nums)”时出现的错误是“TypeError: 'int' object is not callable”......不太清楚是什么去做
    • 嗯,等一下更新完整代码,检查它是否工作。
    • @agnosticstarfish 更新了完整的代码,让我知道这是可行的
    • 有效!!!出于某种原因,在 Google Collab 上,每当我调用“even_sum = sum(even_nums)”部分时,IDE 都会不断给我一个奇怪的错误“'int' object is not callable”。但是在 PyCharm 上它运行良好,谢谢你一百万! :D
    【解决方案2】:

    您的问题是您正在创建一个字符串列表,而不是数字。更改这些行

    even_nums.append(user_list[i])
    odd_nums.append(user_list[i])
    

    even_nums.append(int(user_list[i]))
    odd_nums.append(int(user_list[i]))
    

    【讨论】:

    • 与上述人建议的解决方案相同的问题......当我调用“even_sum = sum(even_nums)”时出现的错误是“ TypeError: 'int' object is not callable
    • @agnosticstarfish 复制并粘贴您在问题中发布的代码时,我没有收到该错误。
    • 是的,出于某种原因,在 Google Collab 上,每当我调用“even_sum = sum(even_nums)”部分时,IDE 总是给我一个奇怪的错误“'int' object is not callable”。但是在 PyCharm 上它工作得很好,谢谢!!
    • @agnosticstarfish 我确定您在 Google IDE 上测试的代码中有一个名为 sum 的变量。你不应该在内置函数之后命名你的变量。
    【解决方案3】:

    您可以在这里使用地图功能。

    使用

    user_list = list(map(int, user_input.split()))
    

    代替

    user_list = list(user_input.split())
    

    修改后,你的代码就可以正常工作了。

    【讨论】:

      【解决方案4】:

      改成

      even_nums.append(int(user_list[i]))
      else:
          odd_nums.append(int(user_list[i]))
      

      【讨论】:

        【解决方案5】:

        您可以只使用list comprehensions 将user_input 中的str 转换为int

        改变

        user_list = list(user_input.split())
        

        user_list = [int(i) for i in user_input.split()]
        

        您的其余代码应该可以正常工作

        【讨论】:

          【解决方案6】:

          这是我将字符串转换为 int 列表的解决方案

          user_list = [int(number) for number in user_input.split(' ')]

          完整源代码

          # string input
          user_input = '5 1 7 8 2 1 3'
          
          # convert string to int list
          user_list = [int(number) for number in user_input.split(' ')]
          
          even_nums = []
          odd_nums = []
          
          # assign values to even  and odd list
          for i in range(len(user_list)):
            if int(user_list[i]) % 2 == 0:
              even_nums.append(user_list[i])
            else: 
              odd_nums.append(user_list[i])
          
          print(even_nums)
          print(odd_nums)
          
          # calculate sum of even list
          even_sum = sum(even_nums)
          
          # calculate sum of odd list
          odd_sum = sum(odd_nums)
          
          # who win?
          if even_sum > odd_sum:
            print('Even Wins!')
          else:
            print('Odd Wins!')
          

          【讨论】:

            【解决方案7】:

            总体而言,您的代码非常非常接近。您可以通过转换为 int 来检查偶数/奇数,这很好。但是您不会将 int 存储在新列表中。您存储原始字符串。如果您添加一个提取数字并将其转换为 int 的额外步骤,您的代码将更具可读性,并且它将执行您想要的操作。例如:

            user_input = '5 1 7 8 2 1 3'
            user_list = list(user_input.split())
            #           ^^^^ don't need this. it's already a list
            
            even_nums = []
            odd_nums = []
            
            for i in range(len(user_list)):
              num = int(user_list[i])  # adding this one extra line makes the code easier to understand
              if num % 2 == 0:
                even_nums.append(num)
              else: 
                odd_nums.append(num)
            
            print(even_nums)
            print(odd_nums)
            
            even_sum = sum(even_nums)
            odd_sum = sum(odd_nums)
            
            if even_sum > odd_sum:
              print('Even Wins!')
            else:
              print('Odd Wins!') 
            
            input() # waits for newline before letting the program close. :)
            

            通常有很多方法可以做某事。对于什么是最好的方法,不同的人有不同的想法。但是,只要您选择一种行之有效的方式,这就是您开始时最重要的事情。

            如果您有兴趣查看更紧凑的代码,也可以将for 循环的前两行替换为:

            for n in user_list:
              num = int(n)
            

            【讨论】:

            • 非常感谢!!一个问题,“User_list = list(user_input.split())”和“User_list = user_input.split()”有什么区别??
            • @agnosticstarfish - user_input.split() 已经返回了一个列表,所以你不需要强制它进入一个列表。这是多余的。这就像说 int(5)。
            【解决方案8】:
            user_input = '5 1 7 8 2 1 3'
            user_list = list(map(int,user_input.split()))
            
            even_nums = []
            odd_nums = []
            
            for i in range(len(user_list)):
              if int(user_list[i]) % 2 == 0:
                even_nums.append(user_list[i])
              else: 
                odd_nums.append(user_list[i])
            
            print(even_nums)
            print(odd_nums)
            
            even_sum = sum(even_nums)
            odd_sum = sum(odd_nums)
            
            if even_sum > odd_sum:
              print('Even Wins!')
            else:
              print('Odd Wins!') 
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-02-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-11-26
              • 1970-01-01
              相关资源
              最近更新 更多