我正在学习python并练习我的技能,我制作一个简单的基于文本的冒险游戏。
在游戏中,我想问玩家他们是否准备好开始了。我通过创建一个 begin(( 函数来做到这一点:
def begin():
print(raw_input("Are you ready to begin? > "))
while raw_input() != "yes":
if raw_input() == "yes":
break
print(start_adventure())
else:
print("Are you ready to begin? > ")
print(begin())
在我的代码中下面是函数 start_adventure((
def start_adventure():
print("Test, Test, Test")
当我运行程序时,它会启动,我会询问我是否准备好开始。然后它只是无限循环,如果我完全关闭Powershell并重新启动Powershell,我只能退出程序。我做错了什么?如何在玩家输入"是"后让循环停止?
你期望这样做做什么?解决问题的方法是尝试理解代码的作用,而不是简单地将东西放在一起。(别担心;至少有80%的人曾经处于那个阶段!
顺便说一句,我强烈建议使用Python 3而不是Python 2;他们制作了新版本的Python,因为Python 2充满了非常奇怪,令人困惑的东西,例如input
导致安全漏洞和10 / 4
等同于2
。
你想让它做什么?
- 反复询问用户是否准备好开始,直到他们回答
"yes"
。 - 呼叫
start_adventure()
.
还行。让我们把到目前为止所拥有的东西放到一个函数中:
def begin():
while something:
raw_input("Are you ready to begin? > ")
start_adventure()
这里有很多差距,但这是一个开始。目前,我们正在获取用户的输入并将其丢弃,因为我们没有将其存储在任何地方。让我们解决这个问题。
def begin():
while something:
answer = raw_input("Are you ready to begin? > ")
start_adventure()
这已初具规模。我们只想继续循环while answer != "yes"
...
def begin():
while answer != "yes":
answer = raw_input("Are you ready to begin? > ")
start_adventure()
万岁!让我们看看这是否有效!
Traceback (most recent call last):
File "example", line 2, in <module>
while answer != "yes":
NameError: name 'answer' is not defined
嗯。。。我们尚未为answer
设置值。为了使循环运行,它必须是不等于"yes"
的东西。让我们一起去"no"
:
def begin():
answer = "no"
while answer != "yes":
answer = raw_input("Are you ready to begin? > ")
start_adventure()
这将起作用!
Python 3 解决方案
您不应该多次调用raw_input()
。只需实例化x
然后等待用户输入Y
即可调用start_adventure
函数。这应该可以帮助您入门:
def start_adventure():
print('We have started!')
#do something here
def begin():
x = None
while x!='Y':
x = input('Are you ready to begin (Y/N)?')
if x=='Y':
start_adventure()
begin()
-
您的原始输入函数(我假设它工作正常(永远不会分配给变量。相反,您可以在 print 语句中调用它,打印它的结果,然后在 while 循环条件中再次调用它。
-
您实际上永远不会满足 while 循环条件,因为您的输入未分配给变量。分配Raw_input("你准备好开始了吗?>"( 到变量以存储输入。然后 while 循环使用变量。确保在 while 循环中,当满足条件时,您将变量重置为其他变量。
-
你的程序流也是错误的,你需要在while循环中调用你的原始输入函数。这将更改 while 循环条件,以便在满足条件(用户键入"yes"(时,它不会无限循环。希望这有帮助!
您需要的代码形式示例:
//initialize the condition to no value
condition = None;
#check the condition
while condition != "yes"
#change the condition here based on user input **inside the loop**
condition = raw_input("are you ready to begin? >")
if condition == "yes":
#condition is met do what you need
else:
#condition not met loop again
#nothing needs to go here to print the message again