Как сделать так, чтобы в то время как l oop повторялось снова и снова в Python? - PullRequest
1 голос
/ 05 августа 2020

У меня возникают проблемы с получением моего while l oop в l oop снова и снова в Python. Вот проблема / вопрос, который я пытаюсь решить:

Реализуйте функцию roll_dice в hog.py.

  • Она принимает два аргумента: положительное целое число, называемое num_rolls задает количество бросков кубиков и функцию dice().
  • Возвращает количество очков, набранных при броске кубиков такое количество раз за ход: либо сумма результатов, либо 1 (также известный как ' Pig Out ': если любой из результатов игры в кости равен 1, текущий счет игрока за ход равен 1). Чтобы получить единичный результат броска кости, наберите dice(). Вы должны вызвать dice() ровно num_rolls раз в теле roll_dice. Не забудьте коллировать dice() ровно num_rolls раз, даже если «Pig Out» происходит в середине розыгрыша. Таким образом, вы правильно имитируете бросание всех кубиков вместе.

Вот мой код, где num_rolls: количество бросков кубиков, которые будут сделаны, и dice(): функция который имитирует результат броска одной кости.

def roll_dice(num_rolls, dice=six_sided):
    current_roll = 0
    while current_roll < num_rolls:
        current_roll += 1
        total_sum = 0
        current_value = dice()
        if current_value == 1 or total_sum == 1:
            total_sum = 1
            return total_sum
        else:
            total_sum += current_value
            return total_sum

Когда я отлаживаю в PyCharm, в моем примере, когда он случайным образом выбирает current_value = 4, общая сумма = 4, а current_roll = 1, даже когда требуемое количество циклы - это num_rolls = 5. Это означает, что он зациклен только один раз, тогда как должен быть l oop 5 раз. Может ли кто-нибудь дать представление о том, почему это может быть? Я делал настройку раньше, когда current_value = dice() находился за пределами while l oop, и я переместил его внутрь while l oop, и я думал, что это исправит, но это не так.

Также , дайте мне знать, если я могу внести какие-либо пояснения. Я начинаю учиться и не умею объяснять

1 Ответ

0 голосов
/ 05 августа 2020

Похоже, вы потеряли последний оператор возврата (отступы важны!). Вот как это должно выглядеть:

def roll_dice(num_rolls, dice=six_sided):
    current_roll = 0
    total_sum = 0
    while current_roll < num_rolls:
        current_roll += 1
        current_value = dice()
        if current_value == 1:
            total_sum = 1
            break
        else:
            total_sum += current_value
    return total_sum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...