@marrikozakura

Как завершить программу при получение отрицательного ответа?

регистрируем пользователя, заполняем input, если логин похож то просим еще раз зарегистрироваться, если нет то дальше продолжаем регистрацию и сохраняем все это .txt файл
в .txt файл есть пример похожего логина

print('''Войти или зарегистрироваться
	yes      no ''')
q = input(':   ')
p = 'yes'
if q == p:
	print ('Введите пароль и логин')
else:
	print('Всего доброго')

тут нужно завершить при случае с else
если if выполнено, продолжать дальше 

a = input("логин: ")
b = input("пароль: ")

r = open('/home/aimira/python/python3/week2files/datebase.txt', 'r')
for x in r:
	if 'qwerty' in x:----------тут еще нужно добавит несколько логинов для сравнение
		print('такой логин уже существует.')
	else: 
		print('Продолжайте регистрацию')	

r.close()

r = open('/home/aimira/python/python3/week2files/datebase.txt', 'a')
a = input("логин: ")
b = input("пароль: ")
c = input("потвердите пароль: ")
if b == c:
	print('Реситрация прошло успешно')
else:
	print('введите пароль еще раз')
	b = input("пароль: ")
	c = input("потвердите пароль: ")
	print('Реситрация прошло успешно')

r.write(f"name: {a}, password: {b}")
r.close()


тут второй вариант
t = open ("database.txt", "w")
t.write("login : kamikadze , password : lololo , login: jojopa , password : hohoho , ")
t.close()
f = open("database.txt", "r")
x = (f.read().split())
n = input("Input login: ")
for i in range(int(len(x))):
    if x[i] == n:
        print("login is busy")
        log = input("input new login: ")
        pas = input("input new password: ")
        pas2 = input("repeat new passwort again: ")
        if pas == pas2:
            print("registrated new user")
            l = open("database.txt", "a")
            l.write(f"login : {log}, password : {pas},\n")
            l.close()
    else:
        pas = input("input new password: ")
        pas2 = input("repeat new passwort again: ")
        if pas == pas2:
            print("registrated new user")
            l = open("database.txt", "a")
            l.write(f"login : {log}, password : {pas},\n")
            l.close()
            break
f.close()


ответ из терминала
Input login: sdgfhjk
input new password: kl;l
repeat new passwort again: hjkl;
input new password: ghjkl;'
repeat new passwort again: jhkl;
input new password: hjkl;
repeat new passwort again: hjkl;
registrated new user

в чем тут ошибка?
Traceback (most recent call last):
  File "prob2_1.py", line 60, in <module>
    l.write(f"login : {log}, password : {pas},\n")
NameError: name 'log' is not defined
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Hitreno
UPD: Табуляция появилась, проблема в if/else - если срабатывает if, то не срабатывает else, логично. Возможно и обратное - if не сработал и сработал else, но и if и else вместе сработать не могут. В этом и проблема - переменная log назначается в if, тогда как используется в else, поэтому если if не срабатывает переменная просто не создаётся. Попробуйте вынести объявление переменных, используемых в else, из конструкции if/else

1. Вы не сделали табуляцию кода в вопросе, без чего не понять, где у вас заканчивается if, else и прочее.

2. Если вы посмотрите на вывод терминала, который вы привели в конце, то там чёрным по белому написано - name 'log' is not defined (переменной с именем log не существует). Из-за проблем с табуляцией точную проблему назвать не могу.

P.S. Использование для базы данных txt файл является очень странным решением. В питоне предустановлена библиотека sqlite3, позволяющая делать все работы с данными в вашем скрипте намного проще и корректнее. Вы же используете для записи данных деревянный забор и тупой гвоздь вместо предназначенной для этого бумаги.
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Сразу видно того, кто пытается программировать, не прочитав ни одного учебника. Про области видимости всегда рассказывают в самом начале, при объяснений условных выражений и циклов.
Ответ написан
Комментировать
@GeneD88
QA
n = input("Input login: ")
for i in range(int(len(x))):
    if x[i] == n:
        print("login is busy")
        log = input("input new login: ")
        pas = input("input new password: ")
        pas2 = input("repeat new passwort again: ")
        if pas == pas2:
            print("registrated new user")
            l = open("database.txt", "a")
            l.write(f"login : {log}, password : {pas},\n")
            l.close()
    else:
        pas = input("input new password: ")
        pas2 = input("repeat new passwort again: ")
        if pas == pas2:
            print("registrated new user")
            l = open("database.txt", "a")
            l.write(f"login : {log}, password : {pas},\n")
            l.close()
            break


У вас скрипт идет в else - здесь он не знает переменную log, т.к. она не задана в этом блоке. Вынести переменную log за пределы if\else.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы