尝试获取 n 个不以 0 结尾但仍有 n 个输出的随机数。它目前省略了所有以 0 结尾的数字。该怎么办?

Trying to get n random numbers that don't end in 0 but still have n outputs. It's currently omitting all numbers that end in 0. What to do?

提问人:user22670372 提问时间:10/2/2023 最后编辑:user22670372 更新时间:10/3/2023 访问量:73

问:

例如,我希望有两个随机数(x 和 y)的 5 个输出,同时没有任何以零结尾的数字。

if 语句省略了所有以零结尾的数字,并且由于这些数字是随机的,因此我最终没有正好有 5 个输出。

我希望程序继续运行,直到它给了我 10 个输出,其中没有一个数字以零结尾,或者用另一个不以零结尾的数字替换它从 RNG 获得的任何以零结尾的数字。

import random


for k in range(5):

    x = (random.randint(100, 1000))
    y = (random.randint(100, 1000))

    if (x % 10 != 0) and (y % 10 != 0):
            
        print(x, "+", y, "=")

    else:
            print("x")

例如,作为输出:

'567 + 533 =' '196 + 521 =' “x” '624 + 323 =' “x”

python-3.x 循环

评论

2赞 Scott Hunter 10/2/2023
请将代码/输出作为文本发布,而不是文本图像。
2赞 0stone0 10/2/2023
提问时,请不要上传代码/错误的图片。
1赞 Scott Hunter 10/2/2023
计算您打印了多少对,并在打印足够多时停止循环。
0赞 obchardon 10/2/2023
生成一个介于 10 和 99 之间的数字,将这个数字乘以 10,然后添加另一个介于 1 和 9 之间的随机数。
0赞 JonSG 10/2/2023
是要省略两个随机数之和以 0 结尾的结果,还是要确保两个随机数都不以 0 结尾?

答:

1赞 tax evader 10/2/2023 #1

我认为您可以在 while 循环中生成随机的 x、y,只有当 x 和 y 都不以零结尾时才能退出循环

import random


for k in range(15):
    x, y = 10, 10
    while x % 10 == 0 or y % 10 == 0:
        x = random.randint(100, 1000)
        y = random.randint(100, 1000)

    print(x, "+", y, "=")

或者,我认为解决此问题的另一种方法是生成一个不以零结尾的数字列表,然后随机从中挑选

import random

valid_nums = [x for x in range(100, 1001) if x % 10 != 0]
for k in range(15):
    x = random.choice(valid_nums)
    y = random.choice(valid_nums)

    print(x, "+", y, "=")

评论

0赞 user22670372 10/2/2023
@jonSG我希望 x 和 y 中的每一个都不以零结尾,正如解决方案所建议的那样。我必须感谢大家的帮助。
1赞 Codist 10/2/2023 #2

为什么不编写一个函数来构建格式化字符串列表,然后在主程序中打印结果呢?像这样的东西:

from random import randint

def getnums(n: int, r: tuple[int, int]=(100, 1000)) -> list[str]:
    rv = []
    while n > 0:
        if (x := randint(*r)) % 10 and (y := randint(*r)) % 10:
            rv.append(f'{x} + {y}=')
            n -= 1
    return rv

print(*getnums(5), sep='\n')

可能的输出:

839 + 248=
154 + 106=
349 + 248=
881 + 425=
445 + 561=
0赞 SmellyCat 10/3/2023 #3

答案似乎是继续生成随机数,直到 10 满足您的需求。

import random


def _generate_non_zero_random_number():
    x = 0
    while x % 10 == 0:
        x = random.randint(100, 1000)

    return x

def _generate_2_random_numbers():
    return _generate_non_zero_random_number(),  _generate_non_zero_random_number()

for k in range(5):
    x, y = _generate_2_random_numbers()
    print(f"{x}+{y}=")

或者,您可以从任何不符合您条件的随机数中添加或减去一个,然后该数字将满足该条件。