Через флаги:
violator_songs = [
['World in My Eyes', 4.86],
['Sweetest Perfection', 4.43],
['Personal Jesus', 4.56],
['Halo', 4.90],
['Waiting for the Night', 6.07],
['Enjoy the Silence', 4.20],
['Policy of Truth', 4.76],
['Blue Dress', 4.29],
['Clean', 5.83]
]
li = []
special_list = []
qty = int(input('Сколько песен выбрать? '))
print()
count = 1
ok = True
while ok:
for _ in range(qty):
if ok:
song = input('Введите название ' + str(count) + ' песни: ')
for elem in violator_songs:
li.extend(elem)
if song not in li:
print('Ошибка. Такой песни в плейлисте нет!')
ok = False
break
else:
special_list.append(song)
count += 1
summ = 0
for i_time in violator_songs:
if i_time[0] in special_list:
summ += i_time[1]
print('\nОбщее время звучания песен:', float(round(summ, 2)))
Проблема в том, что дано четырехзначное число, а в итоговом выводе у вас сумма трех переменных.
Ваша программа проходит с число 2020, так число содержит два нуля.
Разберем вашу программу.
Возьмем число n = 1234:
Командой 1234 % 10 мы берем последнее число, то есть 4, и присваиваем это значение переменной a. a = 4
Далее целочисленным делением мы убираем последнюю цифру этого числа, то есть остается 123, и присваиваем это значение переменной b.
Следующая команда целочисленного деления уже отсекает последние 2 цифры, то есть остается 1, переменная с = 1.
Следующая команда дает остаток от деления b на 100, то есть 123 % 100 = 23. d = 23
Следующая команда печатает сумму полученных переменных, то есть
4 + 1 + 23 = 28, но начальное число = 1234, и сумма его цифр явно не равна 28(1 + 2 + 3 + 4 = 10)
Альтернативой может стать последовательное целочисленное деление числа n на 10, то есть:
a = n % 10 #4
n //= 10 #123
b = n % 10 #3
n //= 10 # 12
c = n % 10 # 2
n //= 10 #1
print(a + b + c + n) # 10
А вообще возможности языка позволяют оформить программу в 1 строку:
print(sum(map(int, input(
Через флаги:
violator_songs = [
['World in My Eyes', 4.86],
['Sweetest Perfection', 4.43],
['Personal Jesus', 4.56],
['Halo', 4.90],
['Waiting for the Night', 6.07],
['Enjoy the Silence', 4.20],
['Policy of Truth', 4.76],
['Blue Dress', 4.29],
['Clean', 5.83]
]
li = []
special_list = []
qty = int(input('Сколько песен выбрать? '))
print()
count = 1
ok = True
while ok:
for _ in range(qty):
if ok:
song = input('Введите название ' + str(count) + ' песни: ')
for elem in violator_songs:
li.extend(elem)
if song not in li:
print('Ошибка. Такой песни в плейлисте нет!')
ok = False
break
else:
special_list.append(song)
count += 1
summ = 0
for i_time in violator_songs:
if i_time[0] in special_list:
summ += i_time[1]
if ok:
print('\nОбщее время звучания песен:', float(round(summ, 2)))
break
Проблема в том, что дано четырехзначное число, а в итоговом выводе у вас сумма трех переменных.
Ваша программа проходит с число 2020, так число содержит два нуля.
Разберем вашу программу.
Возьмем число n = 1234:
Командой 1234 % 10 мы берем последнее число, то есть 4, и присваиваем это значение переменной a. a = 4
Далее целочисленным делением мы убираем последнюю цифру этого числа, то есть остается 123, и присваиваем это значение переменной b.
Следующая команда целочисленного деления уже отсекает последние 2 цифры, то есть остается 1, переменная с = 1.
Следующая команда дает остаток от деления b на 100, то есть 123 % 100 = 23. d = 23
Следующая команда печатает сумму полученных переменных, то есть
4 + 1 + 23 = 28, но начальное число = 1234, и сумма его цифр явно не равна 28(1 + 2 + 3 + 4 = 10)
Альтернативой может стать последовательное целочисленное деление числа n на 10, то есть:
Возьмем число n = 1234:
a = n % 10 #4
n //= 10 #123
b = n % 10 #3
n //= 10 # 12
c = n % 10 # 2
n //= 10 #1
print(a + b + c + n) # 10
А вообще возможности языка позволяют оформить программу в 1 строку:
print(sum(map(int, input(