Python if条件下str.isdigit()存在问题

Python if条件下str.isdigit()存在问题,python,Python,只有当某些特定的输入是大于1小于5的整数时,我才需要进行计算。如果数字不符合此条件,则打印消息。它起作用了。 我希望在输入不是整数但不起作用时也打印消息。当我键入例如“a”I Get info“ValueError:以10为基数的int()的文本无效:“ds” w=输入(“写一个数字”) 如果(int(w)5)或w.isdigit()==False: 打印(“输入必须介于1和5之间,而不是字母”) 其他: 打印(w) 如果w确实不是一个数字,那么int(w)将不起作用,您将得到所描述的错误。但是

只有当某些特定的输入是大于1小于5的整数时,我才需要进行计算。如果数字不符合此条件,则打印消息。它起作用了。 我希望在输入不是整数但不起作用时也打印消息。当我键入例如“a”I Get info“ValueError:以10为基数的int()的文本无效:“ds”

w=输入(“写一个数字”)
如果(int(w)5)或w.isdigit()==False:
打印(“输入必须介于1和5之间,而不是字母”)
其他:
打印(w)

如果
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=输入(“写一个数字”)
如果w.isdigit()==False或int(w)<1或int(w)>5:
打印(“输入必须介于1和5之间,而不是字母”)
其他:
打印(w)

这些条件是从左到右求值的,因此如果
w.isdigit()==False
是这种情况,
int(w)<1
int(w)>5
甚至不会求值,您也不会看到错误。

如果
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=输入(“写一个数字”)
如果w.isdigit()==False或int(w)<1或int(w)>5:
打印(“输入必须介于1和5之间,而不是字母”)
其他:
打印(w)

这些条件是从左到右求值的,因此如果
w.isdigit()==False
是这种情况,
int(w)<1
int(w)>5
甚至不会求值,您也不会看到错误。

问题的产生是因为
操作符的工作方式。实际上,当您有两个或更多的
时,编译器会继续检查条件,直到得到第一个
False

在您的情况下,当您输入一个字母(比如“a”)时,最后会检查条件
w.isdigit()
,因此
int()
会给出以10为基数的int()的错误
无效文本:'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)
w=输入(“写一个数字”)
如果w.isdigit()==False或(int(w)5):
打印(“输入必须介于1和5之间,而不是字母”)
其他:
打印(w)

出现问题的原因是
操作员的工作方式。实际上,当您有两个或更多的
时,编译器会继续检查条件,直到得到第一个
False

在您的情况下,当您输入一个字母(比如“a”)时,最后会检查条件
w.isdigit()
,因此
int()
会给出以10为基数的int()的错误
无效文本:'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)
w=输入(“写一个数字”)
如果w.isdigit()==False或(int(w)5):
打印(“输入必须介于1和5之间,而不是字母”)
其他:
打印(w)

这可能是因为无法将非数值表达式转换为整数。请注意,如果“w”不是一个数字,“int(w)”将抛出一个错误。顺便说一句,您可以更自然地将其表示为
如果不是w.isdigit()或不是1,这可能是因为您无法将非数值表达式转换为整数。请注意,如果“w”不是一个数字,“int(w)”将抛出一个错误。顺便说一句,您可以更自然地将其表示为
如果不是w.isdigit(),或者不是1注意:按照习惯用法,
w.isdigit()==False
是坏代码;基本上,任何与
True
False
的比较都是错误的。将其替换为
而不是w.isdigit()
。您还可以重新组织转换和范围检查以避免双重转换,使测试
如果不是w.isdigit()或不是w.isdigit()(1当然,更惯用的方法是使用EAFP而不是
。isdigit()
测试(它拒绝
int
可以接受的某些东西,例如带前导/尾随空格的字符串)
。您还可以重新组织转换和范围检查,以避免双重转换,使测试
如果不是w.isdigit()或不是w.isdigit()(1当然,更惯用的方法是使用EAFP而不是
。isdigit()
测试(拒绝
int
可以接受的某些东西,例如带前导/尾随空格的字符串).
尝试:
w=int(w)
除了值错误:
打印(“输入不是整数”)
,如果不是1,则测试