【问题标题】:Python Type error: int object not iterablePython 类型错误:int 对象不可迭代
【发布时间】:2014-12-02 21:51:14
【问题描述】:

我不确定我在哪里得到这个错误:

Traceback (most recent call last):
  File "C:/Users/Coscio/PycharmProjects/unigram/letterHist.py", line 78, in <module>
    main()
  File "C:/Users/Coscio/PycharmProjects/unigram/letterHist.py", line 74, in main
    bars(words)
  File "C:/Users/Coscio/PycharmProjects/unigram/letterHist.py", line 62, in bars
    init(words, lst)
  File "C:/Users/Coscio/PycharmProjects/unigram/letterHist.py", line 38, in init
    freqLegend(words,val, lst)
  File "C:/Users/Coscio/PycharmProjects/unigram/letterHist.py", line 54, in freqLegend
    freqLegend(words, val/1.5,  counter-1)
  File "C:/Users/Coscio/PycharmProjects/unigram/letterHist.py", line 53, in freqLegend
    back((max(lst)*1000)/10)
TypeError: 'int' object is not iterable

我认为它发生在我的 freqLegend 函数中,我将 lst 的最大值除以 10,但此时我没有迭代任何内容,我找不到为什么会出现此错误。

from letterFreq import *
from turtle import *


    def init(words, lst):

        val = max(lst)
        print(val)
        speed(0)
        setup (width=600, height=600, startx=0, starty=0)
        up()
        lt(180)
        forward(200)
        lt(90)
        forward(100)
        lt(90)
        down()
        forward(400)
        up()
        forward(-400)
        lt(90)
        down()
        forward(val*1000)
        up()
        back(val*1000+20)
        rt(90)
        forward(200)
        write("A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   "
              "R   S   T   U   V   W   X   Y   Z", True, align="center")
        goto(-200,-100)
        lt(90)
        forward((val*1000)/2)
        lt(90)
        forward(60)
        write("Frequency", True, align="center")
        rt(90)
        goto(-200,153)
        freqLegend(words,val, lst)

    def freqLegend(words, val, lst, counter = 10):

        if counter == 0:
            goto(-200,-100)
            return
        elif counter > 0:
            up()
            lt(90)
            down()
            forward(30)
            write(round(val, 3 ))
            back(30)
            rt(90)
            back((max(lst)*1000)/10)
            freqLegend(words, val/1.5,  counter-1)

    def bars(words):
        lstFreq = []
        for letters in letterFreq(words):
            lstFreq.append(letterFreq(words)[letters])

        lst = lstFreq
        init(words, lst)
        for i in lst:
            down()
            forward(i*1000)
            rt(90)
            forward(14)
            left(90)
            back(i*1000)

    def main():
        filename = "data/very_short.csv"
        words = readWordFile(filename)
        bars(words)
        input("enter to close")

    if __name__ == '__main__':
        main()

【问题讨论】:

    标签: python python-2.7 python-3.x


    【解决方案1】:

    您缺少freqLegend 的参数,因此您得到了意想不到的行为。你只有三个参数:

    freqLegend(words, val/1.5,  counter-1)
    

    我认为你的意思是

    freqLegend(words, val/1.5, lst,  counter-1)
    

    您收到不可迭代错误的原因是max() 实际上是遍历列表。由于参数counter-1 被作为参数lst 传递给函数,所以在第二次调用时lst 是一个int,它无法遍历它来找到最大值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-02
      • 2022-12-06
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 2017-02-23
      • 2015-04-14
      • 2022-07-01
      相关资源
      最近更新 更多