如果字符串语句:我错过了啥? [复制]
Posted
技术标签:
【中文标题】如果字符串语句:我错过了啥? [复制]【英文标题】:If string statement: What am I missing? [duplicate]如果字符串语句:我错过了什么? [复制] 【发布时间】:2015-12-29 08:17:05 【问题描述】:我创建了一个如下所示的简单代码:
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 语句仍然会打印出来。我在这里错过了什么?
【问题讨论】:
name = str(input ("What is your gender?"))
你从不指定性别?
对不起!那是一个错字,我已经把它改成了性别!但仍然有同样的问题。
如果答案已经解决了您的问题,请点击复选标记考虑accepting it。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
【参考方案1】:
在步骤中
首先使用正确的变量名:
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.')
【讨论】:
@Lafexlos 谢谢。刚看到这个。添加到我的答案中。 天啊!解决了!谢谢!那么实际上该程序的主要问题是什么?是使用or吗? 另一个不错的选择(在这种情况下没用,但值得学习):if gender in ('male', 'Male'):
@AndreaCorbellini 实际上在这里很有用。请参阅我的较短版本。
@MikeMüller 只是要注意 - 那些在 input
周围的 str
调用是多余的 - input
已经返回一个字符串【参考方案2】:
当比较多个字符串时,你需要做不同的事情:
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
结尾。
【讨论】:
确实,集合允许平均 O(1) 查找,但您仍然必须在 O(n) 时间内构建 has 表。您将需要 很多 个项目才能看到差异,即使在这种情况下,您最好将集合存储为全局变量,这样函数就不需要每次都重新构建集合它被调用的时间 @AndreaCorbellini 我在考虑动态构建列表的用例,如我的回答here。以上是关于如果字符串语句:我错过了啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
在 Flexbox 中居中不起作用。啥是高度、宽度、显示和位置要求?我错过了啥? [复制]
如果您在 OnColliderEnter2D() 中播放声音是不是有任何限制,或者我错过了啥?
SwiftUI:如果 @ObservedObject 是 UIViewController 的子类,则不会重新加载视图内容。这是一个错误还是我错过了啥?