修复try和except中的无效语法错误

时间:2018-08-04 07:16:33

标签: python

当我使用此代码时,我的目的是尝试确保任何输入都不会破坏该代码,例如介于0到3之间的字母或数字。但是,当我使用此代码时,整个列表不会出现。我该如何解决?

输出应如下所示

Hello Megan the four games avaliable are:
0   Mario Cart
1   Minecraft
2   Angry Birds
3   Grabd Theft Auto
What number game do you want? h 
Please choose a valid number 

What number game do you want? 23
Please choose a number between 0 and 3

What number game do you want? 1
You have chosen Minecraft

相反,输出是

Hello the four games avaliable are:
0   Mario Cart
What number game do you want? 2
1   Minecraft
What number game do you want? h
Please enter a valid value

我使用的代码是:

#Ask user what game they would like to play
def game () :
    global gametype,gamelist
    gamelist = ["Mario Cart","Minecraft","Angry Birds","Grabd Theft Auto"]
    gamecount = 0
    print ("Hello the four games avaliable are:")
    while gamecount < 4:
        print (gamecount," ",gamelist[gamecount])
        gamecount = gamecount + 1


        try:
            gametype = int(input("What number game do you want? "))

            while gametype <0 or gametype >3:
                print (" Please enter a value between 0 and 3")

        except ValueError:
                print ("Please enter a valid value " )

                return gametype

game ()

我也尝试了另一种方法,在“ try”之前使用“ while True”,但是程序说这是无效的语法。

第二次尝试

我已经使用了这段新代码,但是同样也不允许我运行该代码,因为当我输入While True并用红色突出显示True时,它说语法无效。

#Ask user what game they would like to play
def game () :
    global gametype,gamelist
    gamelist = ["Mario Cart","Minecraft","Angry Birds","Grabd Theft Auto"]
    gamecount = 0
    print ("Hello the four games avaliable are:")

    while gamecount < 4:
        print (gamecount," ",gamelist[gamecount])
        gamecount = gamecount + 1

    while True:
        try:
            gametype = int(input("What number game do you want? "))

            if 0 <= gametype <= 3 :
                return game
            print ("Please enter a value between 0 and 3 ")

        except ValueError:
                print ("Please enter whole number from 0 to 3 " )
                return game

game ()

1 个答案:

答案 0 :(得分:1)

我认为您想要这样的东西:

gamelist = ["Mario Cart", "Minecraft", "Angry Birds", "Grand Theft Auto"]

def game(name):
    """ Ask user what game they would like to play """
    print ("Hello, {}, the four available games are:".format(name))
    for gamenum, gamename in enumerate(gamelist):
        print(gamenum, ":", gamename)

    while True:
        try:
            gamenum = int(input("What number game do you want? "))
            if 0 <= gamenum <= 3:
                return gamenum

            print("Please enter a value between 0 and 3")
        except ValueError:
            print ("Please enter a whole number from 0 to 3")

name = input("What's your name? ")
gamenum = game(name)
print("You chose", gamelist[gamenum])    

演示输出

What's your name? Megan
Hello, Megan, the four available games are:
0 : Mario Cart
1 : Minecraft
2 : Angry Birds
3 : Grand Theft Auto
What number game do you want? 4
Please enter a value between 0 and 3
What number game do you want? Minecraft
Please enter a whole number from 0 to 3
What number game do you want? 2
You chose Angry Birds

我对您的代码进行的主要更改是将try.. except放在while True块中,因此我们一直要求输入,直到得到有效的东西为止。我还使用enumerate打印每个游戏及其编号。这比您的while gamecount < 4:循环更整洁。


如果您拥有可以使用while循环打印游戏列表,则可以这样操作:

gamelist = ["Mario Cart", "Minecraft", "Angry Birds", "Grand Theft Auto"]

def game(name):
    """ Ask user what game they would like to play """
    print ("Hello, {}, the four available games are:".format(name))
    gamenum = 0
    while gamenum < len(gamelist):
        print(gamenum, ":", gamelist[gamenum])
        gamenum += 1

    while True:
        try:
            gamenum = int(input("What number game do you want? "))
            if 0 <= gamenum <= 3:
                return gamenum

            print("Please enter a value between 0 and 3")
        except ValueError:
            print ("Please enter a whole number from 0 to 3")

name = input("What's your name? ")
gamenum = game(name)
print("You chose", gamelist[gamenum])    

我使gamelist成为全局列表,因此我们可以在game函数之外访问它。我们不需要在函数中使用global语句,因为我们没有更改gamelist。通常,应避免使用global语句。