一个关于python字符串的str类的问题,为什么这个运行了没有结果?

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)

截图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-10-15

如果输入一个数字,比如'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')

相似回答