繁体   English   中英

如何找到可被给定范围内的数字整除的数字?

[英]how to find number that's divisible by a number in a given range?

我有以下代码:

generateMin = 150
generateMax = 250
if (current_level.world_shift * -1 % n == 0
        for n in range(generateMin, generateMax)):
    print("in range")

以100 FPS进行检查-当我左右移动时, current_level.world_shift发生了变化。 但是,此代码不起作用。 有人可以帮我吗?

我认为您误会了range()方法。 它不会创建随机数,而是会创建特定范围内的数字列表。 例如, range(1,5)产生[1,2,3,4]

import random
generateMin = 150
generateMax = 250
if (current_level.world_shift * -1 % random.randint(generateMin, generateMax) == 0):
        print("in range")

我认为您正在尝试在条件中进行赋值,例如if (n == 1 with n = 1) ,但是错误地使用了列表理解,最终将其验证为True 我很惊讶没有给出语法错误。

Python不支持条件内的赋值,您需要在if之前赋值,或者根本不需要赋值,就像上面的代码一样。

您不能在类似的if语句中使用生成器表达式 这是因为最初生成器表达式会产生一个新的生成器对象,并且通常将大多数类型的实例视为True (请参阅文档中的“ 真值测试 ”)。

要执行您想要的操作,我建议您改为使用内置的any()函数。 这样会很快,因为一旦遇到True布尔子表达式值,它将立即停止。

这就是我的意思:

# a couple of things to allow dot syntax used in question to be used in answer
class Level: pass
current_level = Level()

current_level.world_shift = -175
generateMin = 150
generateMax = 250

if any(current_level.world_shift*-1 % n == 0
        for n in range(generateMin, generateMax)):
    print("in range")

如果current_level.world_shift*-1被开放式范围内的任意数均分,则any()将返回True (假设这就是您要确定的)。 开放式是指不会考虑值generateMax因为range(start, stop)仅覆盖从startstop-1的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM