好的,所以我现在有Python代码,它做了这样的事情:
if plug in range(1, 5):
print "The number spider has disappeared down the plughole"
Run Code Online (Sandbox Code Playgroud)
但我真正想要做的是检查的数量并不在范围内.我用Google搜索并查看了Python文档但我找不到任何内容.有任何想法吗?
附加数据:运行此代码时:
if not plug in range(1, 5):
print "The number spider has disappeared down the plughole"
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "python", line 33, in <module>
IndexError: list assignment index out of range
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
if plug not in range(1,5):
print "The number spider has disappeared down the plughole"
Run Code Online (Sandbox Code Playgroud)
哪个返回了相同的错误.
从前一个问题跳出来,我问了一会儿:
为什么Python 3中的1000000000000000范围(1000000000000001)如此之快?
如果你这样做:
1000000000000000.0 in range(1000000000000001)
Run Code Online (Sandbox Code Playgroud)
...很明显,range尚未进行优化以检查floats是否在指定范围内.
我想我明白,预期的目的range是int仅使用s - 所以你不能,例如,做这样的事情:
1000000000000 in range(1000000000000001.0)
# error: float object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)
或这个:
1000000000000 in range(0, 1000000000000001, 1.0)
# error: float object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)
然而,无论出于何种原因,决定允许这样的事情:
1.0 in range(1)
Run Code Online (Sandbox Code Playgroud)
似乎很明显1.0(及1000000000000.0以上)没有被强制转换为ints,因为那时int优化也适用于那些.
我的问题是,为什么不一致,为什么没有优化floats?或者,或者,为什么上述代码不会产生与前面示例相同的错误的原因是什么?
除了优化ints 之外,这似乎是一个明显的优化.我猜测有一些细微的问题妨碍了这种优化的干净实施,或者有一些理由说明为什么你实际上不想包含这样的优化.或者两者都可能.
编辑:为了澄清这里的问题,以下所有语句都进行了评估False:
3.2 in range(5)
'' in range(1)
[] in range(1) …Run Code Online (Sandbox Code Playgroud) 我有这个程序:
print()
print ('------MENU------')
print ('1. Welcome to Python')
print ('2. Python is fun')
print ('3. This could be a challenge')
print ('4. Exit')
print()
choice = int(input('please enter a choice between 1 to 4: '))
for choice in (1,5):
if choice ==1:
print ('Welcome to python')
elif choice == 2:
print ('Python is fun')
elif choice == 3:
print ('This could be a challenge')
else:
break
Run Code Online (Sandbox Code Playgroud)
它应该首先打印MENU然后要求输入一个整数.我的问题是为什么每次输入1到3之间的整数时它会打印两次?