直方图错误:'int'对象不可迭代

时间:2017-10-17 14:27:29

标签: python

我正在尝试创建一个直方图,其中两个骰子滚动了一百次,两个卷都添加在一起,然后添加到列表中,该列表进入直方图

def roll_hundred():
    b = []
    my_lover = range(101)
    my_lover1 = 1
    for my_lover1 in my_lover:
        if my_lover1 < 101:
            dice1 = random.randint(1,6)
            dice2 = random.randint(1,6)
            m = dice2 + dice1
            b += m
            my_lover1 += 1
    print (b) 
    plt.hist(b)
    plt.show()

2 个答案:

答案 0 :(得分:2)

出现错误的原因是您尝试将int m添加到列表b。要在列表中放置值,您需要使用b.append(m)附加此值。

此外,您在第一次迭代后调用plt.hist()。您需要在for循环之外移动此plt.show()

因此您的代码看起来像:

def roll_hundred():
    b = []
    my_lover = range(101)
    my_lover1 = 1
    for my_lover1 in my_lover:
        if my_lover1 < 101:
            dice1 = random.randint(1,6)
            dice2 = random.randint(1,6)
            m = dice2 + dice1
            b.append(m)
            my_lover1 += 1

    plt.hist(b)
    plt.show()

roll_hundred()

这给出了数字:

enter image description here

Python值可读性。您的代码越容易阅读,就越好(通常)。正如@roganjosh在评论中所说,你可以删除代码中的很多变量,使其更具可读性。您可以(如果您愿意)执行以下操作:

def roll_hundred():
    b = []

    for i in range(100):

        dice1 = random.randint(1,6)
        dice2 = random.randint(1,6)
        m = dice2 + dice1

        b.append(m)

    plt.hist(b)
    plt.show()

roll_hundred()

答案 1 :(得分:0)

我还无法添加评论,所以这是尝试回答/评论。

首先,我注意到你正在把b变成一个空列表。稍后在代码中,您尝试将int添加到列表中。这会导致确切的错误。要测试这个,只需打开python的解释器并尝试

b = []
b += 1

你会得到错误。

从我看到的,尝试拨打

b.append()

代替。

编辑:在我发布之前,似乎发布了类似的答案。