多条件 if 语句

Multiconditional if statements

如何编写代码,以便在随机生成 3 位数字(前 2 位数字可以是 0)的游戏中检查数字是否包含 9。但是,数字不能是 963 或 369。该号码目前以每个数字独立生成的方式生成。每个数字都是一个不同的变量,以便更容易地检查获胜条件。

我目前的代码如下,供参考。我知道为什么它不起作用,但我没有解决方案。

TABLE = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

a=0
b=0
c=0
d=0
e=0
for pp in range (100000):
    rand1 = random.randint(0,9)
    rand2 = random.randint(0,9)
    rand3 = random.randint(0,9)
    
    word1 = TABLE[rand1]
    word2 = TABLE[rand2]
    word3 = TABLE[rand3]
    
    print(word1, word2, word3)

    if (word1 == 9 and word2 != 6 and word3 != 3 and word2 != 9 and word3 != 9) or word2 == 9 and word1 != 9 and word3 != 9 or (word3 == 9 and word1 != 3 and word1 != 7 and word2 != 8 and word2 != 6 and word2 != 9 and word1 != 9):
        a +=1
print(a)
number = (word1, word2, word3)
if 9 in number and number != (3, 6, 9) and number != (9, 6, 3):
    ...

?

除此之外,

  • 通过 TABLE 的间接寻址看起来完全没用。
  • 为什么要初始化一堆未使用的变量?

您可以定义一个函数,该函数使用 while 循环不断循环,直到生成不在 [963, 369] 中的数字,如下所示:

from random import randint

def get_number():
    while True:
        number = randint(100, 999)
        if number not in [963, 369]:
            return number

现在,您可以在需要号码时随时调用该函数:

for _ in range(10):
    number = get_number()
    print(number)

输出:

815
522
855
153
726
859
339
410
332
309

将数字转换为字符串,然后检查该字符串是否包含 9。

a = 0

for pp in range(100000):
    rand1 = random.randint(0, 9)
    rand2 = random.randint(0, 9)
    rand3 = random.randint(0, 9)

    numstr = str(word1) + str(word2) + str(word3)
    print(numstr)

    if "9" in numstr and numstr not in ["963", "369"]:
        a += 1
print(a)

但是,您可以生成一个随机数,而不是生成三个随机数!

a = 0

for pp in range(100000):
    rand = random.randint(0, 999)
    print(rand)
    if "9" in str(rand) and rand not in [963, 369]:
        a += 1
print(a)

单独生成 3 个数字不会使过程更简单,而且您的 TABLE 列表不会带来任何好处。这也打开了生成 000 的可能性,根据您的问题陈述,这是不允许的。 000 的存在会扭曲其他数字的概率分布,使其成为 1/1000 而不是 1/999。

您可以在生成器上应用的总和中获得结果,该生成器生成 Tru/False 个值,表明随机生成的数字符合条件:

a = sum( "9" in str(n) and n not in (963,369)
         for _ in range(100000) for n in [random.randint(1,999)] )