@ru_python

Страница 3121 из 9768
Давид
06.07.2017
18:53:41
это ужас

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

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

BlackAndOrange
06.07.2017
18:54:21
Стоп, чё там делают инпуты???

Я запутался

Почему при попытке логина мы меняем данные юзера??????

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

Давид
06.07.2017
18:54:42
Стоп, чё там делают инпуты???
чтоб можно было "вводить" логин и пароль

еще раз - что нужно-то?
прервать бесконечный цикл в случае else

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
И пробить стек?)
Ну это сколько раз надо неправильно пароль ввести, чтобы стек пробить

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
У меня есть неуловимое впечатление, что ты неправильно понял суть задания

Nikolay
06.07.2017
18:56:52
BlackAndOrange
06.07.2017
18:56:53
self.username и self.password — это параметры юзера

Скажем, если бы юзер был кирпичом, у него были бы параметры "форма" и "цвет"

Давид
06.07.2017
18:57:11
А зачем они тогда в __init__()?
не, я вначале сделал заданными их, по заданию. А потом решил попробовать то же задание, но уже посложнее

BlackAndOrange
06.07.2017
18:57:23
"Квадратный" и "красный"

То же самое с юзером

У него фиксированные юзернейм и пассворд

Они не меняются при каждом логине

Давид
06.07.2017
18:58:27
Они не меняются при каждом логине
фиксированные вот: username_check='john76', password_check='www0z0'

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?

BlackAndOrange
06.07.2017
19:00:39
А если в пароле есть \n?
Обычно это запрещено

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

BlackAndOrange
06.07.2017
19:00:56
Я бы вообще цикл вынес из класса + добавил sleep при неверной попытке
Да-да-да, но если переделывать именно этот код...

Semyon
06.07.2017
19:01:09
ну вот только надо чтобы log_in не было методом класса User, а так да
Ну назови его check_auth или что то в таком духе

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
Пока у тебя не совсем верное представление, похоже

Давид
06.07.2017
19:02:43
@TheStardustCrusader Прочитай ещё раз что-нибудь на тему "что такое классы и с чем их едят"
да просто я вот как думал: почему бы не иметь возможности вносить свои данные в класс

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
Но это не надо делать в методе log_in()
вот сейчас попробую вынести)

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

Хотя ок секьюрити никакой

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

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

Давид
06.07.2017
19:08:00
Эмпирическое правило: ввод-вывод и sleep() надо из класса выносить
Тоже к этому пришел. В классе, увы, не все так гладко, как я этого хотел...

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

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
В ней у тебя Hello world без классов не выйдет написать
Борщ борщ равно нью борщфэктори от борщтемплейт точка креэйтборщ

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

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

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

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

BlackAndOrange
06.07.2017
19:13:42
И кстати если уж следовать - то поля надо с _ начать
И писать для них get/set или объявлять как property. Но это не обязательно.

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
Если программа хочет поменять юзеру пароль, она имеет право это сделать

Страница 3121 из 9768