提问人:user22670372 提问时间:10/2/2023 最后编辑:user22670372 更新时间:10/3/2023 访问量:73
尝试获取 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?
问:
例如,我希望有两个随机数(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”
答:
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}=")
或者,您可以从任何不符合您条件的随机数中添加或减去一个,然后该数字将满足该条件。
评论