到目前为止我的代码有两个问题。

时间:2015-12-08 06:16:01

标签: python loops while-loop

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.

感谢任何帮助。

2 个答案:

答案 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"]