Как усовершенствовать данное? Годится ли данный код вообще? Если нет, как упростить?

Для списка целых чисел вычислить произведение первого, третьего и шестого положительных элементов и определить их номера в списке.

Список целых чисел вводите через пробел.

Список должен состоять из 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 шт):

Автор решения: DiMithras

Я не претендую на хороший код, но давай пройдёмся по твоему:

  1. Последняя строчка "попробуйте ещё раз". Но возврата к вводу нет, получается надо программу перезапускать.

  2. Дико длинный if.
    Логику if-else лучше заворачивать максимально компактно. Если ёлка разрастается, значит надо делать как-то иначе. В случае с выводом ошибок, можно создать словарь под ошибки, а ещё лучше использовать встроенные средства Python и библиотеки. Иначе запутаешь себя и тех кто будет читать.
    Логику внутри можно выводить в функции.

  3. int(s[i]) делается очень смело, нет проверки на то, что пользователь вводит именно числа.

  4. k[:6:] это для чего? Следующей строчкой опять slices идут, абсолютно лишняя строчка.

  5. 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
→ Ссылка