Ошибка с выходом из цикла, при пустом вводе в input проигрывается не нужный для этого код.

EMINAMAI

Новичок
Пользователь
Май 8, 2020
4
0
1
appdirs 1.4.3
attrs 19.3.0
cached-property 1.5.1
Cerberus 1.3.2
certifi 2019.11.28
chardet 3.0.4
colorama 0.4.3
distlib 0.3.0
geojson 2.5.0
idna 2.9
installer 0.1.1
orderedmultidict 1.0.1
packagebuilder 0.1.0
packaging 20.3
pathlib 1.0.1
pep517 0.8.2
pip 20.0.2
pip-shims 0.5.1
plette 0.2.3
py 1.8.1
pyowm 2.10.0
pyparsing 2.4.6
pyTelegramBotAPI 3.6.7
python-dateutil 2.8.1
requests 2.23.0
requirementslib 1.5.5
setuptools 41.2.0
six 1.14.0
toml 0.10.0
tomlkit 0.5.11
urllib3 1.25.8
vistir 0.5.0
wheel 0.34.2
yaspin 0.16.0

Python:
Программа для записи паролей

#импортируем нужные модули
from colorama import init
from colorama import Back, Fore
import os

init()

#цикл для повторения кода при завершении одного раза
while True:
    try:
        wyw = str(input("Что хочешь?(Список, Создать, Просмотреть, Выйти): "))
        if wyw == "Создать" or wyw == "создать":
            #Создание текстовых файлов
            NameDock1 = str(input("Введи название документа: "))
            o_Dock = NameDock1 + ".txt"
            w_Dock = open(o_Dock, "w")
            UN = str(input("UserName: "))
            PW = str(input("Password: "))
            Mail = str(input("Mail: "))
            ED = str(input("ExtraData: "))
            w_Dock.write(NameDock1 + "\n" + f"UserName: {UN}\n" + f"Password: {PW}\n" + f"Mail: {Mail}\n" + f"ExtraData: {ED}\n" + "----------------------")
            w_Dock.close()
        elif wyw == "Список" or wyw == "список":
            #Просмотр паролей(которые записаны) (Не завершено)
            for root, dirs, files in os.walk("."):
                for filename in files:
                    print(filename)
        elif wyw == "Просмотреть" or "просмотреть":
            #Просмотр текстовых файлов(То место которое запускается если ничего не ввести и нажать enter)
            NameDock2 = str(input("Введи название документа: "))
            o_Dock2 = NameDock2 + ".txt"
            r_Dock = open(o_Dock2, "r")
            data = r_Dock.read()
            print(data)
            r_Dock.close()
        elif wyw == "Выйти" or "выйти":
            #Это мои попытки выйти из цикла и завершить программу(сделано на 0%)
            exit
        else:
            print(Fore.RED, "Ошибка x0001: Команда не найдена.", Fore.WHITE)
            #ловим ошибку FileNotFoundError(Если человек введёт не существующий файл)
            except FileNotFoundError:
            print(Fore.RED, "Ошибка x0000: Файл не найден.", Fore.WHITE)

#blank = input()

Проблема в двух вещах:
    1.Если ничего не ввести, то запустится код прочтения файла
    2.Проблема с командой "Выход". Я пытался сделать все варианты(Которые знал), но ничего не получилось
Пожалуйста помогите мне с этими проблемами...
 

borntohack

змееуст
Команда форума
Модератор
Апр 22, 2020
78
62
18
39
Москва, РФ
1.кроется в коде
Python:
elif wyw == "Просмотреть" or "просмотреть":
Поскольку строка всегда True - выполняется именно оно, если не введено что-то раньше.
Правильный вариант:
Python:
elif wyw == "Просмотреть" or wyw = "просмотреть":
#еще лучше проверить в списке:
elif wyw in ["Просмотреть","просмотреть"]
#а совсем хорошо в вашем юзкейсе - сделать регистронезависимое сравнение, например приведя строку к нижнему регистру:
elif wyw.lower() == "просмотреть":

2. Частично, до туда не доходит по причинам из п.1
правильный вариант остановки цикла - break
правильный вариант выхода из программы - sys.exit(0) #Здесь 0 - это exit status. Говорит об успешности завершения программы
 
  • Мне нравится
Реакции: EMINAMAI

EMINAMAI

Новичок
Пользователь
Май 8, 2020
4
0
1
1.кроется в коде
Python:
elif wyw == "Просмотреть" or "просмотреть":
Поскольку строка всегда True - выполняется именно оно, если не введено что-то раньше.
Правильный вариант:
Python:
elif wyw == "Просмотреть" or wyw = "просмотреть":
#еще лучше проверить в списке:
elif wyw in ["Просмотреть","просмотреть"]
#а совсем хорошо в вашем юзкейсе - сделать регистронезависимое сравнение, например приведя строку к нижнему регистру:
elif wyw.lower() == "просмотреть":

2. Частично, до туда не доходит по причинам из п.1
правильный вариант остановки цикла - break
правильный вариант выхода из программы - sys.exit(0) #Здесь 0 - это exit status. Говорит об успешности завершения программы
Спасибо, помогло.
P.S. я так и знал, что причина 1-ой проблемы в моей тупости...
 

Форум IT Специалистов