Python распечатывает список поплавков с учетом диапазона

Я пытаюсь подражать действительно простой версии азартной игры "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% случаев на небольшом диапазоне, потому что, очевидно, игрок не всегда может выиграть. Не могли бы вы помочь мне с этим?

2 ответа

Решение

Для симуляции вы обычно используете цикл, который делает один шаг за раз. Я предлагаю использовать бесконечный цикл и оператор 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')

Мне не совсем понятна история сбоев, но если вы хотите, чтобы список с плавающей точкой печатался с шагом в 0,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]
Другие вопросы по тегам