
Nikolay
06.07.2017
18:53:41

Давид
06.07.2017
18:53:41
это ужас

BlackAndOrange
06.07.2017
18:53:47
А смысл рекурсивно вызывать, если нужно изменить данные?

Google

Denis
06.07.2017
18:53:58
Там инпуты до цикла

Давид
06.07.2017
18:53:59

BlackAndOrange
06.07.2017
18:54:21
Стоп, чё там делают инпуты???
Я запутался
Почему при попытке логина мы меняем данные юзера??????

Aragaer
06.07.2017
18:54:36
еще раз - что нужно-то?

Давид
06.07.2017
18:54:42

Nikolay
06.07.2017
18:54:54
а еще не называй переменную logging

Сергей
06.07.2017
18:55:00
class User():
def __init__(self, username, password):
self.username = username
self.password = password
def log_in(self, username_check='john76', password_check='www0z0',
login_attempts=0, greeting='', logging=True):
while logging:
self.username = input('Please enter your username: ')
self.password = input('Please enter your password: ')
if ((self.username.lower() == username_check) and
(self.password == password_check)):
logging = False
greeting = ('Successful. Logging in. . .' +
'-------------------' +
"You've made " + str(login_attempts) +
" login attempts." +
'-------------------' +
"Welcome back, " + self.username)
print(greeting)
break
else:
login_attempts += 1
print('\nAn error loccured. Please try again . . .'+ '\n')
my_user = User('username', 'password')
my_user.log_in()

Aragaer
06.07.2017
18:55:01
break

Semyon
06.07.2017
18:55:13

Давид
06.07.2017
18:55:16
break
это просто конец цикла

Google

Aragaer
06.07.2017
18:55:21
а что надо?

BlackAndOrange
06.07.2017
18:55:25
Какую роль вообще выполняют self.username и self.password, если мы их меняем при каждом логине?

Давид
06.07.2017
18:55:37
а мне нужно, чтоб вновь вернулся в строку "введите логин и пароль"

Сергей
06.07.2017
18:55:55

Denis
06.07.2017
18:56:05
И пробить стек?)
Ну это сколько раз надо неправильно пароль ввести, чтобы стек пробить

Давид
06.07.2017
18:56:05

BlackAndOrange
06.07.2017
18:56:17
А зачем они тогда в __init__()?

Denis
06.07.2017
18:56:20
sys.setrecursionlimit(1000000), чтобы наверняка

Nikolay
06.07.2017
18:56:24
тру посоны такие вещи генераторами делают

BlackAndOrange
06.07.2017
18:56:29
У меня есть неуловимое впечатление, что ты неправильно понял суть задания

/dev
06.07.2017
18:56:38

Nikolay
06.07.2017
18:56:52

BlackAndOrange
06.07.2017
18:56:53
self.username и self.password — это параметры юзера
Скажем, если бы юзер был кирпичом, у него были бы параметры "форма" и "цвет"

Давид
06.07.2017
18:57:11

BlackAndOrange
06.07.2017
18:57:23
"Квадратный" и "красный"
То же самое с юзером
У него фиксированные юзернейм и пассворд
Они не меняются при каждом логине

Давид
06.07.2017
18:58:27

Google

Semyon
06.07.2017
18:58:35
Эээээээээээм

Давид
06.07.2017
18:58:35
а те как раз уже то, что вводишь

Semyon
06.07.2017
18:58:51
Простите но это какой то аутизм
Сделай так: создавайте объект юзера (устанавливая у него его имя и пароль при создании) + метод логин - которые проверяет валидность полей

BlackAndOrange
06.07.2017
18:59:49
На мой взгляд, эта функция должна выглядеть как-то так:
def log_in(self):
success = False
while not success:
username = input()
password = input()
if username == self.username and password == self.password:
# Нормально вошли
else:
# Говно, выдаём ошибку и пробуем ещё раз
self.* — это ПОЛЯ класса, свойства юзера
Они НЕ должны меняться при входе

Denis
06.07.2017
19:00:22
А если в пароле есть \n?

Semyon
06.07.2017
19:00:26

BlackAndOrange
06.07.2017
19:00:39

Aragaer
06.07.2017
19:00:43
ну вот только надо чтобы log_in не было методом класса User, а так да

BlackAndOrange
06.07.2017
19:00:56

Vladimir
06.07.2017
19:01:07

Semyon
06.07.2017
19:01:09

Aragaer
06.07.2017
19:01:31
тогда вынести оттуда цикл

Semyon
06.07.2017
19:01:32
И пускай bool возвращает успешно или нет

BlackAndOrange
06.07.2017
19:01:50
Вообще, в идеале как-то так:
def check_auth(self, login, password):
return (login == self.login) and (password == self.password)

Давид
06.07.2017
19:01:59
пойду-ка переделаю, авось что выйдет

BlackAndOrange
06.07.2017
19:02:01
То есть совсем в идеале ещё хеши, но это выходит за рамки задачи
@TheStardustCrusader Прочитай ещё раз что-нибудь на тему "что такое классы и с чем их едят"

Google

BlackAndOrange
06.07.2017
19:02:28
Пока у тебя не совсем верное представление, похоже

Semyon
06.07.2017
19:02:30

Давид
06.07.2017
19:02:43

BlackAndOrange
06.07.2017
19:02:43

Semyon
06.07.2017
19:03:03

BlackAndOrange
06.07.2017
19:03:04
Но это не надо делать в методе log_in()
Для этого стоит сделать что-то вроде edit_data()

Admin
ERROR: S client not available

Давид
06.07.2017
19:03:20

Semyon
06.07.2017
19:03:29
В плане сделать проверку пароля и логина с задержкой.
Хотя ок секьюрити никакой

BlackAndOrange
06.07.2017
19:03:48
Хм, почему ?
Эмпирическое правило: ввод-вывод и sleep() надо из класса выносить

Semyon
06.07.2017
19:04:12

BlackAndOrange
06.07.2017
19:07:22
В идеале, они не должны иметь побочных эффектов, кроме тех, единственной целью которых являются побочные эффекты

Давид
06.07.2017
19:08:00

BlackAndOrange
06.07.2017
19:08:58
Ты не в Яве, тебе не нужно фигачить классами на всё происходящее. Класс — хранилище данных плюс методы их обработки, всё. Все остальное выноси.

Давид
06.07.2017
19:09:30

BlackAndOrange
06.07.2017
19:09:52
В ней у тебя Hello world без классов не выйдет написать

Google

Semyon
06.07.2017
19:10:11

BlackAndOrange
06.07.2017
19:10:28

Semyon
06.07.2017
19:10:52

BlackAndOrange
06.07.2017
19:11:14

Denis
06.07.2017
19:11:28
Можно сделать колбэк onLoginError и просить его в конструкторе, по дефолту ничего не днлать

Semyon
06.07.2017
19:11:58

BlackAndOrange
06.07.2017
19:12:25
Не знаю, на мой взгляд из класса надо вынести всё, что можно вынести

Semyon
06.07.2017
19:13:06
И кстати если уж следовать - то поля надо с _ начать

BlackAndOrange
06.07.2017
19:13:08
Всякими слипами и колбэками должна заниматься вызывающая сторона

Denis
06.07.2017
19:13:27

BlackAndOrange
06.07.2017
19:13:42

Denis
06.07.2017
19:13:51
Фу жаба

BlackAndOrange
06.07.2017
19:13:56

Denis
06.07.2017
19:14:04
Не в этом языке

BlackAndOrange
06.07.2017
19:14:09
Но мне всегда лень это делать
В любом языке, это универсальный паттерн

Semyon
06.07.2017
19:14:25
Фу жаба
Тут это оправданоб как бы читать и писать в поле пароля без спроса - не дело

BlackAndOrange
06.07.2017
19:14:28
Для поддержания корректного состояния класса

Denis
06.07.2017
19:14:36
Зачем писать проперти там, где они не нужны?

BlackAndOrange
06.07.2017
19:14:51

Denis
06.07.2017
19:15:05
Если программа хочет поменять юзеру пароль, она имеет право это сделать