Форум сайта python.su
44
for i in range(3): print(f"чета 3 раза. №{i}")
и вставьте ссылку на его url Офлайн
0
Спасибо, действительно else не было в конце скрипта. Теперь у меня почему-то в бесконечном цикле печатает:
print('вот здеся обработка первого if')
Офлайн
44
#!/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') break
for i in range(3): print(f"чета 3 раза. №{i}") else: print('все')
и вставьте ссылку на его url Отредактировано AD0DE412 (Окт. 29, 2020 15:31:48)
Офлайн
0
А как тогда можно посчитать и выводить количество оставшихся попыток ввода? ранее было
print('Left attempts=>', t)
Отредактировано ffrr (Окт. 29, 2020 15:32:27)
Офлайн
44
#вариант 1 test = 0 for i in range(3): test += 1 print(f"чета 3 раза. №{i}") #предположим получилось со 2 попытки сча сэмулируем это if test == 2: print(test) break #вариант 2 test = 0 for i in range(3): test = i print(f"чета 3 раза. №{i}") #предположим получилось со 2 попытки сча сэмулируем это if test == 1: print(test) break #вариант 3 for i in range(3): print(f"чета 3 раза. №{i}") #предположим получилось со 2 попытки сча сэмулируем это if i == 1: print(i) break
и вставьте ссылку на его url Отредактировано AD0DE412 (Окт. 29, 2020 15:54:32)
Офлайн
0
А что здесь означает
№{i}
for i in range(3): print(f"чета 3 раза. №{i}") else: print('все')
Офлайн
44
и вставьте ссылку на его url Офлайн
0
................................ def user(): username = pyip.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3) return username def pazz(): password = getpass.getpass(prompt="Enter secret password:") return password for i in range(3): test += 1 # username = pyip.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3) user() 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 if username == dbuser : # password = getpass.getpass(prompt="Enter secret password:") pazz() .........................
# ./auth.py ------------------------- <<<<<<<<<Welcome>>>>>>>>> ------------------------- Please enter a username (after 3 unlucky attempts system will reboot) Username (must be 12 numbers): 659605758501 Traceback (most recent call last): File "./auth.py", line 58, in <module> if username == dbuser : NameError: name 'username' is not defined
Отредактировано ffrr (Окт. 29, 2020 16:34:43)
Офлайн
44
https://nuancesprog.ru/p/9211/
и вставьте ссылку на его url Отредактировано AD0DE412 (Окт. 29, 2020 17:06:26)
Офлайн
124
ffrrа если пользователь в строчке
для того, чтобы и username и пароль спрашивало по 3 раза, дальше выполнялся бы reboot машины…
username = pyip.inputNum('Username (must be 12 numbers): ', min=111111111111, max=999999999999, limit=3)
Офлайн