Сумма, пока сумма не превышает значение - PullRequest
0 голосов
/ 25 мая 2018

У меня есть список карт определенного значения, который идет от 0,5, 1-2 ... 7.Мне нужно выбирать каждый раз, когда цикл выбирает случайную карту из списка, и делать сумму значений столько раз, сколько возможно, но сумма не должна превышать sum < 7.5, и каждый раз, когда мне нужно вынуть карту из списка.

Я пробовал следующим образом: (переключатель - это функция, которая находит значение карты и суммирует его с sum)

    while sum < 7.5:
        card_picked = cards[random.randrange(len(cards))]
        sum = switcher(card, sum)
        card_index = cards.index(card)
        cards.pop(card_index)

Но это дает мне каждый раз, когда значение больше7,5.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вместо того, чтобы брать по одной карте за раз, вы можете просто перетасовать все свои карты и всегда pop() первую - это лучше, чем выбрать одну случайную и впоследствии получить ее индекс:

import random

cards = [.5,1,2,3,4,5,6,7]

# shuffle the whole cards list into a new random configuration
pickings = random.sample(cards,k=len(cards)) 

s = 0
c = []
while True: # they eventually add up to more then 7.5 so no need to check for empty list
    card = pickings.pop(0) # get first
    if s + card < 7.5:     # can add?
        s += card            # do so
        c.append(card)       # and to list so we see the cards collected
    else:
        print("cant take ", card) # cant, break while
        break

print ("Sum:",s)
print(c)

Некоторые пробеги:

cant take  4
Sum: 3.5
[3, 0.5]

cant take  3
Sum: 5
[4, 1]

cant take  7
Sum: 2.5
[0.5, 2]
0 голосов
/ 25 мая 2018

Вы добавляете в sum (что, кстати, было бы лучше переименовать, потому что вы затеняли имя встроенной функции sum() там) и , затем , в следующий развы попадаете на вершину цикла, вы проверяете, превысил ли он предел.Таким образом, вы выходите из цикла, если и только если он уже перешел на .Поэтому, естественно, вы всегда будете выходить из цикла в состоянии sum > 7.5.Вы можете переформулировать ваше условие while так, чтобы оно оценивалось после того, как новое значение карты стало известно, но до обновления sum.Или вы можете оставить все как есть, но отслеживать последнюю добавленную карту: затем, как только вы выйдете из цикла, вычтите ее значение из sum и поместите карту обратно в колоду.

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