如何在程序执行期间让用户随时输入内容? (python 2.7)

时间:2016-07-10 23:02:57

标签: python-2.7

import math
import random
import time
import sys

Start = False
Quit = False

while True:
    print ("Welcome to my first ever RPG! created 10/07/2016")
    time.sleep(2)
    begin = raw_input("Would you like to start the game?")

    if begin.strip() in ("yes" , "y" , "Yes" , "Y" ):
        Start = True
    break





while Start == True:   
    player_name = raw_input("What would you like to name your character?")
    print ("Welcome " + player_name.capitalize())
    Quit_command = raw_input()
    if Quit_command.strip() in ("q" , "Q"):
        print("Game closing....")
        time.sleep(1)
        Quit = True

    break



while Quit == True:
    sys.exit()

正如你所看到的,我可能编码这个令人震惊的哈哈但基本上,我想要的是能够允许用户在执行程序期间按下'Q'按钮时退出程序ANYTIME

P.S我是python的新手,所以最简单的解决方案将非常感谢,谢谢!

2 个答案:

答案 0 :(得分:1)

如果是一个简单的游戏,你可以依靠提示用户,并检查他是否用Q或其他东西回复。 (因此,输入与程序同步。) 在这种情况下,您可以使用Dan Coates的回答。虽然,我会扩展他的preprocess_user_input函数来处理整个提示序列:

import sys

def user_input(prompt):
    """user_input(prompt)

    prompt -- string to prompt the user with

    returns the user's answer to the prompt
    or handles it in special cases
    """

    inp = raw_input(prompt)
    if inp.strip().upper() == "Q":
        print("Bye, gamer!")
        sys.exit()

    return inp

# and use this function everywhere now

begin = user_input("Would you like to start the game?")

if begin.strip() not in ("yes" , "y" , "Yes" , "Y" ):
    print("Ok, maybe next time...")
    sys.exit()

player_name = user_input("What would you like to name your character?")

print("Welcome " + player_name.capitalize())

while True:
    # now we are in the game
    act = user_input("People are celebrating on the north, yelling 'Selecao! Parabens!'\nWould you like to go north?")
    ...process the act...

- 等等。

您可能希望为特殊情况添加更多选项。然后你需要更多if个分支。您可能想知道“如何在Python中case?”。答案是:"do it with dictionaries"。这是一个很好的方法。 (事实上​​,人们可以根据用户所处的每种情况在选项词典上构建整个游戏。)

但是在异步输入的情况下(因此,当用户自己按下键时,没有程序提示他并期望输入)这并不简单。退出正在运行的Python程序的最简单方法是按 Ctrl + C 。它会向程序发送SIGINT信号。哪个Python转换为异常,称为KeyboardInterrupt。 (不确定Windows中的信号,但对于Python,它应该在任何操作系统上都相同。)如果try..except没有捕获到异常,它会在异常提示下退出程序。如果你需要 - 你可以捕获它并做你想做的事。 (打印消息“再见,游戏玩家!”并退出程序。This quiestion是另一个例子。)

但是为了捕获任何按下的自定义组合键,可能需要更多参与方法。

答案 1 :(得分:0)

在架构上,我认为你想要一些帮助函数来处理任何用户输入并检查" global"在检查特定于您提醒用户的任何特定问题的选项之前,退出Q等选项。

例如,它看起来像这样:

begin = raw_input("Would you like to start the game?")
preprocess_user_input(begin)

...

player_name = raw_input("What would you like to name your character?")
preprocess_user_input(player_name)
print ("Welcome " + player_name.capitalize())

...

def preprocess_user_input(user_input):
    if user_input.strip().upper() == 'Q':
        sys.exit()