Python 打印给定范围的浮点数列表

Python printing list of floats given the range

我正在尝试模拟一个非常简单的赌博游戏版本 "Crash",其中有一个数字每秒都在增加,它也是您的积分的乘数。因此,如果您投入 50 个学分并且乘数变为 3.30,您将获得 50*3.30=165 个学分。号码随机闪退,不取款就亏了。

from random import randrange, randint

crash_max_range = 50
crash_min_range = 0

multiplier_crash = list(range(crash_min_range, crash_max_range))
multiplier_crash = [float(i) for i in multiplier_crash]
print(*multiplier_crash, sep="\n")

我遇到的主要问题是打印浮动列表,它应该看起来像

0
0.01
0.02
0.03

等..(每个数字换行) 我也不知道如何增加它在低范围内 70% 的时间崩溃的机会,因为显然玩家不能总是赢。 你能帮我吗?

我不清楚崩溃的故事,但如果您希望以 .01 的增量打印浮动列表,那么您可以做的一件事就是像这样更改这两行:

multiplier_crash = list(range(crash_min_range, crash_max_range * 100))
multiplier_crash = [float(i) / 100 for i in multiplier_crash]

这会将初始的 0 打印为 0.0,但是...如果您希望打印 0 和 1 等数字而没有尾随 .0,就像您的示例中那样,您可以这样做的一种方法是像这样替换上面的第二行:

multiplier_crash = ["{:,g}".format(float(i) / 100) for i in multiplier_crash]

对于模拟,您通常会使用一次执行一个步骤的循环。我建议在随机条件下使用无限循环和 break 语句。

在此循环中,您只需在每次打印时打印一个值。您应该对任何新代码使用 str.format() 方法。

代码可能如下所示:

import random

multiplier = 1.00
while True:
    print('{:.2f}'.format(multiplier))
    if random.random() < 0.1:
        break
    multiplier += 0.01
print('CRASH')

上面的例子并不完美,因为长期为运行浮点数错误会累积。最好使用整数并将其缩放以输出。

使用itertools你可以这样做。

import itertools
import random

for i in itertools.count(100):
    multiplier = float(i) / 100.0
    print('{:.2f}'.format(multiplier))
    if random.random() < 0.1:
       break
print('CRASH')

这可以使用生成器表达式进一步简化。但是,当您刚开始使用 pyhton 时,代码可能不太清楚。

import itertools
import random

for multiplier in (float(i) / 100.0 for i in itertools.count(100)):
    print('{:.2f}'.format(multiplier))
    if random.random() < 0.1:
       break
print('CRASH')