python - 输出超出 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
中包括在内,但它包括一个甚至超过的数字!maximum
maximum+1
为了进一步测试,我尝试按以下方式更改变量,并发现了一些既有趣又令人费解的东西:
minimum = 1
maximum = 4
even = False
正如预期的那样,我得到了1, 3
我的输出。但是,当我更改时minimum = 2
,我得到了3, 5
我的输出!
有人可以向我解释为什么代码会这样吗?提前致谢!
解决方案
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)
推荐阅读
- c++ - A如何在 CMake 项目中使用不同的编译器?
- compilation - 使用 FreeCad Libpack 用 rapidjson 编译 OCCT7.5?
- ios - iOS:在特定日期之后执行代码
- c# - 从 ASP.NET Core 5.0 MVC DropDownList 中获取选定的国家
- javascript - 如何通过重复无限循环自动播放静音
- java - Java spring Mockito 不模拟 MongoDb 服务
- python - 从 GlounCV 模型 Zoo 将图像传递给 yolo3 的梯度函数
- python - 为什么我的模型的 __table__ dict 的约束消失了?
- python - 当连接语句有时没有数据时,如何处理在烧瓶应用程序中将 sql 结果转换为 json?
- rust - aarch64 EL1中的堆栈指针未对齐