为什么我的Python列表不会将值加在一起?

时间:2016-04-02 11:20:49

标签: python arrays sum

frames = []
frame_total = []
total = 0

while len(frames) < 2:
    ball_one = int(raw_input('Enter the score of ball one: '))
    ball_two = int(raw_input('Enter the score of ball two: '))


    frame_total.append([ball_one, ball_two])
    for frame in frame_total:
        frames.append(frame_total)
        b = sum(frames)
print(frame_total)
print(b)

这是我的代码。当我尝试打印出主数组中每个数组的总和时,我无法解决为什么我得到错误TypeError: unsupported operand type(s) for +: 'int' and 'list'。任何想法?

这个想法是创造一个保龄球游戏。你在每一帧都有2个球,ball_one和ball_two。在每帧之后,我将这两个数字附加到一个数组。所以如果ball_one是8并且ball_two是1.那么它会添加[[8,2]]然后下一个如果b_1是4而b_2是4则会看起来像[[8,2],[4,4] ]。然后我想添加8和2以及4和4来制作。 [[10,8]]。然后最后总共这两个,所以18。

5 个答案:

答案 0 :(得分:1)

  • 您在b循环的每次迭代中继续定义for。你应该等到你确实需要它来定义它。

  • 您继续将frame_total追加到frames而不是frame

  • 您尝试查找列表列表的总和,而不是每个列表中的所有数字。

您更新的计划:

frame_total = []

while len(frames) < 2:
    ball_one = int(raw_input('Enter the score of ball one: '))
    ball_two = int(raw_input('Enter the score of ball two: '))

    frame_total.append([ball_one, ball_two])

print(frame_total)
print(sum(sum(sub) for sub in frame_total))

如果您不喜欢生成器表达式:

frame_total = []
total = 0

while len(frames) < 2:
    ball_one = int(raw_input('Enter the score of ball one: '))
    ball_two = int(raw_input('Enter the score of ball two: '))

    frame_total.append([ball_one, ball_two])
    total += ball_one + ball_two

print(frame_total)
print(total)

答案 1 :(得分:0)

按如下方式更改:

frames = []
frame_total = []
total = 0

while len(frames) < 2:
    ball_one = int(input('Enter the score of ball one: '))
    ball_two = int(input('Enter the score of ball two: '))


    frame_total.append(ball_one)
    frame_total.append(ball_two)
    b = 0
    for frame in frame_total:
        frames.append(frame_total)
        b = b + frame
print(frame_total)
print(b)

答案 2 :(得分:0)

From the documentation

  

sum(iterable [,start])

     

总结开始和可迭代的项目   从左到右并返回总数。开始默认为0   iterable的项目通常是数字,而起始值则不是   允许是一个字符串。

您正在使用列表列表调用sum。由于您尚未提供start,因此默认情况下为零。所以它基本上尝试添加一个int和一个列表。

尝试运行0 + [1,2,3],您就会明白错误是什么。

答案 3 :(得分:0)

您的frame_total有一个元素,它是[ball_one, ball_two]。当您将frame_total追加到frames时,frames现在有一个元素,它仍然是[ball_one, ball_two]。求和(帧)时,它会引发TypeError,因为frames元素是list而不是int

答案 4 :(得分:0)

让我试试。您想要将每对[ball_one,ball_two]附加到帧中。之后,获取每对的总和并将其存储在另一个列表中,比如frames_total,最后显示所有内容的总和。这是代码:

frames = [] # will contain raw results in each frame. (ex. [[8, 2], [4, 4]])
frames_total = [] # will contain total values in each frame (ex. [10, 8])
total = 0 # sum of everything

while len(frames) < 2:
    ball_one = int(raw_input('Enter the score of ball one: '))
    ball_two = int(raw_input('Enter the score of ball two: '))

    frames.append([ball_one, ball_two])

frames_total = [sum(frame) for frame in frames]
total = sum(frames_total)

print frames_total
print total

如果您想在每个回合后打印信息,这里的代码略有不同:

frames = [] # will contain raw results in each frame. (ex. [[8, 2], [4, 4]])
frames_total = [] # will contain total values in each frame (ex. [10, 8])
total = 0 # sum of everything

while len(frames) < 2:
    ball_one = int(raw_input('Enter the score of ball one: '))
    ball_two = int(raw_input('Enter the score of ball two: '))

    frames.append([ball_one, ball_two])
    frames_total.append(ball_one + ball_two)
    total = sum(frames_total)

    print frames
    print frames_total
    print total