如何创建随机范围,但排除特定数字?
How do you create a random range, but exclude a specific number?
我有以下代码:
while True:
if var_p1 != "0":
break
else:
import random
var_p1 = random.randint(-5,5)
我希望循环重复直到 var_p1
不等于零。但是,我总是得到零。我做错了什么?
"0" != 0
.
您正在与一个字符串进行比较,但是 randint
给您一个整数。
好吧,你检查一个字符串来打破循环。所以使用:
if var_p1 != 0:
而不是:
if var_p1 != "0":
一种从 a
生成到 b
但不包括值 c
的内存有效方法是:
r = random.randint(a, b - 1)
if r >= c:
r += 1
这样,在第一步中,我们将在 a
和 c - 1
之间或 c
和 b - 1
之间生成一个随机整数。在第二种情况下,我们递增 1,得到一个介于 c + 1
和 b
之间的随机数。很容易看出 a..(c - 1)
和 (c + 1)..b
之间的每个数字都有相同的概率。
您的代码失败,因为您将整数与字符串进行比较。您的代码还有其他问题:
- 您在循环中有一个
import
语句。
- 不知道你的循环会运行.
多少次
这是一种无循环的方式,可以随机生成从 -5 到 +5(含)的非零整数。
import random
x = random.randint(1, 5)
if random.randrange(2) == 1:
x = -x
此代码保证恰好调用 random.randrange
两次。
回答标题中的问题,而不是真正的问题(由 Daniel Roseman 回答):
如何创建随机范围,但排除特定数字?
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)
作为替代方法,只需从数组中随机选择一个元素,[-5, -4, -3, -2, -1, 1, 2, 3, 4, 5]。保证只需一个电话即可工作。
我有以下代码:
while True:
if var_p1 != "0":
break
else:
import random
var_p1 = random.randint(-5,5)
我希望循环重复直到 var_p1
不等于零。但是,我总是得到零。我做错了什么?
"0" != 0
.
您正在与一个字符串进行比较,但是 randint
给您一个整数。
好吧,你检查一个字符串来打破循环。所以使用:
if var_p1 != 0:
而不是:
if var_p1 != "0":
一种从 a
生成到 b
但不包括值 c
的内存有效方法是:
r = random.randint(a, b - 1)
if r >= c:
r += 1
这样,在第一步中,我们将在 a
和 c - 1
之间或 c
和 b - 1
之间生成一个随机整数。在第二种情况下,我们递增 1,得到一个介于 c + 1
和 b
之间的随机数。很容易看出 a..(c - 1)
和 (c + 1)..b
之间的每个数字都有相同的概率。
您的代码失败,因为您将整数与字符串进行比较。您的代码还有其他问题:
- 您在循环中有一个
import
语句。 - 不知道你的循环会运行. 多少次
这是一种无循环的方式,可以随机生成从 -5 到 +5(含)的非零整数。
import random
x = random.randint(1, 5)
if random.randrange(2) == 1:
x = -x
此代码保证恰好调用 random.randrange
两次。
回答标题中的问题,而不是真正的问题(由 Daniel Roseman 回答):
如何创建随机范围,但排除特定数字?
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)
作为替代方法,只需从数组中随机选择一个元素,[-5, -4, -3, -2, -1, 1, 2, 3, 4, 5]。保证只需一个电话即可工作。