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]