Python 在if-else语句中使用范围内(..)
python 2.7 是否可以这样做:Python 在if-else语句中使用范围内(..),python,Python,python 2.7 是否可以这样做: print "Enter a number between 1 and 10:" number = raw_input("> ") if number in range(1, 5): print "You entered a number in the range of 1 to 5" elif number in range(6, 10): print "You entered a number in the range of 6
print "Enter a number between 1 and 10:"
number = raw_input("> ")
if number in range(1, 5):
print "You entered a number in the range of 1 to 5"
elif number in range(6, 10):
print "You entered a number in the range of 6 to 10"
else:
print "Your number wasn't in the correct range"
我发现如果我把一个数字放在1到10之间,它总是落在else语句上
这是否在if-else语句中使用了不正确的in-range
非常感谢,>number=raw\u input()
>>> number = raw_input()
3
>>> type(number)
<type 'str'>
>>> "3" in range(1,5)
False
number = int(raw_input())
3.
>>>类型(编号)
>>>范围内的“3”(1,5)
假的
number=int(原始输入()
在检查输入之前,应先将输入(字符串)转换为数字。如果1。因此,它流向其他地方。把它转换成整数,一切都会好的
>>> number = raw_input("> ")
>>> type(number)
<type 'str'>
int(number) converts to <type 'int'>
为了完整性起见,
中的运算符可用作测试属性成员资格的布尔运算符。因此,它在if..else
语句中可用(完整的文档摘录见下文)
当使用in
操作符时(例如obj in container
),解释器首先查看container
是否有\uuuu contains\uuu
方法。如果不是,但如果容器定义了\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
for value in container:
if value == obj:
return True
return False
最后,如果两个方法都没有定义,解释器将查找\uuu getitem\uuu
方法在容器上迭代,并且仍然会测试任何值是否与obj
相等。
你也可以看看
现在,在您的例子中,range([start],stop[,step])
函数实际上返回一个列表(注意此列表不包含最后一个元素,因此range(1,5)=[1,2,3,4]
),它定义了\uuuuuuuuuuu包含的方法:
>>> type(range(1, 10))
list
>>> hasattr(list, '__contains__')
True
>>> 4 in range(1, 10)
True
因此,它完全有权在(1,10)
范围内写入x。正如其他答案所指出的,您的问题实际上是通过将输入数据转换为整数来解决的类型问题(因为“3”==3
为False)。
但是,如果您只想测试输入值是否有适当的边界,我将明确建议您使用比较运算符
>>> if 1 <= x < 10:
... print 'ok'
... else:
... print 'ko'
最后,这里是python文档中关于
集合成员资格测试中的和未测试中的运算符。如果x是集合s的成员,则s中的x计算为true,否则为false。x不在s中返回x在s中的求反。集合成员测试传统上被绑定到序列;如果集合是序列并且包含与该对象相等的元素,则对象是集合的成员。然而,对于许多其他对象类型来说,支持成员资格测试而不是序列是有意义的。特别是,字典(用于键)和集合支持成员资格测试
对于列表和元组类型,当且仅当存在索引i,使得x==y[i]为真时,y中的x为真
对于Unicode和字符串类型,当且仅当x是y的子字符串时,y中的x为真。等效测试是y.find(x)!=-1.注意,x和y不必是同一类型;因此,abc中的u'ab'将返回True。空字符串始终被视为任何其他字符串的子字符串,因此“abc”中的“”将返回True
在版本2.3中进行了更改:以前,x必须是长度为1的字符串
对于定义\uuuuuuuuuuuuuuuuuu包含
()方法的用户定义类,当且仅当y.\uuuuuuuuu包含
(x)为真时,y中的x为真
对于不定义\uuuu包含
()但定义\uuuu iter\uuuu
()的用户定义类,如果在y上迭代时生成某个值z且x==z,则y中的x为真。如果在迭代过程中引发异常,就好像在中引发了该异常一样
最后,尝试旧式的迭代协议:如果一个类定义了\uuu getitem\uuu
(),当且仅当存在一个非负整数索引i,使得x==y[i],并且所有较低的整数索引都不会引发索引器异常时,y中的x才为真。(如果引发任何其他异常,则与引发该异常一样)
运算符not in被定义为具有反真值in
运算符是和不是对象标识的测试:当且仅当x和y是同一对象时,x为y为真。x不是y,产生反真值。[7]
另一种可能的解决方案是在开头使用int:
number = int(raw_input("> "))
请注意,范围(1,5)
不包括数字5。int(“5”)在范围(1,5)
->False
>>> type(xrange(1, 10))
xrange
>>> hasattr(xrange, '__contains__')
False
>>> hasattr(xrange, '__iter__')
True
>>> 4 in xrange(1, 10)
True
number = int(raw_input("> "))