Возникли проблемы с выполнением моей функции при условии l oop в Python - PullRequest
0 голосов
/ 05 августа 2020

моя цель: реализовать функцию roll_dice в hog.py. Он принимает два аргумента: положительное целое число, называемое num_rolls (которое представляет собой количество выполняемых бросков кубиков), и функцию кубиков (функция, имитирующая результат одного броска кости). Он возвращает количество очков, набранных при броске кубиков такое количество раз за ход: либо сумма результатов, либо 1.

Возвращает 1, если любой из результатов игры в кости равен 1.

Когда я отлаживаю в PyCharm, он говорит, что current_roll = 2, current_value = 4, num_rolls = 5 и total_sum = 4. Это наводит меня на мысль, что он прошел через l oop только один раз, поскольку current_roll должен быть 5 поскольку num_rolls равно 5. Кроме того, поскольку total_sum - это только current_value. Я пробовал перемещаться по назначению переменных, но ничего не помогло.

Может ли кто-нибудь дать мне какие-либо указания относительно того, почему моя функция не зацикливается, пока current_roll не станет

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

это то, что мой код обновлен до сих пор:

    total_sum = 0
    current_roll = 0
    while current_roll < num_rolls:
        current_roll += 1
        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

Я обновил свой код, но он все еще не проходит. Я добавил функцию dice () в while l oop и изменил общую сумму = 1. Вы хоть представляете, почему она все еще не проходит?

Ответы [ 2 ]

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

Вы даже не используете свою функцию dice в l oop. Попробуйте переписать свой код таким образом:

def roll_dice(num_rolls, dice=six_sided):
    total_sum = 0
    rolled_one = False
    # roll a dice num_rolls times
    for current_roll in range(num_rolls):
        # roll a dice
        current_value = dice()
        # if value=1 then remember what happened
        if current_value == 1:
            rolled_one = True
        # add the value to the sum
        total_sum += current_value
    # if you previously rolled a 1 then return 1
    if rolled_one:
        return 1
    # otherwise return the final sum
    else:
        return total_sum
1 голос
/ 05 августа 2020

Вы возвращаетесь внутри while l oop, это завершит l oop.

переместите ваш оператор return за пределы while l oop

Edit:

Переместить вызов функции кубика в пределах while l oop. В текущем состоянии вашего кода он бросит кости только один раз, а затем проверит этот бросок num_rolls раз.

также вы возвращаете total_sum == 1, это вернет True или False не уверен если это предусмотрено

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