В то время как цикл по списку?
У меня есть список чисел, и я хочу, чтобы после ввода 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 значения, которые могут быть желательным поведением.