How do you check to see if an input is equal to a certain integer or integers?
我知道如何检查输入是否是整数但不是特定的整数。 例如,对于我的代码,我想检查输入是否等于1,2或3,然后如果输入不等于1,2或3则要求用户再次输入。
非常感谢帮助:)
那将是:
或者对于任何整数:
1
| if isinstance(var, int): |
-
这是if var not in (1, 2, 3):的补充
-
我已经完成了这个但它不起作用,它直接进入else行并打印('不等于1,2或3)var = input()如果var in(1,2,3): print('等于1,2或3')否则:print('不等于1,2或3')
-
@ Alvl86Lemon的输入是一个字符串...
-
@jonrsharpe可能会添加一行,其中var被强制转换为int,以使条件按预期执行。或者"if isinstance(var,int)和var in(1,2,3):"
-
好的,我现在愚蠢了。谢谢!我只是把,如果var in(str(1),str(2)和str(3)):相反
-
那么,if var in ('1', '2', '3'):就更好了。但请注意,这不是整数,而是字符串,所以这不是你要求的。 ;-)
1 2 3 4 5 6 7 8 9
| def restricted_input(prompt, values):
assert values
while True:
typed = input(prompt)
for acceptable in values:
if typed == str(acceptable):
return acceptable
else:
print("Acceptable values are from", values) |
然后在你的程序中......
1
| choice = restricted_input("Enter a number:", {1, 2, 3}) |
-
你为什么assert values?
-
因为当值为空时,该函数没有意义。
-
如果使用断言来执行此操作,则在没有值的情况下,程序将崩溃。此外,可以关闭断言,完全取消检查。请改用if not values: return。
-
想象一下,有人想要一个功能来划分两个数字。你编码def divide(a, b): if not b: return吗?当然不是。 None并不总是可接受的返回值[用户可能依赖于后置条件restricted_input(whatever, values) in values]。有时,当您需要做一些没有意义的事情时,您需要提出异常。这并不意味着程序会崩溃 - 可以处理异常,即使不是,"崩溃"对于获得精确的追溯也是一个奇怪的词。
-
如果您确实想要引发异常,请使用raise。不要将assert用作算法的一部分。
-
我必须说我不懂你。如果我在开始时发表评论# This function assumes nonempty values会不会好的?因为在我的脑海中,这正是assert所做的(只有Python可以理解)。你为什么这么反对呢?
-
让我们在聊天中继续讨论。
-
有关assert的更多信息,请参见此处和此处。
-
迷人。你可以看到wiki.python.org/moin/UsingAssertionsEffectively。 :-)"它们有助于捕获在编写代码时所做的错误假设,或者被其他程序员滥用接口。此外,它们可以在某种程度上充当内联文档,使程序员的假设变得明显"。听起来与此完全一致。另外:"考虑放置断言的地方:检查参数类型,类或值"。顺便说一下,如果这是用灵活类型的静态类型语言编码的话,values:NonEmptyList对你来说完全没问题吗?
-
是的,它们会在测试期间捕获错误的假设等等等,而不是算法的一部分。正如我之前所说,当你完成测试时,断言也可以被关闭 - 如果你的算法依赖于断言,这显然是有问题的。
-
看来你有一个固定的想法,没有人可以说服你。当然,你不认为"他们可以在一定程度上充当在线文档"吗?让我试试这个,然后我会放弃:"断言不能替代单元测试或系统测试,而是补充。因为断言是一种检查对象或函数内部状态的简洁方法,它们是为免费提供一个关于检查外部行为的黑盒测试的明确协助。"关闭它们并不是一个问题 - 正如我所说,它是一个Python可读的评论。
-
确切地说 - 他们在那里协助测试,而不是作为算法的一部分。 如果使用py -O myscript.py调用脚本,它将跳过所有assert语句。 如果你不相信我,你可以自己尝试一下。 这就是为什么你应该使用raise,如果你打算在某些情况下你的实际代码引发异常。
-
正如我所说,试图向你解释一些事情可能是失败的原因。 如果您想再说些什么,请将其移至聊天室。
-
再多一点,然后我会闭嘴。 import-that.dreamwidth.org/676.html(当然,你在聊天中有更多的积分。)