关于python:如果是string语句:我错过了什么?

If string statement: What am I missing?

本问题已经有最佳答案,请猛点这里访问。

我创建了一个简单的代码,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
name = str(input ("What is your name?"))

gender = str(input ("What is your gender?"))

if gender == 'male' or 'Male':

    print ("Hello Mr %s" % (name))

elif gender == 'female' or 'Female':

    print ("Hello Mrs %s" % (name))

else:

    print ('Invalid gender. Please try again.')

然而,无论我输入什么性别(甚至是像test这样的随机词),它总是打印出if语句,这意味着它满足gender == male部分。就像我输入female一样,if语句仍然打印出来。我这里缺什么?


在步骤中

首先使用正确的变量名:

1
gender = input("What is your gender?")

其次,使用or是错误的:

1
2
>>> 'male' or 'Male'
'male'

用途:

1
if gender == 'male' or gender == 'Male':

或者使用:

1
if gender.lower() == 'male':

整个程序

1
2
3
4
5
6
7
8
9
name = input("What is your name?")
gender = input("What is your gender?")

if gender.lower() == 'male':
    print("Your are %s" % (gender))
elif gender.lower() == 'female':
    print("Your are %s" % (gender))
else:
    print('Invalid gender. Please try again.')

较短版本

1
2
3
4
5
6
7
name = input("What is your name?")
gender = input("What is your gender?")

if gender.lower() in ('male', 'female'):
    print("Your are %s" % (gender.lower()))
else:
    print('Invalid gender. Please try again.')


当与多个字符串进行比较时,需要以不同的方式进行比较:

1
if gender == 'male' or gender == 'Male':

或者更简单地说:

1
if gender in ['male', 'Male']:

或用一套:

1
if gender in {'male', 'Male'}:

速度差别不大,只有两件,但有很多项集合将更快,因为它使用哈希表,而列表使用线性搜索。

现在,关于您的代码发生了什么。如果你这样做:

1
if gender == 'male' or 'Male':

你是说:

1
if (gender == 'male') or ('Male'):

所以,不管gender是什么,如果第一个比较是False的话,它只会去'Male'。这是一个非空字符串,所以它总是True和条件总是以True结尾。