Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 词典与elif_Python_Random_Dictionary - Fatal编程技术网

Python 词典与elif

Python 词典与elif,python,random,dictionary,Python,Random,Dictionary,在迈克尔·道森(Michael Dawson)的《Python for the absolute初学者》(Python for the absolute初学者)一书中,在关于列表和词典的章节中,我学到了很多东西,我正试图利用旧的魔法8球作为灵感,制作一个新的练习程序。下面是到目前为止我已经想到的代码 它在一定程度上起作用……随机生成的数字被生成,但elif似乎不起作用。我知道有更好的方法和更简单的方法,但我这样做是为了加强我对字典的理解 我把几个print语句放进去,看看我是否选择了一个数字,e

在迈克尔·道森(Michael Dawson)的《Python for the absolute初学者》(Python for the absolute初学者)一书中,在关于列表和词典的章节中,我学到了很多东西,我正试图利用旧的魔法8球作为灵感,制作一个新的练习程序。下面是到目前为止我已经想到的代码

它在一定程度上起作用……随机生成的数字被生成,但elif似乎不起作用。我知道有更好的方法和更简单的方法,但我这样做是为了加强我对字典的理解

我把几个print语句放进去,看看我是否选择了一个数字,else语句则是看是否一切都变糟了。现在代码显示,我得到的只是打印的数字,而else products“不计算。Exit工作正常。我还使用注释掉的outprint“ball”语句确认字典正常

所以我的问题是,为什么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")    
字符串
“1”
不是int
1
。因此
answer
实际上不在
ball
中。 试着将其转换为
answer=str(random.randint(1,8))
字符串
“1”
不是int
1
。因此
answer
实际上不在
球中。

尝试将其转换为
answer=str(random.randint(1,8))
您正在使用数字查找字典,而键是dict中的字符串。因此,您必须使用
str
将数字转换为字符串

改变

answer = random.randint(1,8)


您正在使用数字查找字典,而键是dict中的字符串。因此,您必须使用
str
将数字转换为字符串

改变

answer = random.randint(1,8)

random.randint()
返回一个整数。字典的键都是字符串。因此,当你在球中回答
时,它总是
,因为
“1”!=1

您可以通过执行以下操作使所有键成为整数(删除引号),或使
answer
成为字符串:

answer = str(random.randint(1,8))

请注意,您不应该在此处使用
elif
。如果您的输入为空,则
If
elif
都将为真,并且大多数情况下您不希望这样。相反,请将
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))
random.randint()
返回一个整数。字典的键都是字符串。因此,当你在球中回答
时,它总是
,因为
“1”!=1

您可以通过执行以下操作使所有键成为整数(删除引号),或使
answer
成为字符串:

answer = str(random.randint(1,8))

请注意,您不应该在此处使用
elif
。如果您的输入为空,则
If
elif
都将为真,并且大多数情况下您不希望这样。相反,请将
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))

就是这样。非常感谢。我现在知道我出了什么问题:混合STR和INT.EriBaltuSU你是受欢迎的:请考虑赞成和接受这个答案,如果它有助于几个伟大的答案,你的第一个,正是我所需要的。我真的很感激所有的答案,尽管所有这些贡献。多么伟大的合作。MyPythyPython就是。非常感谢。现在我知道我出了什么问题:混合STR和INT.EriBaltuSU你是受欢迎的:请考虑一下投票并接受它作为答案,如果它有助于几个伟大的答案,你的是第一个,正是我所需要的。。Python是一个多么伟大的社区。非常感谢。根据评论,我尝试并成功使用first str,然后将dict改为number,效果非常好,现在我完全理解我的错误和修复方法。感谢大家!@Eric Baltrsh非常欢迎您!别忘了!非常感谢。根据评论,我已经尝试并成功了首先使用str,然后将dict改为number,效果很好,现在我完全理解我的错误和修复方法。谢谢大家!@EricBaltrush,非常欢迎!别忘了!