如果是字符串声明:我错过了什么?

时间:2015-12-29 08:17:06

标签: python python-3.x if-statement comparison

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

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语句仍会打印出来。我在这里缺少什么?

2 个答案:

答案 0 :(得分:4)

步骤

首先使用正确的变量名称:

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

其次,使用or是错误的:

>>> 'male' or 'Male'
'male'

使用:

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

或者使用:

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

整个计划

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.')

较短版本

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 :(得分:0)

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

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

或者更简单:

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

或者使用一套:

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

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

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

if gender == 'male' or 'Male':
你说的是:

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

所以,无论gender是什么,如果第一次比较是False,那么 将继续'Male'。这是一个非空字符串,所以它总是如此 True和条件总是最终True