Python If和elif语句的作用类似于“如果”;如果;及;以英语发言;不是吗

Python If和elif语句的作用类似于“如果”;如果;及;以英语发言;不是吗,python,python-3.x,Python,Python 3.x,在写一个有趣的项目时,我遇到了一个关于If和Elif语句的不熟悉的问题。出于某种原因,当用户输入dog“type”时,python会忽略if语句并继续使用语句的其余部分。该程序是用Python 3.6编写的。我不知道为什么if和elif语句不能正常工作。是否存在我不知道的格式/语法问题?提前谢谢 def small(): small_list = [0, 15, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80]

在写一个有趣的项目时,我遇到了一个关于If和Elif语句的不熟悉的问题。出于某种原因,当用户输入dog“type”时,python会忽略if语句并继续使用语句的其余部分。该程序是用Python 3.6编写的。我不知道为什么if和elif语句不能正常工作。是否存在我不知道的格式/语法问题?提前谢谢

def small():
    small_list = [0, 15, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80]
    small_input = input("How old is your dog?")
    print(small_input)
    small_age = int(small_input)
    small_set2 = small_list[small_age]
    print("Your dog's age is: " + str(small_set2))


def medium():
    medium_list = [0, 15, 24, 28, 32, 36, 42, 47, 51, 56, 60, 65, 69, 74, 78, 83, 87]
    medium_input = input("How old is your dog?")
    print(medium_input)
    medium_age = int(medium_input)
    medium_set2 = medium_list[medium_age]
    medium_set2 = str(medium_set2)
    print("Your dog's age is: " + str(medium_set2))


def large():
    large_input = input("How old is your dog?")
    print(large_input)
    large_set = [0, 15, 24, 28, 32, 36, 45, 50, 55, 61, 66, 72, 77, 82, 88, 93, 120]
    large_age = int(large_input)
    large_set2 = large_set[large_age]
    large_set2 = str(large_set2)
    print("Your dog's age is: " + str(large_set2))


def dog():
    dog1 = input('What size dog do you have?')
    print(dog1)
    if dog1 == 'Small' or 'small':
        print("Okay, you have a small dog.")
        small()
    elif dog1 == 'Medium' or 'medium':
        print("Okay, you have a medium dog.")
        medium()
    elif dog1 == 'Large' or 'large':
        print("Okay, you have a large dog.")
        large()
    else:
        print("Sorry, I did not understand that.")
        dog()


dog()
此语句解析为:

if (dog1 == 'Small') or ('small'):
因为非空字符串总是真实的,这相当于:

if (dog1 == 'Small') or True:
因此,条件总是满足的

您可能希望这样:

if dog1 in ('Small', 'small'):
或者更好(忽略所有资本化问题):


如果dog1=='Small'或'Small':
如果(dog1=='Small')或('Small'):
相同。因为
'small'
是“真实的”,所以这永远是真实的。正确的方法是
if dog1 in('Small','Small')
if dog1.lower()=='Small'
请格式化您的代码。Python对空格非常敏感,当以POST方式运行时,您的代码会立即引发语法错误。@patrick。或者至少
如果dog=='small'或dog=='small'
。另外,
casefold
lower
的一个很好的替代品。您好@tyranoushail03,欢迎来到StackOverflow:)您的问题可以用一个更好的例子变得更短更清楚。您可以单独将问题分解为一个特定的不匹配值和
if
语句,这就是您需要显示的全部内容。请阅读,以便将来的问题更好。您可能不想使用递归来处理无效输入。这是在
else
子句中调用
dog()
时发生的情况。改为使用循环,并在完成时中断循环。非空字符串总是真实的<代码>'当然不是。这很有魅力,谢谢!
if dog1 in ('Small', 'small'):
if dog1.lower() == 'small':