我有以下代码:
while True:
if var_p1 != "0":
break
else:
import random
var_p1 = random.randint(-5,5)
我希望循环重复,直到var_p1
等于零。但是,我一直都是零。我做错了什么?
答案 0 :(得分:8)
回答标题中的问题,而不是真正的问题(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)
答案 1 :(得分:4)
"0" != 0
。
您正在与字符串进行比较,但randint
会给您一个整数。
答案 2 :(得分:4)
你检查一个字符串来打破循环。所以使用:
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
之间生成随机int。在第二种情况下,我们增加1,我们得到c + 1
和b
之间的随机数。很容易看出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]。保证只需一个电话即可使用。