相关疑难解决方法(0)

为什么Python 3中的"1000000000000000在范围内(1000000000000001)"如此之快?

据我所知,该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中的优化).pokewim的答案感兴趣的人提供了相关的C源代码和解释.

python performance range python-3.x python-internals

1890
推荐指数
11
解决办法
18万
查看次数

如何在Python中查找数字是否属于特定范围?

假设我想检查是否x属于范围0到0.5.我该怎么做?

python range

46
推荐指数
6
解决办法
10万
查看次数

Python-如何在 x 和 y 之间进行 if 语句?

我最近开始接触 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

5
推荐指数
1
解决办法
3万
查看次数

如果数字在两个值之间,则返回[Python]

很简单的问题,但是我不知道如何实现。

实质上:

>>> 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'之间送给我吗?

python python-3.x

1
推荐指数
3
解决办法
2万
查看次数

比较三个数字?

我正在编程课程的介绍中,出于某种原因我对如何从这里开始感到有点困惑.基本上,提示是比较用户输入的三个数字,并查看第一个数字是否在最后两个数字之间.

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)

所以你看到我无法弄清楚如何在第一个函数中得到比较函数.任何帮助深表感谢!

python comparison

1
推荐指数
1
解决办法
1万
查看次数

检查python中的数字是否在某个范围内(带循环)?

这是我的代码:

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之间的分数.

如果用户输入超出该范围的测试分数,我希望程序告诉用户重写该数字.我不希望程序以错误结束.我怎样才能做到这一点?

python

0
推荐指数
2
解决办法
4万
查看次数

检查数字是否在一定范围内的Python方法

以下代码根据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方式可以编写以下条件块。

python conditional

0
推荐指数
1
解决办法
901
查看次数

Python if语句让我感到困惑

运行python v3.6.5 PyCharm

我有一个简单的for循环,带有if和else语句:

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 python-3.x

0
推荐指数
2
解决办法
74
查看次数