Python - Два итерационных цикла, не выплевывающих все правильные ответы - PullRequest
0 голосов
/ 09 января 2012

Может кто-нибудь сказать мне, что не так с этим кодом. Предполагается перечислить комбинации коробок самородков (6,9, 20 штук) для ряда самородков. Однако некоторые решения не рассчитываются.

def boxes_nuggets(nuggets):

    if nuggets < 6: print "there are no sizes for less than 6 nuggets"
    else:
        for numSmall in range(0, nuggets/6+1):
            for numMed in range(0, nuggets/9+1):
                numLarge = (nuggets - 6 * numSmall - 9 * numMed)/20
                if nuggets == numLarge * 20 + numMed * 9 + numSmall * 6:
                    print numLarge, "large boxes", numMed, "medium boxes", numSmall, "small boxes"

                elif numLarge < 0: return None

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Я думаю, вы хотите изменить свой код следующим образом:

if numLarge < 0:
    continue
if nuggets == numLarge * 20 + numMed * 9 + numSmall * 6:
    print ...

Итак, удалите elif numLarge < 0: return None и добавьте проверку на отрицательный numLarge перед печатью.

Проблема, с которой вы столкнулисьесли в первый раз numLarge становится отрицательным, вы возвращаетесь, что останавливает поиск остальных возможных ответов.

def boxes_nuggets(nuggets):
    if nuggets < 6: print "there are no sizes for less than 6 nuggets"
    else:
        for numSmall in range(nuggets/6+1):
            for numMed in range(nuggets/9+1):
                numLarge = (nuggets - 6 * numSmall - 9 * numMed)/20
                if numLarge < 0: continue
                if nuggets == numLarge * 20 + numMed * 9 + numSmall * 6:
                    print numLarge, "large boxes", numMed, "medium boxes", numSmall, "small boxes"
0 голосов
/ 10 января 2012

Хорошее использование вложенных циклов для расчета возможных комбинаций.Просто замените оператор return на оператор continue, чтобы удалить ошибку.Отдых выглядит хорошо для меня.

...