首页 > 解决方案 > 输出超出 range() 函数中指定的最大值

问题描述

我正在尝试回答以下练习题:

“编写一个循环(我们建议使用 for 循环),打印从最小值到最大值的数字,包括最小值和最大值本身。如果 even 为 True,则仅打印偶数。如果 even 为 False,则仅打印奇数。您可以假设最小值总是小于最大值。”

为此,我编写了以下代码,它适用于某些最小值和最大值:

minimum = 5
maximum = 14
even = True

if even:
    for numbers in range(minimum, maximum+1, 2):
        if numbers%2 == 0:
            print(numbers)
        elif numbers%2 == 1:
            numbers += 1
            print(numbers)
else:
    for numbers in range(minimum, maximum+1, 2):
        if numbers%2 == 1:
            print(numbers)
        elif numbers%2 == 0:
            numbers += 1
            print(numbers)

这产生了我想要的输出6, 8, 10, 12, 14

但是,一旦我的最小值、最大值和偶数值被更改,例如如下:

minimum = 29
maximum = 33
even = True

该代码以某种方式生成30, 32 and 34. 34 > 33,因此它不应该存在,但它确实存在。我的假设是range()它不包括最大数量,因此我曾经在问题maximum+1中包括在内,但它包括一个甚至超过的数字!maximummaximum+1

为了进一步测试,我尝试按以下方式更改变量,并发现了一些既有趣又令人费解的东西:

minimum = 1
maximum = 4
even = False

正如预期的那样,我得到了1, 3我的输出。但是,当我更改时minimum = 2,我得到了3, 5我的输出!

有人可以向我解释为什么代码会这样吗?提前致谢!

标签: pythonfor-looprangeconditional

解决方案


mn, mx, even = 5, 14, True

for x in range(mn + int(bool(mn % 2) == even), mx + 1, 2):
    print(x)

int() 将内部的 bool 值转换为 0 或 1,这是启动所需的偏移量。

PS 要了解您的代码超出范围的原因,请假设numbers = 33,将其插入您的代码,然后看看会发生什么:

    if numbers%2 == 0:
        print(numbers)
    elif numbers%2 == 1:
        numbers += 1
        print(numbers)

推荐阅读