当前位置: 首页 > 知识库问答 >
问题:

当要求输入时,我的布尔值要求在更改值之前重复输入

董凡
2023-03-14

我正在通过一个教程视频制作一个程序,代码是启动、停止或退出汽车。程序的一部分是这样做,如果汽车已经启动或停止,你在程序中告诉他们。我的程序会告诉用户汽车已经启动或停止,但在我告诉它停止两次之后,而不是一次。希望有人能描述一下while循环和if语句中的布尔值之间的关系?

action = ""
started = False
while action != 'exit':
    action = input("Type either start, stop, exit to work this car: ").lower()
    if action == "start":
        if started:
            print("The car is already started")
        else:
            started = True
            print("Congrats you started the car! You can now either stop the car or exit the car!")
            action == input("Type either stop or exit to work this car: ")  
    elif action == "stop":
        if not started:
            print("You already stopped the car")
        else:
            started = False
            print("Congrats you stopped the car! You can now exit the car!")
            action = input("Either start the car again or exit the car: ")
    elif action == "exit":
        print("Congrats you exited the car!")
        break
    else: 
        action = input("You typed an invalid response, type either start, stop or exit:")
pprint("The end")

共有2个答案

鲜于致远
2023-03-14

让我更正你的密码

action = ""
started = 0 
while action != 'exit':
    action = input("Type either start, stop, exit to work this car: ").lower()
    if action == "start":
        if started:
            print("The car is already started")
        else:
            started = 2
            print("Congrats you started the car! You can now either stop the car or exit the car!")
            action = input("Type either stop or exit to work this car: ").lower()  
    elif action == "stop":
        if started == 2:
            started = 1
        elif started == 0:
            print("You already stopped the car")
        else:
            started = 0
            print("Congrats you stopped the car! You can now exit the car!")
            action = input("Either start the car again or exit the car: ").lower()
    elif action == "exit":
        print("Congrats you exited the car!")
        break
    else: 
        action = input("You typed an invalid response, type either start, stop or exit:").lower()
print("The end")

您需要更改action==input(…) 操作=输入(…)

段干安和
2023-03-14

考虑汽车已经启动的情况,用户现在已经进入“停止”。这将我们置于else块中:

elif action == "stop":
    if not started:
        print("You already stopped the car")
    else:  # <-- here
        started = False
        print("Congrats you stopped the car! You can now exit the car!")
        action = input("Either start the car again or exit the car: ")

最后一行提示用户输入一个新命令,该命令将重置操作,并将您带回循环的顶部,您将立即提示用户输入一个新命令:

action = input("Type either start, stop, exit to work this car: ").lower()

换句话说,您的代码“忘记”用户在“stop”块中键入的内容,提示他们输入新命令,而不处理原始条目。

通过将第一个输入行移动到一个条件块(即else)中,可以很容易地解决这个问题。这样做的另一个好处是,您可以保持向用户提示适用于其情况的消息的准确性(例如,当用户刚刚输入“停止”时,“再次启动汽车或退出汽车”)。应该是这样的:

action = ""
started = False
while True:
    if action == "start":
        if started:
            print("The car is already started")
        else:
            started = True
            print("Congrats you started the car! You can now either stop the car or exit the car!")
        action = input("Type either stop or exit to work this car: ")  
    elif action == "stop":
        if not started:
            print("You already stopped the car")
        else:
            started = False
            print("Congrats you stopped the car! You can now exit the car!")
        action = input("Either start the car again or exit the car: ")
    elif action == "exit":
        print("Congrats you exited the car!")
        break
    else:
        if action:
            print("You typed an invalid response.")
        action = input("Type either start, stop, exit to work this car: ").lower()
print("The end")

注意,这在第一次通过时可以很好地工作,因为action=”“会直接将您带到新的else块。

 类似资料:
  • 当元素的值通过JavaScript代码更改时,会发生什么事件?例如: 事件在这里没有帮助,因为更改值的不是用户。 在Chrome上测试时,事件不会被激发。也许是因为元素没有失去焦点(它没有获得焦点,所以不能失去焦点)?

  • 问题内容: 在laravel中,我们可以通过获得输入值。我尝试通过这样做来更改值。但是然后,我得到了错误消息“” 。 我们是否可以更改输入值,以便在以后调用时获得新的修改后的值? 谢谢。 问题答案: 您可以用来替换单个项目。 或用于替换整个输入数组。 这是文档的链接

  • 问题内容: 每当我尝试将其插入仓库时,git都要求两者。 每次重新输入密码都没有问题,但是问题在于输入用户名。我用来克隆我的仓库。 因此,我该如何配置git,这样就不会在每一个上都要求它了。 我是Linux的新手,但Windows中的IIRC 仅要求输入密码。 问题答案: 编辑(由主持人和评论建议使用@ dk14) 警告:如果您从答案中使用密码,您的密码将完全未加密(“原样”)存储在。请查阅下面的

  • 我想在我的代码中手动读取一些值。除了最后一个(lambda2)之外,它对所有值都有效。我可以无限地继续键入值,即使它们不是双精度的,也不会发生任何事情。如果我用任何其他值键入其他值,我会收到一条错误消息,以及第一次输入lambda2时的错误消息。我在另一个代码中以类似的方式(最终只创建了一个不同的对象)进行了操作,并且效果很好。

  • 我有一个示例程序,用于为航空公司注册人员。 在Registration类的selectSeats方法中,我有一个try-catch块,其中catch语句应该捕获InputMissMatchException,以防用户输入非数值。 但是,重新输入操作没有发生,因此,当发生异常时,程序只是抛出错误消息并继续到末尾(这会导致意外结果) 这就是有问题的方法 编辑:我通过使方法在catch块中递归来解决这个

  • 我创建了以下类,用于输入用户的年龄,然后在控制台中显示适当的信息。 运行此程序时,控制台会询问“请输入您的年龄:”