【问题标题】:questions about randint and if关于 randint 和 if 的问题
【发布时间】:2023-03-31 12:53:01
【问题描述】:
def rng():
    return randint(1, 100)

if rng() <= x and rng() <= y and rng() <= z:
   .....

同理 是

if rng() <= x and y and z:
   .....

我想做的是从函数rng() 中获取一个数字,然后用它与if 语句中的变量进行比较

我怀疑在第一个版本中,rng() 是否运行了 3 次,每次比较都有 3 个不同的数字,而不是相同的数字。

或者第二个版本可以工作

【问题讨论】:

  • 都没有这些代码 sn-ps 将起作用;一个选择三个不同的随机数,另一个只与 x 比较。将返回值赋给变量,无需尝试内联所有内容。
  • 那怎么办?
  • 只需分配例如value = rng(),然后在比较中使用value
  • @jonrsharpe 这应该是一个答案,而不是评论。

标签: python python-3.x if-statement random


【解决方案1】:

正如@jonsharpe 指出的那样,这些都行不通。第二个将是荒谬的(这不是and 的工作方式),而第一个会更有意义但仍然失败。它会失败,因为它将计算三个不同的随机数,而不是一个。您需要执行以下操作:

r = rng()
if r <= x and r <= y and r <= z:
    #do something

在这种特殊情况下,您还可以使用min 运算符:

if rng() <= min(x,y,z):
    #do something

虽然显然并非所有涉及 r 的比较都可以减少到只有 1。

【讨论】:

  • 在第二种情况下,您可能还应该使用r = rng(),使用min
  • @tobias_k 这取决于 OP 这样做的目的。如果重点是让if 主体中的代码以取决于x,y,z, 的特定概率执行并且r 没有进一步的作用,那么定义r 将是多余的.
猜你喜欢
  • 2022-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 2019-08-11
相关资源
最近更新 更多