如何创建随机范围,但排除特定数字?

时间:2015-04-24 09:47:00

标签: python if-statement random while-loop range

我有以下代码:

while True:
    if var_p1 != "0":
        break
    else:
        import random
        var_p1 = random.randint(-5,5)

我希望循环重复,直到var_p1等于零。但是,我一直都是零。我做错了什么?

5 个答案:

答案 0 :(得分:8)

回答标题中的问题,而不是真正的问题(Daniel Roseman回答):

如何创建随机范围,但排除特定数字?

使用random.choice

import random
allowed_values = list(range(-5, 5+1))
allowed_values.remove(0)

# can be anything in {-5, ..., 5} \ {0}:
random_value = random.choice(allowed_values)  

答案 1 :(得分:4)

"0" != 0

您正在与字符串进行比较,但randint会给您一个整数。

答案 2 :(得分:4)

你检查一个字符串来打破循环。所以使用:

if var_p1 != 0:

而不是:

if var_p1 != "0":

ab生成但不包含值c的内存有效方式是:

r = random.randint(a, b - 1)
if r >= c:
    r += 1 

这样,在第一步中,我们将在ac - 1之间或cb - 1之间生成随机int。在第二种情况下,我们增加1,我们得到c + 1b之间的随机数。很容易看出a..(c - 1)(c + 1)..b之间的每个数字具有相同的概率。

答案 3 :(得分:2)

您的代码失败是因为您要将整数与字符串进行比较。您的代码还有其他问题:

  • 你在循环中有一个import语句。
  • 不知道你的循环会运行多少次。

这是一种无循环的方法,可以随机生成-​​5到+5之间的非零整数。

import random
x = random.randint(1, 5)
if random.randrange(2) == 1:
  x = -x

此代码可以保证恰好两次调用random.randrange

答案 4 :(得分:0)

作为替代方法,只需从数组中选择一个随机元素,[ - 5,-4,-3,-2,-1,1,2,3,4,5]。保证只需一个电话即可使用。