@PlushFly
3дешник

В чем я не прав, что не могу закрыть цикл?

Всем привет. В программирование я еще тот новичок. Был написан несложный код, задачей которого было менять вводимый текст на нужный исправленный текст и выдача в виде карточки(в конце все заработало) - но задался вопросом, а возможно ли сделать так что бы по окончанию действий код возвращался автоматически на начало и заново предлагал вводить текст. Как я понял с прочитанного это обращаться к "циклу". Но тут что то пошло не так.
Взял кусок из кода:
repeat = True
while repeat == True:
    name = input('Название модели: ')
    style = input('Разделы: ')
    while type(name) != str:
        try:
            name = str(name)
            style = str(style)
        except ValueError:
            print('Не верно')
            print('Не верно!')
    #Декор #3Dпанель
    while style != '#Декор #3Dпанель':
        try:
            style = 'Декор 3D панель'
            if 'Декор 3D панель' in style:
                style = '#Декор #3Dпанель'
        except ValueError:
            print('Вводи разделы!')
            style = input('Разделы: ')
            print()
    #Декор #Вазы
    while style != '#Декор #Вазы':
        try:
            style = 'Декор Вазы'
            if 'Декор Вазы' in style:
                style = '#Декор #Вазы'
        except ValueError:
            print('Вводи разделы!')
            style = input('Разделы: ')
            print()
    finish = name + '\n' + style
    print(finish)

И вроде бы он возвращается но не хочет теперь делать изначальную функцию - заменять вводный текст на исправленный и в конце выдавать его - исходя из совпадений по вводу. Выдавая при этом всегда последний результат.
Буду весьма благодарен если направите в нужном направление и прошу извинить, за беспокойство
  • Вопрос задан
  • 130 просмотров
Пригласить эксперта
Ответы на вопрос 4
@amimamoya
Попробуй занести свой код в функцию, а в конце сделать бесконечный цикл по её запуску. Типа такого:
def fun():
    Твой код
a = True
while a == True:
    fun()
Ответ написан
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Твой код работает так, как ты написал.
В начале цикла программа принимает name и style.
Затем прога упорно проверяет, не строка ли это.
Это всегда строка, input() всегда возвращает строку.

Затем прога явно присваивает переменной style значение 'Декор 3D панель', потом сразу же '#Декор #3Dпанель'.
При этом условие while выполняется и прога переходит дальше, на следующий while.
Там то же самое происходит с «Декор вазы».

В итоге программа в принципе ничего, кроме «Декор вазы», печатать не может.

Оборачивать этот код в функцию бесполезно, вам надо разобраться, как работают элементы программы, описать словами, что должна программа (и каждый её элемент) принимать на вход и возвращать на выходе. И затем это описать средствами языка. Если с языком плохо - либо изучать язык, либо нанимать исполнителя.
Ответ написан
Комментировать
SoreMix
@SoreMix Куратор тега Python
yellow
repeat = True
while repeat == True:

можно просто
while True:

while type(name) != str:
        try:
            name = str(name)
            style = str(style)
        except ValueError:
            print('Не верно')
            print('Не верно!')

1. Зачем здесь while?
2. Этот код никогда не выполнится.

while style != '#Декор #3Dпанель':
while style != '#Декор #Вазы':

Здесь зачем while?

try:
            style = 'Декор 3D панель'
            if 'Декор 3D панель' in style:
                style = '#Декор #3Dпанель'
        except ValueError:
            print('Вводи разделы!')
            style = input('Разделы: ')
            print()

Зачем try... except?

style = 'Декор 3D панель'
if 'Декор 3D панель' in style:

Выполнится всегда, зачем это? Можно заменить на
style = 'Декор 3D панель'
style = '#Декор #3Dпанель'

Только в чем тогда логика - непонятно

возможно ли сделать так что бы по окончанию действий код возвращался автоматически на начало и заново предлагал вводить текст

Он так и делает у вас.

заменять вводный текст на исправленный и в конце выдавать его - исходя из совпадений по вводу

Непонятно, что именно вы хотите. Поиск из какого-то списка похожего словосочетания?
Советую пересмотреть всю логику программы, избавиться от лишний try...except, которые никогда не сработают, и удалить лишние while
Ответ написан
@PlushFly Автор вопроса
3дешник
Всем огромное спасибо. Учел, почитал, переписал заработало.
Еще раз спасибо за огромное за ответы и терпение.

Gпример правки может кому то тоже пригодиться:
repeat = True
while repeat:
    name_models = input('Название модели: ')
    section = input('Разделы: ')
    style = input('Стиль: ')
    tegs = input('Контрольные слова: ')
    number = input('Номер модели: ')

    #Декор
    if 'Декор 3D панель' in section:
        section = '#Декор #3Dпанель'

    elif 'Декор Багеты' in section:
        section = '#Декор #Багеты'

    elif 'Декор Вазы' in section:
        section = '#Декор #Вазы'
    final_text = name_models + "\n" + section + "\n" + style
    print(final_text)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы