【问题标题】:A random integer between specific values excluding 0特定值之间的随机整数,不包括 0
【发布时间】:2021-11-24 06:15:29
【问题描述】:

我必须在选定的最小值和选定的最大值之间生成一个随机整数i,我写如下:

min = -10
max = 10
i = random.randint(min, max)

问题是我不知道如何排除数字零。

我需要排除 0,因为稍后我将除以 min/max,因此 min 不能为零,max 也不能是(因为你会得到一个零模错误)。

【问题讨论】:

  • 要么重新滚动随机变量,要么只选择 9 作为上限并将 0 视为 10
  • @luk2302 我在考虑 2 个选项:1. 将 0 更改为另一个随机数,以防生成的数字为 0 或 2. 使用 while 循环,例如 while integer i != 0, ....你知道我怎么能写下第一个或第二个代码吗?
  • @mkrieger1 我不想生成多个范围,但无论如何谢谢!
  • 是的,范围是 -10 到 -1 和 1 到 10!

标签: python math random integer zero


【解决方案1】:

您可以从 -10 到 9 选择,然后将非负选择增加 1:

min = -10
max = 10
i = random.randint(min, max - 1)
i += i >= 0

或者 @luk2302 建议的实现,再次从 -10 选择到 9,然后将 0 替换为 10:

min = -10
max = 10
i = random.randint(min, max - 1) or max

也可以使用randrange:

min = -10
max = 10
i = random.randrange(min, max) or max

【讨论】:

  • 我只是想理解代码; max-1 会做什么?因为我需要最大为 10。
  • @AnonymousRU 它减少了初始选择范围。然后调整使其完全符合您的要求。
  • 我能用一个while循环来做到这一点吗?类似于:while integer i != 0,...... 或者确保代码更改 min 或 max 以防生成的整数为 0?感谢您的帮助:)
  • @AnonymousRU 你为什么要这样做?确保已经确定的事情有什么意义?
  • @AnonymousRU 好吧,当然,如果你想添加那个循环。这只是 100% 毫无意义。
【解决方案2】:

对于一个小范围,我只会列举有效的选择并从中进行选择:

x = list(range(min_value, max_value + 1))
x.remove(0)
i = random.choice(x)

随着范围的增加,选择 0 的机会减少,因此如果您选择 0,简单重新滚动的摊销成本也会减少:

while True:
    i = randint(min_value, max_value)
    if i:
        break

【讨论】:

  • 我将最小值和最大值记为 -10 和 10,而它们在我的代码中实际上更大。问题是 min 和 max 仍有可能为零,这将在代码中断时停止。我只想要 min 和 max 之间的所有数字而不是零。
【解决方案3】:

有几种方法可以做到这一点。

首先很简单。如果你得到一个 0,则生成另一个数字,直到你得到一个不为零的数字。

import random
min = -10
max = 10
i = random.randint(min, max)
while i == 0:
    i = random.randint(min, max)

另一种方法是生成可能值的列表,然后使用 random.choice

import random
min = -10
max = 10
possible_values = [num for num in range(min, max+1) if num!=0]
i = random.choice(possible_values)

另一种方法是按照@luk2302 的建议进行操作

import random
min = -10
max = 10
i = random.randint(min, max - 1) or max

如果您想探索,还有其他方式。

【讨论】:

  • 如果我能够帮助您解决您的问题,您能否将其标记为正确答案?意义重大!
  • 当然,我该怎么做?我是新手。
  • 这个答案的左边有一个绿色的勾号。只需点击它!
  • @don't talk code。如果我确实帮助了他,我应得的。
  • 因为他只是说我的代码对他有用并且他理解它。没见他对别人这么说
猜你喜欢
  • 2014-04-09
  • 2011-07-12
  • 2019-11-28
  • 2011-04-29
  • 2015-01-22
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
相关资源
最近更新 更多