В то время как цикл по списку?

У меня есть список чисел, и я хочу, чтобы после ввода 3 чисел они суммировались, если только одно из чисел не равно 13, тогда остальные числа будут недействительными и не будут суммироваться.

Так что, если список будет [1, 13, 2] конечная сумма будет 1.

total = 0
def lucky_sum():
    total = 0
    lucky_sum = []
    a = input("Input a number")
    b = input("Input a number")
    c = input("Input a number")
    lucky_sum.append(a)
    lucky_sum.append(b)
    lucky_sum.append(c)


while **What do I place here??** != 13:
    total += **and here**
    if i== 13:
        break
print total

lucky_sum()

3 ответа

Вы можете сделать это без использования цикла while:

for i in lucky_sum():
    if i == 13:
        break

    total += i

Изменить: как предлагается в комментарии, в lucky_sum добавить инструкцию возврата в конце.

Если бы вы действительно хотели, вы могли бы itertools.islice ограничить максимум 3, то версия с двумя аргументами iterтак что ваш код может стать:

from itertools import islice
print sum(islice(iter(lambda: input('Input Number: '), 13), 3))

Для простоты используйте цикл в вашем lucky_sum() 3 раза, если только введенное число не равно 13, в этом случае вырвитесь из цикла и верните сумму (по умолчанию ноль) или просто продолжайте добавлять числа, например:

def lucky_sum():
    total = 0
    for i in range(3):
        n = input('Input Number: ')
        if n == 13:
            break
        total += n
    return total

print lucky_sum()

Вы также можете сделать это с помощью sum() встроенный и itertools.takewhile ():

sum(itertools.takewhile(lambda i: i != 13, lucky_sum()))

sum() принимает итерацию и возвращает сумму, и takewhile() принимает итеративное значение и возвращает новое итерируемое значение, которое дает значения до тех пор, пока данный предикат не сработает

Это более эффективный способ сделать это, так как sum() очень быстро

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

import itertools

def lucky_sum():
    return [input("Input a number") for _ in range(3)]

total = sum(itertools.takewhile(lambda i: i != 13, lucky_sum()))

print(total)

Обратите внимание, что вместо этого вы можете использовать выражение генератора (обычные скобки вместо квадратных скобок), и тогда у пользователя будут запрашивать значения только до тех пор, пока он не введет 13 значение, или введите 3 значения, которые могут быть желательным поведением.

Другие вопросы по тегам