if条件中的s​​tr.isdigit()问题

时间:2018-12-14 00:47:55

标签: python

仅当某些特殊输入为大于1且小于5的整数时,我才需要进行计算。如果数字不满足此条件,则会显示一条消息。有用。 我希望当输入不是整数但它不起作用时也要打印消息。当我输入例如“ a”时,我得到信息“ ValueError:int()的无效文字,基数为10:'ds'”

w = input("write a number")
if (int(w)<1 or int(w)>5) or w.isdigit()==False:
    print("input must be between 1 and 5 and not to be a letter")
else:
    print(w)

2 个答案:

答案 0 :(得分:6)

如果w确实不是数字,那么int(w)将不起作用,并且您会得到所描述的错误。但是,您已经在检查w是否为数字,只需要反过来对条件进行排序:

w = input("write a number")
if w.isdigit() == False or int(w) < 1 or int(w) > 5:
    print("input must be between 1 and 5 and not to be a letter")
else:
    print(w)

条件是从左到右评估的,因此,如果是w.isdigit() == False,则int(w) < 1int(w) > 5甚至都不会被评估,并且您不会看到错误。 / p>

答案 1 :(得分:1)

由于or运算符的工作方式而引起问题。实际上,当您有两个或多个or时,编译器会继续检查条件,直到获得第一个False

在您的情况下,当您输入字母(例如'a')时,最后检查条件w.isdigit(),因此int()给出错误invalid literal for int() with base 10: 'a'。因此,为避免错误,只需更改条件的顺序即可。首先检查输入是否为数字,然后检查范围如下:

w = input("write a number")
if  w.isdigit()==False or (int(w)<1 or int(w)>5) :
    print("input must be between 1 and 5 and not to be a letter")
else:
    print(w)