mthstr1 = "一月二月三月四月五月六月七月八月九月"
mthstr2 = "十月"
mthstr3 = "十一月十二月"
x = "123456789"
a = eval(input("请输入月份数字:"))
if a in x:
asd = (a - 1)*2
x1 = mthstr1[asd:asd+2]
print(x1)
elif a in ['11','12']:
qwe = (a - 11)*3
x2 = mthstr3[qwe:qwe+3]
print(x2)
elif a in ['10']:
print(mthstr2)
因为eval将月份转换成整数了,而你的x、['11','12']中的元素、['10']中的元素都是字符串。
改成这样:
mthstr1 = "一月二月三月四月五月六月七月八月九月"
mthstr2 = "十月"
mthstr3 = "十一月十二月"
x = "123456789"
m=input("请输入月份数字:")
a = eval(m)
if m in x and a < 10:
asd = (a - 1)*2
x1 = mthstr1[asd:asd+2]
print(x1)
elif m in ['11','12']:
qwe = (a - 11)*3
x2 = mthstr3[qwe:qwe+3]
print(x2)
elif m in ['10']:
print(mthstr2)
截图:
如果输入一个数字,比如'3';
它被eval处理后就是一个数值类型3【a=eval(...)】;
因此它不会满足a in x、a in ['11','12']、a in ['10']这三个条件中的任何的个,只会产生一个关于类型的错误。
第一种解决办法是在条件判断前不使用eval转换类型;
第二种办法是在条件判断里用int来比较:
0<a<10、a in [11,12]、a=10
第三种办法是避免这些判断:
mthstr1,mthstr2,mthstr3合并为mthstr,并且作用【,】来分隔每个月份;
a还是使用eval来处理为int类型;
只判断 a的值介于1和12之间:0>a>=len(mthstr.splti(','))
然后就可以从mthstr拆分出相应的月份来【mthstr.splti(',')[a-1]】
mthstr = "一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月"
month_names = mthstr.split(',')
a = eval(input("请输入月份数字:"))
if 0 > a >= len(month_names):
....print(month_names[a - 1])
else:
....print('The number of months is invalid')