Python - оптимизирующее математическое уравнение для простого подсчета очков - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь создать уравнение, похожее на грязный блок кода, который я сделал, чтобы вычислить счет на основе количества догадок, которые игрок получил в игре на угадывание.

У игрока есть10 попыток.За каждую неудачную попытку умножение очков уменьшается на х.Таким образом, чем больше попыток, тем меньше будет учитываться оценка.

Я пытался подсчитать длину списка догадок, который содержит количество попыток, но это работает в противоположность тому, что я хочу.Это дает игроку больше очков, чем больше он пытается, то использовал.

Я пытался использовать len (догадки [:: - 1]), но это делает то же самое ... очевидно, так как он все еще считаетсянапример, 10 попыток.

Есть идеи, как это сделать?Я подозреваю, что цикл for, но я не смог сделать что-то близкое к работе.

В основном я ищу уравнение или математическое выражение, а не список, дикт и т. Д.делать это.

Например, что-то линейное, как:

Prize = bet * (reversedGuesses * 
1.25) 
# so that if it took 1 try = 12.5
# and if it took 10 tries = 1.25

Мой текущий грязный, неоптимизированный блок кода:

if tries == 10:
    prize = bet * 7
elif tries == 9:
    prize = bet * 6
elif tries == 8:
    prize = bet * 5
elif tries == 7:
    prize = bet * 3.5
elif tries == 6:
    prize = bet * 2.75
elif tries == 5:
    prize = bet * 2.50
elif tries == 4:
    prize = bet * 2.25
elif tries == 3:
    prize = bet * 2.0
elif tries == 2:
    prize = bet * 1.75
elif tries == 1: 
    prize = bet * 1.5

Выше очевидно, что работает, но я 'Я уверен, что это может быть сделано более эффективно ...

Я новичок в Python, поэтому объяснение было бы тоже здорово!

Спасибо!

1 Ответ

0 голосов
/ 20 января 2019

Я пытался использовать len (догадки [:: - 1]), но это делает то же самое ... очевидно, так как он все еще учитывает, например, 10 попыток.

Проблема с этим подходом состоит в том, что если вы перевернете список и спросите, как долго он будет, он будет точно таким же, как и первоначальный список.

В основном я ищу уравнение или математическое выражение, а не список, дикт и т. Д. Способ сделать это.

Вы могли бы разделить на число догадок, которые они использовали. Что-то вроде:

Prize = bet / len(guesses)

Вы можете уменьшить приз на 10% за каждое неверное предположение:

Prize = bet * ((1 - 0.10) ** len(guesses))

Вы можете уменьшить приз до 0 после 10 неправильных догадок и уменьшаться на одну и ту же сумму каждый раз между:

guesses_left = max(0, 10 - len(guesses))
Prize = bet * guesses_left

Я новичок в python, поэтому объяснение было бы тоже здорово!

Если вы умножите на длину списка, выигрыш будет тем больше, чем дольше они будут играть, что противоположно тому, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...