在迈克尔·道森的“绝对初学者的Python”一书中,在“列表与词典”一章中,我学到了很多东西,并尝试使用旧的Magic 8-Ball作为我的灵感来制作一个新程序。 。下面是我到目前为止提出的代码。
它起作用了......随机生成的数字会生成但是elif似乎不起作用。我知道有更好的方法和更简单的方法,但我这样做是为了加强我对字典的理解。
我已经输入了几个打印语句,看看我是否选中了一个数字,而else语句是否会变坏。由于代码现在所有我得到的是打印的数字,而其他产生“不计算。退出工作正常。我也确认字典很好用使用注释掉的打印”球“声明。
所以我的问题是为什么elif语句似乎不处理生成的随机数。谁回答了我的衷心感谢和赞赏。
# Import the modules
import sys
import random
# define magic 8-ball dictionary
ball = {"1" : "It is certain.",
"2" : "Outlook is good.",
"3" : "You may rely on it.",
"4" : "Ask again later.",
"5" : "Concentrate and ask again.",
"6" : "Reply is hazy, try again later.",
"7" : "My reply is no.",
"8" : "My sources say no"}
# for items in ball.items():
# print(items)
ans = True
while ans:
question = input("Ask the Magic 8 Ball a question: (press enter to quit) ")
answer = random.randint(1,8)
print(answer)
if question == "":
sys.exit()
elif answer in ball:
response = ball[answer]
print(answer, response)
else:
print("\nSorry", answer, "does not compute.\n")
答案 0 :(得分:3)
random.randint()
返回一个整数。你的字典键都是字符串。因此,当您执行answer in ball
时,始终为False
,因为"1" != 1
您可以做的是使所有键整数(删除引号),或通过执行以下操作使answer
成为字符串:
answer = str(random.randint(1,8))
请注意,您不应在此使用elif
。如果您的输入无效,则if
和elif
都将为True,并且大部分时间您都不想要此输入。相反,请将elif/else
更改为if/else
:
if question == "":
sys.exit()
if answer in ball:
response = ball[answer]
print(answer, response)
else:
print("\nSorry", answer, "does not compute.\n")
最后一件事。 answer
始终位于ball
,因为您动态创建了字典。在这里,您可以使用dict.get()
。例如:
if not question: # You can do this instead
sys.exit()
print(ball.get(answer))
答案 1 :(得分:1)
字符串"1"
不是int 1
。因此answer
实际上不在ball
中。
尝试将其转换为answer = str(random.randint(1,8))
答案 2 :(得分:1)
您正在使用数字查找字典,而键是字典中的字符串。因此,您必须使用str
将数字转换为字符串。
更改
answer = random.randint(1,8)
到
answer = str(random.randint(1,8))