据我所知,该range()函数实际上是Python 3中的一个对象类型,它可以动态生成其内容,类似于生成器.
在这种情况下,我预计下面的行会花费大量的时间,因为为了确定1千万亿是否在该范围内,必须生成一个千万亿的值:
1000000000000000 in range(1000000000000001)
Run Code Online (Sandbox Code Playgroud)
此外:似乎无论我添加多少个零,计算或多或少都需要相同的时间(基本上是瞬时的).
我也试过这样的事情,但计算仍然几乎是即时的:
1000000000000000000000 in range(0,1000000000000000000001,10) # count by tens
Run Code Online (Sandbox Code Playgroud)
如果我尝试实现自己的范围功能,结果就不那么好了!!
def my_crappy_range(N):
i = 0
while i < N:
yield i
i += 1
return
Run Code Online (Sandbox Code Playgroud)
range()在引擎盖下做的对象是什么让它如此之快?
选择Martijn Pieters的答案是因为它的完整性,但也看到了abarnert的第一个答案,可以很好地讨论在Python 3中range成为一个完整的序列意味着什么,以及关于__contains__Python实现中函数优化的潜在不一致的一些信息/警告.abarnert的另一个答案更详细,并为那些对Python 3中的优化背后的历史感兴趣的人提供了链接(并且缺乏xrangePython 2中的优化).poke和wim的答案为感兴趣的人提供了相关的C源代码和解释.
我最近开始接触 Python,因为 C++ 很有趣,但 Python 似乎有点酷。只要输入在某个数字范围之间,我就想让 Python 做一些事情。
def main():
grade = float(input("“What’s your grade?”\n:"))
if grade >= 90:
print("“You’re doing great!”")
elif(78 >= grade <= 89):
print("“You’re doing good!”")
elif(77 >= grade > 65):
print("You need some work")
else:
print("Contact your teacher")
main()
Run Code Online (Sandbox Code Playgroud)
当我在做 elif 语句时问题就出现了,我不能这样做,所以只要成绩在 65 到 89 之间,Python 只会打印“做得很好”的语句。你将如何处理数字范围?
python if-statement between numeric-ranges floating-point-comparison
很简单的问题,但是我不知道如何实现。
实质上:
>>> r = range(4,-1)
>>> 3 in r
False
>>> q = range(-1,4)
>>> 3 in q
True
Run Code Online (Sandbox Code Playgroud)
如您所见,我具有相同的边界-1和4,以及相同的测试值,所以当我不知道它们的顺序时,如何说'3'在'-1'和'4'之间送给我吗?
我正在编程课程的介绍中,出于某种原因我对如何从这里开始感到有点困惑.基本上,提示是比较用户输入的三个数字,并查看第一个数字是否在最后两个数字之间.
def fun1(a,b,read,):
if a < read and read > b:
return print("Yes")
elif b < read and read > a:
return print("Yes")
else:
return print("No")
def main():
read = input("mid: ")
a = input("num1 ")
b = input("num2 ")
fun1(read,a,b,)
print("result:",fun1)
Run Code Online (Sandbox Code Playgroud)
所以你看到我无法弄清楚如何在第一个函数中得到比较函数.任何帮助深表感谢!
这是我的代码:
total = int(input("How many students are there "))
print("Please enter their scores, between 1 - 100")
myList = []
for i in range (total):
n = int(input("Enter a test score >> "))
myList.append(n)
Run Code Online (Sandbox Code Playgroud)
基本上我正在编写一个计算测试分数的程序,但首先用户必须输入0到100之间的分数.
如果用户输入超出该范围的测试分数,我希望程序告诉用户重写该数字.我不希望程序以错误结束.我怎样才能做到这一点?
以下代码根据a变量所属的范围为v变量分配一个特定的值。
if v>0 and v<1000:
c='green'
elif v>=1000 and v<2000:
c='yellow'
else:
c='red'
Run Code Online (Sandbox Code Playgroud)
效果很好,但是我想知道是否还有更多的Python方式可以编写以下条件块。
for i in range(10):
if i > 3 < 5:
print(i, "first")
else:
print(i, "second")
Run Code Online (Sandbox Code Playgroud)
0 second
1 second
2 second
3 second
4 first
5 first
6 first
7 first
8 first
9 first
Run Code Online (Sandbox Code Playgroud)
0 second
1 second
2 second
3 second
4 first
5 second
6 second
7 second
8 second
9 second
Run Code Online (Sandbox Code Playgroud)
亲自尝试一下.这对我来说没有意义.它为什么这样做?
我知道你可能会想,你为什么不这么说
if i == 4
Run Code Online (Sandbox Code Playgroud)
但这只是我程序中的一个简化问题.
提前致谢
雨果
python ×8
python-3.x ×3
range ×2
between ×1
comparison ×1
conditional ×1
if-statement ×1
performance ×1