Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2020 09:25:43

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
                                                                                          
t = 4                                                                  
                                             
print("-------------------------")   
print("<<<<<<<<<Welcome>>>>>>>>>")                           
print("-------------------------")
print("Please enter a username (after 3 unlucky attempts system will reboot)")
while True:                                                               
        t -= 1                                             
        if t > 0:                            
                     
                username = pyip.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3)
                                
                db = pymysql.connect("hostname","user","pass","db")
       
                # prepare a cursor object using cursor() method
                cursor = db.cursor()          
                cursor.execute("SELECT userID, password from permissions")                                              
                data = cursor.fetchone()                                                                                
                                                                                                                        
                dbuser, dbpass = data                                                                                   
                #dbuser, dbpass = str(data[0]), data[1]                                                                 
                                                                                                                        
                # disconnect from server                                                                                
                db.close()                                                                                              
                                                                                                                        
                if username == dbuser :                                                                         
                        while True:                                                                                     
                                password = getpass.getpass(prompt="Enter secret password:")                     
                                                                                                                        
                                if (hashlib.sha1(password.encode()).hexdigest() == dbpass):                             
                                        print("Authentication success")                                                 
                                        break                                                                           
                                else:                                                                                   
                                        print("Bad password")                                                           
                                                                                                                        
                                t -= 1                                                                                  
                                if t > 0:                                                                               
                                        print('Left attempts=>', t)                                                     
                                else:                                                                                   
                                        print('System will reboot now...')                                              
                                        time.sleep(3)                                                                   
        #                               os.system("reboot")                                                             
                                        break                                                                           
                else:                                                                                                   
                        print ("please try another username. This username is incorrect")                               
                        continue                                                           
                break                                                                      

не срабатывает лимит limit=3 на ввод username и скрипт просто подвисает после 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): 659605758503
please try another username. This username is incorrect
Username (must be 12 numbers): 659605758505
please try another username. This username is incorrect

Офлайн

#2 Окт. 29, 2020 09:56:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

 while True:       # 1                                                        
        t -= 1           # 2                                  
        if t > 0:      # 3
              # bla-bla              

Вот как вы думаете, что будет выполнять ваша программа, если на шаге 3 переменная t окажется меньше нуля?



Офлайн

#3 Окт. 29, 2020 10:45:43

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

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

наверное подвиснет)). Нужен в конце еще блок else: ? Так он вроде присутствует у меня…

Отредактировано ffrr (Окт. 29, 2020 10:47:11)

Офлайн

#4 Окт. 29, 2020 14:45:31

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

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

ffrr
Так он вроде присутствует у меня…
неа



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

есчщо

Офлайн

#5 Окт. 29, 2020 14:56:22

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

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

где здесь еще не хватает else?

                 if username == dbuser :                                                                         
                        while True:                                                                                     
                                password = getpass.getpass(prompt="Enter secret password:")                     
                                                                                                                        
                                if (hashlib.sha1(password.encode()).hexdigest() == dbpass):                             
                                        print("Authentication success")                                                 
                                        break                                                                           
                                else:                                                                                   
                                        print("Bad password")                                                           
                                                                                                                        
                                t -= 1                                                                                  
                                if t > 0:                                                                               
                                        print('Left attempts=>', t)                                                     
                                else:                                                                                   
                                        print('System will reboot now...')                                              
                                        time.sleep(3)                                                                   
        #                               os.system("reboot")                                                             
                                        break                                                                           
                else:                                                                                                   
                        print ("please try another username. This username is incorrect")                               
                        continue                                                           
                break                                                                      

Офлайн

#6 Окт. 29, 2020 14:59:48

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

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



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

есчщо

Офлайн

#7 Окт. 29, 2020 15:05:32

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

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

и что из этого следует? у меня так указано:

                 else:                                                                                                   
                        print ("please try another username. This username is incorrect")                               
                        continue                                                                                        
                break 

неверная конструкция?

Офлайн

#8 Окт. 29, 2020 15:05:56

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

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

это не считая что второе if t > 0: не понятно для чего



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

есчщо

Офлайн

#9 Окт. 29, 2020 15:08:02

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить 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
t = 4                                                                  
print("-------------------------")   
print("<<<<<<<<<Welcome>>>>>>>>>")                           
print("-------------------------")
print("Please enter a username (after 3 unlucky attempts system will reboot)")
while True:                                                               
    t -= 1                                             
    if t > 0:                            
        username = pyip.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3)
        db = pymysql.connect("hostname","user","pass","db")
        # prepare a cursor object using cursor() method
        cursor = db.cursor()          
        cursor.execute("SELECT userID, password from permissions")                                              
        data = cursor.fetchone()                                                                                
        dbuser, dbpass = data                                                                                   
        #dbuser, dbpass = str(data[0]), data[1]                                                                 
        # disconnect from server                                                                                
        db.close()                                                                                              
        if username == dbuser :                                                                         
            while True:                                                                                     
                password = getpass.getpass(prompt="Enter secret password:")                     
                if (hashlib.sha1(password.encode()).hexdigest() == dbpass):                             
                    print("Authentication success")                                                 
                    break                                                                           
                else:                                                                                   
                    print("Bad password")                                                           
                t -= 1                                                                                  
                if t > 0:                                                                               
                    print('Left attempts=>', t)                                                     
                else:                                                                                   
                    print('System will reboot now...')                                              
                    time.sleep(3)                                                                   
                    #os.system("reboot")                                                             
                    break                                                                           
        else:                                                                                                   
            print ("please try another username. This username is incorrect")                               
            continue                                                           
        break
    else:
        print('вот здеся обработка первого if')
зы хорошим советом будет избегать таких портянок разбивайте на функции иначе можно легко запутаться



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

есчщо

Отредактировано AD0DE412 (Окт. 29, 2020 15:10:29)

Офлайн

#10 Окт. 29, 2020 15:12:09

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

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

AD0DE412
это не считая что второе if t > 0: не понятно для чего
для того, чтобы и username и пароль спрашивало по 3 раза, дальше выполнялся бы reboot машины…

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version