Найти - Пользователи
Полная версия: выход из цикла
Начало » Python для новичков » выход из цикла
1 2 3 4 5
ffrr
появится вывод исключения:
 Traceback (most recent call last):
    ...
pyinputplus.RetryLimitException
ffrr
не знаю, можно ли как-то от него избавиться, чтобы свой print указать вместо.
AD0DE412
clik
py.user.next
ffrr просто начал неправильно. Вместо того, чтобы сначала придумать программу, потом её полностью спроектировать и потом уже написать её код, он начал с самого последнего этапа и теперь не может нихрена сделать. Вот в этом вся проблема. Он допустил классическую ошибку новичка, который думает “чем быстрее я начну писать программу, тем быстрее я её напишу”.

Здесь писал, как спроектировать программу.
Здесь писал, как реализовать программу по её проекту.
ffrr
Ну я согласен конечно же с py.user.next, что так надо по фэншую поступать, но когда нет хорошего базового фундамента python и есть возможность вообще хоть что-то написать только время от времени, то и сразу можно писать скрипт. Потом со временем с появлением больших знаний, можно его переписать оптимизировав IMHO.
py.user.next
ffrr
и есть возможность вообще хоть что-то написать только время от времени, то и сразу можно писать скрипт
И тогда как раз ты и будешь его писать и переписывать, потому что в нём постоянно будет что-то отваливаться или работать не совсем так, как надо. Поэтому кажущееся изначально коротким время растянется на много раз.
ffrr
да, я полагаю ты прав. Вот напишу этот скрипт по старинке, а со следующего уже начну по твоей методике, с чувством, с толком, с расстановкой…
xam1816
ffrr
Вот напишу этот скрипт по старинке
я тоже учусь,давай напишем твой скрипт вместе,а знающие поправят если что
ffrr
конечно, давай! я не против, вместе веселее))
ffrr
Переписал скрипт, добавив функции:
  #!/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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB