Как усовершенствовать данное? Годится ли данный код вообще? Если нет, как упростить?
Для списка целых чисел вычислить произведение первого, третьего и шестого положительных элементов и определить их номера в списке.
Список целых чисел вводите через пробел.
Список должен состоять из 6 или более положительных элементов.
k = []
s = input('Введите список целых чисел: ').split()
if s:
for i in range(len(s)):
s[i] = int(s[i])
if s[i] > 0:
t = s.index(s[i])
k.append(t)
if len(k) >= 6:
q = k[:6:]
tilt = q[0:3:2] + q[5:6]
c1 = int(tilt[0])
c2 = int(tilt[1])
c3 = int(tilt[2])
c0 = s.pop(c3) * s.pop(c2) * s.pop(c1)
print('Индексы 1-го, 3-го, 6-го элементов: ', *tilt)
print('Произведение 1-го, 3-го, 6-го элементов: ', c0)
else:
print('Недостаточно положительных элементов в списке.')
else:
print('Попробуйте ещё раз.')
Ответы (1 шт):
Я не претендую на хороший код, но давай пройдёмся по твоему:
Последняя строчка "попробуйте ещё раз". Но возврата к вводу нет, получается надо программу перезапускать.
Дико длинный
if.
Логикуif-elseлучше заворачивать максимально компактно. Если ёлка разрастается, значит надо делать как-то иначе. В случае с выводом ошибок, можно создать словарь под ошибки, а ещё лучше использовать встроенные средства Python и библиотеки. Иначе запутаешь себя и тех кто будет читать.
Логику внутри можно выводить в функции.int(s[i])делается очень смело, нет проверки на то, что пользователь вводит именно числа.k[:6:]это для чего? Следующей строчкой опять slices идут, абсолютно лишняя строчка.q[5:6]зачем? Можно же простоq[5].
Ну и я позволил себе немного похулиганить ниже.
import math
while(True):
s = input('\r\nВведи числа через пробел: ').split(' ')
if all(i.lstrip('-').isdigit() for i in s):
s = [int(i) for i in s]
k = list(filter(lambda x: x>=0, s))
if len(k) > 5:
break
else:
print('\r\nНедостаточно положительных элементов в списке.\r\nПопробуй ещё раз…')
else:
print('\r\nВводить можно только числа! ? \r\nПопробуй ещё раз…')
k = [k[i] for i in [0,2,5]]
print('\r\nИндексы 1-го, 3-го, 6-го элементов: {}'.format([s.index(i) for i in k]))
print('Произведение 1-го, 3-го, 6-го элементов: {}'.format(math.prod(k)))
Вывод:
Введи числа через пробел: 1 2 3 4 5
Недостаточно положительных элементов в списке.
Попробуй ещё раз…
Введи числа через пробел: не хочу!
Вводить можно только числа! ?
Попробуй ещё раз…
Введи числа через пробел: 151 -47 6874 12 -7 4578 -1 458 13 11
Индексы 1-го, 3-го, 6-го элементов: [0, 3, 8]
Произведение 1-го, 3-го, 6-го элементов: 23556