1

我一直在尝试在 python 中使用 dicts,所以我可以删除我认为它们被引用的“幻数”,但我不断收到错误:“NoneType”类型的对象没有 len()。它只在我的刽子手程序中的某些时候发生,我不确定为什么。这是我认为它崩溃的一般区域:

animals = 'ape bear beaver cat donkey fox goat llama monkey python bunny tiger wolf'.split()
colors = 'yellow red blue green orange purple pink brown black white gold'.split()
adjectives = 'happy sad lonely cold hot ugly pretty thin fat big small tall short'.split()
names = {'animals': animals, 'colors': colors, 'adjectives': adjectives}
categories = [names['animals'],names['colors'],names['adjectives']]

def getRandomWord(wordList):
    wordList = random.choice(list(names.keys())) 
    wordIndex = random.randint(0,len(wordList))
    print(animals[wordIndex])

    if(random.choice(list(names.keys())) == 'animals'):
        print("The category is animals!")
        return animals[wordIndex]
    if(random.choice(list(names.keys())) == 'colors'):
        print("The category is colors!")
        return colors[wordIndex]    
    if(random.choice(list(names.keys())) == 'adjectives'):
        print("The category is adjectives!")
        return adjectives[wordIndex]

我应该怎么做才能解决我的问题?

4

1 回答 1

3

现在,您正在绘制 3 次不同的类别。第一次将其与'animals'; 第二个到'colors';第三个到'adjectives'.

但是,如果你画一次'colors'又一次呢?你的三个“if”分支都不会触发。由于没有执行,所以最后有一个有效的。'animals''colors'returnreturn None

或者,如果你names不是你认为的那样,你可能正在绘制一个None值,我猜:你没有显示整个堆栈跟踪,所以我猜测错误出现在哪里。

(此外,您wordIndex可能会设置为len(wordList),这将导致 IndexError 因为最后一个索引是len(wordList)-1。此外,由于wordIndex不一定来自与类别关联的列表,因此您也可能在此处出现索引错误。)

我认为您可以将代码简化为:

import random
animals = 'ape bear beaver cat donkey fox goat llama monkey python bunny tiger wolf'.split()
colors = 'yellow red blue green orange purple pink brown black white gold'.split()
adjectives = 'happy sad lonely cold hot ugly pretty thin fat big small tall short'.split()
names = {'animals': animals, 'colors': colors, 'adjectives': adjectives}

def getRandomWord(words_by_category):
    category = random.choice(list(words_by_category.keys()))
    print("the category is", category)
    wordlist = words_by_category[category]
    chosen_word = random.choice(wordlist)
    return chosen_word

之后我们有:

>>> getRandomWord(names)
the category is colors
'blue'
>>> getRandomWord(names)
the category is adjectives
'happy'
>>> getRandomWord(names)
the category is colors
'green'
>>> getRandomWord(names)
the category is animals
'donkey'
于 2013-07-21T05:23:01.743 回答