找不到列表的总和

时间:2019-11-19 04:39:15

标签: python python-3.x list

对于这个问题,我有:

  1. 一个字符串,我将其转换为列表
  2. 我在列表中找到了奇数和偶数,并将它们保存到奇数列表和偶数列表中
  3. 我想计算每个列表的总和,这应该是一个简单的sum(list),但是它一直说“ int对象不可调用”-但我不确定如何取消列表的整数。 / li>
  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!') 

8 个答案:

答案 0 :(得分:3)

使用.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!') 

答案 1 :(得分:1)

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

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]))

答案 2 :(得分:1)

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

使用

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

代替

user_list = list(user_input.split())

更改后,您的代码即可正常工作。

答案 3 :(得分:0)

更改为

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

答案 4 :(得分:0)

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

更改

user_list = list(user_input.split())

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

其余代码都可以正常工作

答案 5 :(得分:0)

总体而言,您的代码确实非常接近。您可以通过强制转换为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)

答案 6 :(得分:0)

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!') 

这将按预期工作!

答案 7 :(得分:0)

这是将字符串转换为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!')