Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2020 20:32:18

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

выход из цикла

появится вывод исключения:

 Traceback (most recent call last):
    ...
pyinputplus.RetryLimitException

Офлайн

#2 Окт. 29, 2020 20:42:17

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

выход из цикла

не знаю, можно ли как-то от него избавиться, чтобы свой print указать вместо.

Офлайн

#3 Окт. 29, 2020 20:47:53

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

выход из цикла

clik



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#4 Окт. 29, 2020 23:23:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

выход из цикла

ffrr просто начал неправильно. Вместо того, чтобы сначала придумать программу, потом её полностью спроектировать и потом уже написать её код, он начал с самого последнего этапа и теперь не может нихрена сделать. Вот в этом вся проблема. Он допустил классическую ошибку новичка, который думает “чем быстрее я начну писать программу, тем быстрее я её напишу”.

Здесь писал, как спроектировать программу.
Здесь писал, как реализовать программу по её проекту.



Офлайн

#5 Окт. 30, 2020 10:06:34

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

выход из цикла

Ну я согласен конечно же с py.user.next, что так надо по фэншую поступать, но когда нет хорошего базового фундамента python и есть возможность вообще хоть что-то написать только время от времени, то и сразу можно писать скрипт. Потом со временем с появлением больших знаний, можно его переписать оптимизировав IMHO.

Офлайн

#6 Окт. 30, 2020 10:45:54

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

выход из цикла

ffrr
и есть возможность вообще хоть что-то написать только время от времени, то и сразу можно писать скрипт
И тогда как раз ты и будешь его писать и переписывать, потому что в нём постоянно будет что-то отваливаться или работать не совсем так, как надо. Поэтому кажущееся изначально коротким время растянется на много раз.



Офлайн

#7 Окт. 30, 2020 10:52:06

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

выход из цикла

да, я полагаю ты прав. Вот напишу этот скрипт по старинке, а со следующего уже начну по твоей методике, с чувством, с толком, с расстановкой…

Офлайн

#8 Окт. 30, 2020 11:22:46

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1393
Репутация: +  124  -
Профиль   Отправить e-mail  

выход из цикла

ffrr
Вот напишу этот скрипт по старинке
я тоже учусь,давай напишем твой скрипт вместе,а знающие поправят если что

Офлайн

#9 Окт. 30, 2020 11:33:15

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

выход из цикла

конечно, давай! я не против, вместе веселее))

Отредактировано ffrr (Окт. 30, 2020 11:33:48)

Офлайн

#10 Окт. 30, 2020 13:42:36

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

выход из цикла

Переписал скрипт, добавив функции:

  #!/usr/bin/env python3.8                                                                                        
                                                                                                                
import getpass                                                                                                  
import pymysql                                                                                                  
import hashlib                                                                                                  
import uuid                                                                                                     
import re                                                                                                       
import time                                                                                                     
import pyinputplus as pyip                                                                                      
import os                                                                                                       
from uuid import getnode as mac                                                                                 
                                                                                                                
test = 0                                                                                                        
                                                                                                                
print("-------------------------")                                                                              
print("<<<<<<<<<Welcome>>>>>>>>>")                                                                              
print("-------------------------")                                                                              
print("Please enter a username (after 3 unlucky attempts system will reboot)")                                  
                                                                                                                
def user():                                                                                                     
        global username                                                                                         
        username = pyip.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3)
                                                                                                        
def pazz():                                                                                             
        global password                                                                                 
        password = getpass.getpass(prompt="Enter secret password:")                                     
                                                                                                        
def maria():                                                                                            
        global data                                                                                     
        global db                                                                                       
 		db = pymysql.connect("hostname","user","pass","db")
        cursor = db.cursor()                                                                            
        cursor.execute("SELECT userID, password from permissions")                                      
        data = cursor.fetchone()                                                                                
                                                                                                                
maria()                                                                                                         
                                                                                                                
for i in range(3):                                                                                              
        test += 1                                                                                               
                                                                                                                
        user()                                                                                                  
                                                                                                                
        dbuser, dbpass = data                                                                                   
                                                                                                                
        if username == dbuser :                                                                                 
                pazz()                                                                                          
                                                                                                                
                if (hashlib.sha1(password.encode()).hexdigest() == dbpass):                                     
                        print(mac)                                                                              
                        print(dbuser)                                                                           
                        print("Authentication success")                                                         
                        break                                                                                   
                else:                                                                                           
                        print("Bad password")                                                                   
                        print(f"Left attempts=>{3-test}")                                                       
#                       print('System will reboot now...')                                                      
#                       time.sleep(3)                                                                   
#                       os.system("reboot")                                                             
                break                                                                                   
        else:                                                                                           
                print ("please try another username. This username is incorrect")                       
                                                                                          

Теперь 3 раза запрашивает если username неправильный:
 # ./auth.py 
-------------------------
<<<<<<<<<Welcome>>>>>>>>>
-------------------------
Please enter a username (after 3 unlucky attempts system will reboot)
Username (must be 12 numbers): 659605758502
please try another username. This username is incorrect
Username (must be 12 numbers): 659605758502
please try another username. This username is incorrect
Username (must be 12 numbers): 659605758502
please try another username. This username is incorrect

Как теперь реализовать проверку 3-х попыток для пароля при правильном username? Снова при помощи while: True или по другому можно? А то сейчас только 1 попытка проверки пароля:
 # ./auth.py 
 -------------------------
<<<<<<<<<Welcome>>>>>>>>>
-------------------------
Please enter a username (after 3 unlucky attempts system will reboot)
Username (must be 12 numbers): 659605758501
Enter secret password:
Bad password
Left attempts=>2

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version