如果在python中使用elif else代码会出现什么问题?

时间:2016-02-02 01:40:46

标签: python if-statement

我正在制作简单的摇滚,纸张,剪刀游戏。正如您在代码片段中看到的那样,程序会询问用户是否希望在3或5中发挥最佳效果。

如果输入为'five', '5''cinco',则执行函数best_out_of_five()(现在将'5555555'打印到控制台)。 同样,输入'three', '3','tres'会打印'3333333'

我的问题是,无论读取什么输入,它都只执行best_out_of_five()功能(即使输入是'三')。我认为if,elif和其他将是我代码中最简单的部分,因为我之前做了很多次,但我必须遗漏一些我无法注意到的东西。

import time

    def best_out_of_three():
        print('333333333')

    def best_out_of_five():
        print('555555555')

    name = input("Hi, what's your name?\n")
    print('Alright %s, lets play a quick game of Rock, Paper,'
          'Scissors. Do you want to play best out of 3 or 5?' % name)
    game_type = input().lower()
    if game_type in ['five', '5', 'cinco']:
        best_out_of_five()
    elif game_type in ['three', '3', 'tres']:
        best_out_of_three()
    else:
        print("That is not a valid answer. Try again later.")
        time.sleep(5)
        exit()

3 个答案:

答案 0 :(得分:1)

在编辑中包含此内容,但您的if检查应检查所有选项。快速完成此操作的一种方法是使用列表:

if game_type in ['five', '5', 'cinco']:
        best_out_of_five()
    elif game_type in ['three', '3', 'tres']:
        best_out_of_three()

如果您的输入在列表中(对列表中的所有值进行线性检查),则它将返回true。

答案 1 :(得分:0)

条件不正确。 ' 5'只是一个字符串,当用作条件时,它将被评估为真,而字符串''将是假的。因此,你基本上拥有的是

game_type == "five" or true or true:

这将永远是真的。尝试

game_type == "five" or game_type == "5" or game_type == "cinco":

答案 2 :(得分:0)

这是一个常见的错误。你需要的是

if game_type == "five" or game_type == '5' or game_type == 'cinco':

对布尔表达式进行操作,不会在 == 之间分发。为了过度简化评估,我只想说大多数表达式都评估为 True ;有一些例外,例如 False,0,None

特别是'5'与 True 相遇。当你说

如果game_type ==“five”或“5”

必须 True