from random import randint
from time import sleep
fight = False
def start_up():
print("Fight Simulator - Test Stages.")
userInput = str(input("Enter your name "))
user_name = userInput
return user_name
def intro():
userName = start_up()
while True:
userInput = str(input("Welcome to the dojo, {}. To commence the first battle, type 'Start', or 'Begin'".format(userName)))
if userInput == "Start" or "start" or "Begin" or "begin":
return userInput
else:
print("Enter a valid response")
break
def fight_commence():
userInput = intro()
if userInput == "Start" or "start" or "Begin" or "begin":
fight = True
userHp = 100
opponentHp = 100
while fight == True:
userDmg = randint(0,100)
opponentDmg = randint(0,100)
opponentHp -= userDmg
if opponentHp <= 0:
opponentHp == 0
print("You did {} damage".format(userDmg))
sleep(1)
print("Opponent has {} hp remaining".format(opponentHp))
sleep(1)
if opponentHp <= 0:
print("You killed him!")
fight = False
else:
print("Enter a valid action")
fight_commence()
因此,出于某种原因,当给出“开始”或“开始”或“开始”或“开始”以外的响应时,代码不会打印(“输入有效的响应”)。我希望它循环回用户输入阶段,但它只是继续使用程序,好像一切都好。我无法弄清楚我搞砸了哪里。
其次,当健康状况低于0时,我希望opponentHp自动等于0.例如,当opponentHp = -45时,opponentHp应该等于0.
感谢任何帮助。
答案 0 :(得分:1)
测试“有效输入”的一个大问题是你的测试方式。
if userInput == "Start" or "start" or "Begin" or "begin"
这不是一个有效的python条件。而是做这样的事情:
if userInput in ["Start", "start", "Begin", "begin"]
这种比较发生两次并且不好。对于opponenthp
0
,您目前将此作为您的陈述和结果:
if opponentHp <= 0:
opponentHp == 0
条件非常好,但操作中的==
是另一个条件运算符,您需要将其更改为:
if opponentHp <= 0:
opponentHp = 0
<强> ADDITION 强>
此外,除了上述项目之外,当您使用break
语句时,您将结束已设置的无限循环并结束函数而不返回值,您可能需要考虑将其更改为{{1 }或continue
语句,或者只是删除它。
答案 1 :(得分:-1)
条件(if子句)是错误的。您应该为每个or
重复'userInput =='。
或者,更简洁地说:
userInput.lower() in ["start", "begin"]