我一直在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]
我该怎么做才能解决问题?
答案 0 :(得分:3)
现在,你正在画三次不同的类别。第一次将它与'animals'
进行比较;第二个'colors'
;第三个是'adjectives'
。
但是,如果您再次提取'colors'
然后'animals'
然后又'colors'
呢?你的三个“if”分支都不会触发。由于没有执行return
,因此最后会有效return 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'