【问题标题】:Assigning unique values in range to variables at random将范围内的唯一值随机分配给变量
【发布时间】:2018-03-08 05:57:05
【问题描述】:

我对编码很陌生,但我已经恋爱了。

我正在做一个(过于)雄心勃勃的项目,但我需要一些帮助。

我正在尝试(在 Python 中)将 9 个值 (1-9) 分配给 9 个变量(字母 ai),但我不知道如何做到这一点,尽管研究教会了我如何在这些变量之间分配随机数值,我无法让它们不重叠(除了纯粹的运气)。

我想要随机生成的示例: a = 7 , b = 8 , c = 4 , d = 6 , e = 9 , f = 1 , g = 2 , h = 3, i = 5

【问题讨论】:

  • 不要生成一堆单独的随机数。 随机播放.
  • 你看过random.sample吗? random.sample(range(1, 10), 9)
  • 不要使用一堆变量来保存随机值。使用数据结构,例如列表。正如@cᴏʟᴅsᴘᴇᴇᴅ 所说,这将允许您使用类似random.sample 的东西,看起来就像您想要的那样。

标签: python python-3.x variables random


【解决方案1】:

欢迎来到 Python 世界!您可以通过使用range 创建一个从 1 到 9 的列表来完成随机变量分配。使用random.shuffle 随机播放该列表。然后做你的变量赋值。这里有一些代码来说明:

import random
one_through_five = list(range(1, 6))
# shuffle one_through_five in place
random.shuffle(one_through_five)
a, b, c, d, e = one_through_five
print(a, b, c, d, e)

【讨论】:

  • 感谢一个明确的答案,遗憾的是,当我将此代码复制粘贴到我的并根据我的喜好进行调整时,它不起作用。但其中一个错误似乎发生在“import.random”“文件”中,我猜是这样。 gyazo.com/908110e841da57ddac4879e635a98abfgyazo.com/84ce599a044d746472c063614f783b4a
  • ^ 哦,顺便说一句,我从 a-i(10 个值)变为 a-e(5 个值)
  • 我修正了我的例子。当我写它并假设 range 的输出是一个列表时,我没有考虑 python3。它在python2中,但不在python3中。该示例现在应该可以工作了。 (这一次我都测试过。)
【解决方案2】:

如果你想走洗牌路线,你可以使用random.shuffle。不过,我推荐更好的东西:random.sample

a, b, c, d, e = random.sample(range(1, 6), 5)

如果您坚持使用random.shuffle,则需要确保将range 转换为list,因为random.shuffle 仅适用于列表,而range 不属于list 类型python3.x(这解释了您的TypeErrorrandom.sample 不存在此限制)。

data = list(range(1, 6))
random.shuffle(data)
a, b, c, d, e = data

【讨论】:

  • 我自己会倾向于shuffle,因为它可以处理适当的列表并且比sample快一点。在某些时候,您需要支付为变量赋值创建列表的成本,因此您最好尽可能快且内存效率高(假设代码仍然清晰。)我确信我错过了一些东西。能否详细说明一下为什么sample比较好?
  • @MattHardcastle 更简洁;不必担心列表转换 - 我假设您已经注意到 range 由于黑白 python 版本的不同而导致 OP 出现问题。此外 - 如果您不想就地随机播放列表或首先创建它,则不需要随机播放。
猜你喜欢
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 2019-10-08
  • 1970-01-01
  • 2020-07-09
  • 2015-12-06
相关资源
最近更新 更多