Делал что то типо "Языка" на Python и почемуто выдаёт ошибку если два раза запустить код с input()

Делал что то вроде своего ЯП (скорее прогу для написания кода с переводом Python на русский).

import tkinter as tk
from tkinter import Menu
from tkinter import filedialog
from tkinter import scrolledtext
import os
import time
import pyperclip
import sys

theme_dark = {
    'bg': '#282c34', #'#282c34'
    'fg': "#ffffff", #"#61aeee"
    'selectbg': '#44475a',
    'selectfg': '#ffffff',
    'menu_bg': '#36393f',  
    'menu_fg': '#ffffff',  
    'menu_active': '#4e5460' 
}

theme_light = {
    'bg': '#ffffff',
    'fg': '#000000',
    'selectbg': '#c0c0c0',
    'selectfg': '#000000',
    'menu_bg': '#f0f0f0',
    'menu_fg': '#000000',
    'menu_active': '#e0e0e0'
}

#Команды Udaw
вывод=print
ввод=input
ждать=time.sleep
да=True
нет=False
отчисть=os.system("cls")
#С большой буквы
Вывод=print
Ввод=input
Ждать=time.sleep
Да=True
Нет=False
Отчисть=os.system("cls")
#Команды Udaw

# Функция открытия
def open_file():
    file = filedialog.askopenfilename(
        title="Открыть файл",
        filetypes=(("Скрипты", "*.uda *.txt"), ("Все файлы", "*.*"))
    )
    if file:
        print(f"Выбран файл: {file}")
        with open(file, 'r') as f:
            text_area.delete(1.0, tk.END)
            text_area.insert(1.0, f.read())

# Функция сохранения файла
def save_file():
    file = filedialog.asksaveasfilename(
        defaultextension=".uda",
        filetypes=(("Файлы Udaw", "*.uda"), ("Текстовые файлы", "*.txt"), ("Все файлы", "*.*")),
        title="Сохранить файл"
    )
    if file:
        try:
            with open(file, 'w') as f:
                f.write(text_area.get(1.0, tk.END))
            print(f"Файл сохранен: {file}")
        except Exception as e:
            print(f"Ошибка при сохранении файла: {str(e)}")

def copy():
    pyperclip.copy(text_area.get(1.0, tk.END))

def paste():
    text_area.delete(1.0, tk.END)  # Удаляем всё
    text_area.insert(1.0, pyperclip.paste())

def cut():
    pyperclip.copy(text_area.get(1.0, tk.END))
    text_area.delete(1.0, tk.END)  # Удаляем всё

# Функция конвертации кода в Python
def convert():
    # Получаем код из текстового поля
    Code = text_area.get(1.0, tk.END)
    Code = Code.replace("если", "if")
    Code = Code.replace("цикл", "while")
    Code = Code.replace("импорт", "import")
    Code = Code.replace("выход", "exit()")
    Code = Code.replace("вывод", "print")
    Code = Code.replace("ввод", "input")
    Code = Code.replace("ждать", "time.sleep")
    Code = Code.replace("да", "True")
    Code = Code.replace("нет", "False")
    Code = Code.replace("отчистить", """os.system("cls")""")
    Code = "import time\nimport os\n" + Code

    file = filedialog.asksaveasfilename(
        defaultextension=".py",
        filetypes=(("Файлы Python", "*.py"), ("Текстовые файлы", "*.txt"), ("Все файлы", "*.*")),
        title="Сохранить файл"
    )
    if file:
        try:
            with open(file, 'w') as f:
                f.write(Code)
            print(f"Файл сохранен: {file}")
        except Exception as e:
            print(f"Ошибка при сохранении файла: {str(e)}")

# Функция выполнения кода
def run_code():
    try:
        # Получаем код из текстового поля
        Code = ""
        Code = text_area.get(1.0, tk.END)

        if Python.get():
            #Блокировка Python скриптов А
            Code = Code.replace("if", "error")
            Code = Code.replace("elif", "error")
            Code = Code.replace("else", "error")
            Code = Code.replace("while", "error")
            Code = Code.replace("print", "error")
            Code = Code.replace("input", "error")
            Code = Code.replace("import", "error")
            Code = Code.replace("time.sleep", "error")
            Code = Code.replace("exit()", "error")
            #Блокировка Python скриптов В
            Code = Code.replace("If", "error")
            Code = Code.replace("Elif", "error")
            Code = Code.replace("Else", "error")
            Code = Code.replace("While", "error")
            Code = Code.replace("Print", "error")
            Code = Code.replace("Input", "error")
            Code = Code.replace("Import", "error")
            Code = Code.replace("Time.sleep", "error")
            Code = Code.replace("Exit()", "error")
        #Активация Udaw скриптов A
        Code = Code.replace("если", "if")
        Code = Code.replace("цикл", "while")
        Code = Code.replace("импорт", "import")
        Code = Code.replace("выход", "raise KeyboardInterrupt()")
        Code = Code.replace("ждать", "time.sleep")
        Code = Code.replace("да", "True")
        Code = Code.replace("нет", "False")
        #Активация Udaw скриптов B
        Code = Code.replace("Если", "if")
        Code = Code.replace("Цикл", "while")
        Code = Code.replace("Импорт", "import")
        Code = Code.replace("Выход", "raise KeyboardInterrupt()")
        
        os.system("cls")
        # print(Code)
        exec(Code)
        Code=""

    except KeyboardInterrupt:
        print()
        os.system("cls")
    except Exception as e:
        # Выводим ошибку в текстовое поле
        print("Ошибка")

# Функция открытия окна справки

# Создаем главное окно
root = tk.Tk()
root.title("IDLE Udaw 0.2.0")
root.geometry("600x500")

full_screen = tk.BooleanVar()
dark_theme_var = tk.BooleanVar()
Python = tk.BooleanVar()
Python.set(True)

def fullscreen():
    if full_screen.get():
        root.state('zoomed')
    else:
        root.state('normal')

def update_fullscreen_state(event):
    # Проверяем текущее состояние окна
    if root.wm_state() == 'zoomed':
        full_screen.set(True)  # Ставим галочку
    else:
        full_screen.set(False)  # Снимаем галочку

current_theme = theme_light  # Начальная тема

# Функция переключения темы
def toggle_theme():
    global current_theme
    if current_theme == theme_light:
        current_theme = theme_dark
    else:
        current_theme = theme_light

    # Применяем тему к окну
    root.config(bg=current_theme['bg'])
    
    # Применяем тему к текстовому полю
    text_area.config(
        bg=current_theme['bg'],
        fg=current_theme['fg'],
        selectbackground=current_theme['selectbg'],
        selectforeground=current_theme['selectfg']
    )

    # Применяем тему к меню
    main_menu.config(
        bg=current_theme['menu_bg'],
        fg=current_theme['menu_fg'],
        activebackground=current_theme['menu_active'],
        activeforeground=current_theme['fg']
    )

    # Обновляем тему для главного меню и всех подменю
    update_menu_theme(main_menu)
    update_menu_theme(file_menu)
    update_menu_theme(edit_menu)
    update_menu_theme(view_menu)
    update_menu_theme(help_menu)

    
def update_menu_theme(menu):
    menu.config(
            bg=current_theme['menu_bg'],
            fg=current_theme['menu_fg'],
            activebackground=current_theme['menu_active'],
            activeforeground=current_theme['fg']
    )


root.bind("<Configure>", update_fullscreen_state)

# Справочник Udaw
def help_window_Udaw():
    help_window = tk.Toplevel(root)
    help_window.title("Справка")
    help_window.geometry("320x300")

    # Создаем текстовый виджет для справки
    help_text = scrolledtext.ScrolledText(
        help_window,
        width=50,
        height=15,
        font=("Consolas", 12)
    )
    help_text.pack(padx=10, pady=10)
    
    # Вставляем текст справки
    help_text.insert(tk.END, """Справочник Udaw:

вывод()
ввод()
ждать()
отчистить
выход
если ...:
цикл ...:
импорт ... (библиотеки Python)
Да=True
Нет=False""")
    help_text.config(state=tk.DISABLED)

# Новости
def help_window_News():
    help_window = tk.Toplevel(root)
    help_window.title("Справка")
    help_window.geometry("320x300")

    # Создаем текстовый виджет для справки
    help_text = scrolledtext.ScrolledText(
        help_window,
        width=50,
        height=15,
        font=("Consolas", 12)
    )
    help_text.pack(padx=10, pady=10)
    
    # Вставляем текст справки
    help_text.insert(tk.END, """IDLE Udaw 0.2.0!
1.Добавлен функционал всем кнопкам в верхней панели
2.Добавлена тёмная тема""")
    help_text.config(state=tk.DISABLED)

# Добавляем текстовое поле с прокруткой
text_area = scrolledtext.ScrolledText(  # Исправлено имя переменной
    root,
    width=80,
    height=30,
    font=("Consolas", 12)
)
text_area.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)

#Создаем главное меню
main_menu = Menu(root)
root.config(menu=main_menu)


# Создаем подменю "Файл"
file_menu = Menu(main_menu, tearoff=0)
file_menu.add_command(label="Открыть", command=open_file)
file_menu.add_command(label="Сохранить", command=save_file)
file_menu.add_separator()
file_menu.add_command(label="Конвертировать в Python", command=convert)
file_menu.add_checkbutton(label="Блокировка Python", variable=Python)
file_menu.add_separator()
file_menu.add_command(label="Выход", command=root.quit)

# Добавляем подменю "Файл" в главное меню
main_menu.add_cascade(label="Файл", menu=file_menu)

# Создаем подменю "Правка"
edit_menu = Menu(main_menu, tearoff=0)
edit_menu.add_command(label="Копировать", command=copy)
edit_menu.add_command(label="Вставить", command=paste)
edit_menu.add_command(label="Вырезать", command=cut)

# Добавляем подменю "Правка" в главное меню
main_menu.add_cascade(label="Правка", menu=edit_menu)

# Создаем подменю "Вид"
view_menu = Menu(main_menu, tearoff=0)
view_menu.add_checkbutton(label="Полноэкранный режим", variable=full_screen, command=fullscreen)
view_menu.add_checkbutton(label="Темная тема", variable=dark_theme_var, command=toggle_theme)

# Добавляем подменю "Вид" в главное меню
main_menu.add_cascade(label="Вид", menu=view_menu)

# Добавляем подменю "Запустить" в главное меню
main_menu.add_cascade(label="Запустить", command=run_code)

# Добавляем подменю "Справка" в главное меню
help_menu = Menu(main_menu, tearoff=0)
help_menu.add_cascade(label="Справочник Udaw", command=help_window_Udaw)
help_menu.add_cascade(label="Новости", command=help_window_News)

# Добавляем подменю "Справка" в главное меню
main_menu.add_cascade(label="Справка", menu=help_menu)

# Запускаем основной цикл
root.mainloop()

Почему то если написать код с ввод() или как в адекватном Python input() то первый раз он срабатывает, но второй раз выдаёт ошибку, Что делать? Если между запусками код хоть немного изменять то он будет адекватно работать.


Ответы (0 шт):