Python新手:为什么这个简单的if-elif(C case块的复制)总是产生相同的结果?
我是初学者。每当我输入指定的字符串时,是否有人能解释和/或帮助我修改此Python代码以生成正确的输出?例如,如果输入三月,则输出“02”。目前,无论输入如何,程序始终输出1月份的00。代码如下:Python新手:为什么这个简单的if-elif(C case块的复制)总是产生相同的结果?,python,if-statement,Python,If Statement,我是初学者。每当我输入指定的字符串时,是否有人能解释和/或帮助我修改此Python代码以生成正确的输出?例如,如果输入三月,则输出“02”。目前,无论输入如何,程序始终输出1月份的00。代码如下: x = raw_input("Starting Month: ") if x == "January" or "january": stMonth = '00' elif x == "February" or "february": stMonth = '01' elif x == "
x = raw_input("Starting Month: ")
if x == "January" or "january":
stMonth = '00'
elif x == "February" or "february":
stMonth = '01'
elif x == "March" or "march":
stMonth = '02'
elif x == "April" or "april":
stMonth = '03'
elif x == "May" or "may":
stMonth = '04'
elif x == "June" or "june":
stMonth = '05'
elif x == "July" or "june":
stMonth = '06'
elif x == "August" or "august":
stMonth = '07'
elif x == "September" or "september":
stMonth = '08'
elif x == "October" or "october":
stMonth = '09'
elif x == "November" or "november":
stMonth = '10'
elif x == "December" or "december":
stMonth = '11'
else:
print "error"
print stMonth
输出:
$ python month.py
Starting Month: march
00
提前感谢-任何和所有的帮助是非常非常感谢 这是因为“一月”
的计算结果为True
,请查看以下内容:
In [1]: x = 'march'
In [2]: if x == "January" or "january":
...: stMonth = '00'
...:
In [3]: stMonth
Out[3]: '00'
In [4]: bool("january")
Out[4]: True
您可能想要:
x == "January" or x == "january":
stMonth = '00'
或者更好:
x.lower() == "january":
stMonth = '00'
这是因为“一月”
的计算结果为True
,请查看以下内容:
In [1]: x = 'march'
In [2]: if x == "January" or "january":
...: stMonth = '00'
...:
In [3]: stMonth
Out[3]: '00'
In [4]: bool("january")
Out[4]: True
您可能想要:
x == "January" or x == "january":
stMonth = '00'
或者更好:
x.lower() == "january":
stMonth = '00'
它不能按预期工作的原因是
if x == "January" or "january":
相当于:
if x == "January" or True:
第一个if
语句将始终是True
>>> x = 'january'
>>> if x:
... print x
...
january
>>>
使用
.lower()
函数将输入字符串转换为小写,这样会更容易
x = raw_input("Starting Month: ").lower()
if x == "january":
stMonth = '00'
elif x == "february":
stMonth = '01'
elif x == "march":
stMonth = '02'
elif x == "april":
stMonth = '03'
elif x == "may":
stMonth = '04'
elif x == "june":
stMonth = '05'
elif x == "june":
stMonth = '06'
elif x == "august":
stMonth = '07'
elif x == "september":
stMonth = '08'
elif x == "october":
stMonth = '09'
elif x == "november":
stMonth = '10'
elif x == "december":
stMonth = '11'
else:
print "error"
print stMonth
它不能按预期工作的原因是
if x == "January" or "january":
相当于:
if x == "January" or True:
第一个if
语句将始终是True
>>> x = 'january'
>>> if x:
... print x
...
january
>>>
使用
.lower()
函数将输入字符串转换为小写,这样会更容易
x = raw_input("Starting Month: ").lower()
if x == "january":
stMonth = '00'
elif x == "february":
stMonth = '01'
elif x == "march":
stMonth = '02'
elif x == "april":
stMonth = '03'
elif x == "may":
stMonth = '04'
elif x == "june":
stMonth = '05'
elif x == "june":
stMonth = '06'
elif x == "august":
stMonth = '07'
elif x == "september":
stMonth = '08'
elif x == "october":
stMonth = '09'
elif x == "november":
stMonth = '10'
elif x == "december":
stMonth = '11'
else:
print "error"
print stMonth
由于
或的优先级高于==
:x=='janur'或'janur'
实际上与(x='janur')或'janur'
相同,并且当'janur'
的计算结果为true时,组合语句始终为true
您应该将每个语句更改为x=='january'或x=='january'
因为或的优先级高于=
:x=='january'或'january'
实际上与(x='january')或'january'
相同,并且当'january'
的计算结果为true时,组合语句始终为true
您应该将每个语句更改为x=='january'或x=='january'
为了澄清您的疑问,请按如下方式修复代码:
if x == "January" or x == "january":
stMonth = '00'
elif x == "February" or x == "february":
stMonth = '01'
为了澄清您的疑问,请按如下方式修复代码:
if x == "January" or x == "january":
stMonth = '00'
elif x == "February" or x == "february":
stMonth = '01'
你的声明:
if x == "January" or "january":
始终返回true,因为其计算结果为:
是x==“一月”否
然后计算or,并检查一月,返回true。因此,如果您尝试:
如果“一月”:
它总是返回您的true,因此您得到00作为输出
您可以在以下子句中使用or或:
if x == "January" or x == "january":
或
你的声明:
if x == "January" or "january":
始终返回true,因为其计算结果为:
是x==“一月”否
然后计算or,并检查一月,返回true。因此,如果您尝试:
如果“一月”:
它总是返回您的true,因此您得到00作为输出
您可以在以下子句中使用or或:
if x == "January" or x == "january":
或
顺便说一句,这不是一个很好的查找方法,您需要一个月名到月号的映射,例如month\u map={'january'=>01',…}
然后您可以print month\u map[x.lower()]
,另一种方法是创建所有名称的列表并返回index+1
顺便说一句,这不是一个很好的查找方法,您需要月名到月号的映射,例如,month\u map={'january'=>'01',…}
然后您可以执行print month\u map[x.lower()]
,另一种方法是创建所有名称的列表并返回index+1
@TheNOvice,“一月”
是非emtpy字符串,任何非空字符串的计算结果都是True
。在if语句的第二部分中,您不是在测试x==“Janur”
,而是在测试非emtpy字符串中的“Janur”是否为非emtpy字符串。@TheNOvice,“Janur”
是非emtpy字符串,任何非空字符串的计算结果均为True
。在if语句的第二部分中,您不是在测试x==“一月”
,而是在测试非emtpy字符串中的“一月”。