Python3練習-輸入用戶名輸入三次錯誤即鎖定該用戶,提示登錄失敗


介紹一下會用到的一些內容

Python3打開、讀取和關閉文件的方法

1 file = open('D:\passwd.txt','r')        #打開文件
2 content = file.readlines()                #讀入全部文件內容,並存儲到變量推薦使用字典
3 file.close()                              #關閉打開的文件
4 print (content)                           #打印變量內容

#打開文件后一定要記得關閉文件,因為在量少的時候對程序的影響不大,但是在程序長時間運行和文件量很大的情況下會嚴重影響性能。確保所有數據都寫至磁盤。這稱為刷新輸出(flushing),這點非常重要。

 

往文件中寫入內容的方法:

注意:使用訪問模式w時,Python會打開指定的文件來完成寫。如果這個文件已經存在,則會清空他現有的內容,也就是完全清除,要追加一個文件,需要使用訪問模式a。要打開一個文件來完成讀和寫(不清除原有內容),需要使用w+。如果想打開一個文件完成寫,但是這個文件並不存在,那么首先會為你創建這個文件,然后在打開文件進行行寫。

r:以只讀方式打開文件,文件不存在則報錯

r+:以讀寫方式打開文件,文件不存在則報錯會覆蓋文件內容

 

a:以追加的方式打開文件,不會覆蓋原有內容。(附加寫入功能)

a+:以追加的方式打開文件,不會覆蓋原有內容(附加讀寫功能,但是我在操作過程沒看出有讀的效果,我在去實驗下)

 

w:文件不存在則新建,存在則將原有內容清空(附加只寫功能)

w+:文件不存在則新建,存在則將原有內容清空(附加讀寫功能)


 

w+與r+的區別

r+:可讀可寫,若文件不存在則報錯,會覆蓋原有內容

w+:可讀可寫,若文件不存在則創建,會覆蓋原有內容

 

r+與a+區別

r+:可讀可寫,會覆蓋原有內容,但不是覆蓋全部內容

a+:追加內容,不會覆蓋原有內容

總結:

如果文件不存在會報錯的有r和r+

打開文件只可寫不可讀的有a和w

會覆蓋現有文件的有r、w和w+

可讀可寫的有r+、w+、a+


 

方法一:

1 file1 = open('D:\socket.txt','w')                       #以寫入的模式打開文件
2 print ("Norwegian Blues stun easily",file = file1)     #默認換行,把寫入的內容打印到file1(這是一個變量)中
3 file1.close()                                              #關閉文件
li = ["1","2","3"]                                       
fiel = open('D:\socket.txt','a+')
print (li,file = fiel)

方法二:

1 file1 = open('D:\socket.txt','a+')                       #以追加的模式打開文件
2 file1.write("bbbbbb\n")                                   #寫入內容並換行
3 file1.close()                                              #關閉文件

方法三:

1 file1 = open('D:\socket.txt','a+')                       #以追加的模式打開文件
2 file1.writelines("bbbbbb\n")                                   #寫入內容並換行
3 file1.close()                                              #關閉文件

解析write和writelines的區別:

write寫入的是一個字符串內容,不能寫入多個比如字典和列表用write寫入就會報錯

writelines的參數是序列,比如列表,它會迭代寫入文件

方法三:

fiel = open('D:\socket.txt','a+')               #以追加的模式打開文件
fiel.write("1212")                               #寫入內容
fiel.close()                                     #關閉文件

 

字典的使用

d = {}                  #創建字典
print (d)               #打印字典
d["root"] = '/bin/bash' #給字典添加內容
d["httpd"] = '/sbin/nologin'
print (d)                   #打印字典全部內容
print (d["root"])          #打印字典key對應的內容
name = "root"
if name in d.keys():       #判斷是否在字典中
    print (name+"在字典中")

d["nfs"] = "/sbin/nologin"  #字典內容的添加方法
print (d)
del d["nfs"]                #字典內容的刪除方法
print (d)

d.pop("root")               #字典的彈出和列表的pop用法一樣
print (d)
d = {}                  #創建字典
print (d)               #打印字典
d["root"] = '/bin/bash' #給字典添加內容
d["httpd"] = '/sbin/nologin'
print (d)                   #打印字典全部內容
print (d["root"])          #打印字典key對應的內容
name = "root"
if name in d.keys():       #判斷是否在字典中
    print (name+"在字典中")

d["nfs"] = "/sbin/nologin"  #字典內容的添加方法
d["ftp"] = "/sbin/nologin"
print (d)
test1 = d.popitem()             #彈出末尾的內容
print (d)
print (test1)

split()函數的使用

str = "1234,567\n90"
print (str)

str1 = str.split(',')           #以逗號為分隔符,分割內容,分割后的內容存入列表
print (str1)                    #打印列表
str = "1234,567\n90"
print (str)
print ("==================")
str1 = str.split(',')[0]           #以逗號為分隔符,分割內容,只取出第一部分
print (str1)                    #打印列表
str = "1234,567\n90"
print (str)
print ("==================")
str1 = str.split(',')           #以逗號為分隔符,分割內容,只取出第一部分
print (str1)                    #打印列表
str2 = str.split('\n')[1]       #以換行符為分隔符,取出第二部分
print (str2)

 

 

實驗要求:

輸入用戶名密碼

認證成功后顯示歡迎信息

輸錯三次后鎖定用戶

 

流程思路:

打開用戶和密碼文件並存入字典

打開鎖文件存入字典

提示用戶輸入用戶名和密碼

如果輸入錯誤再次提示輸入,重復三次,三次之后將該用戶鎖定,緊有保存的用戶名

 

#coding = utf-8

password = {}                                   #創建字典
passwd = open('D:\passwd.txt','r')            #以只讀的模式打開,確保文件存在否則報錯
for n in passwd.readlines():                   #讀取文件的全部內容
    k = n.split('\t')[0]                       #以tab為分割取出用戶名
    #print(k)
    v = n.split('\t')[1]                       #以tab為分割取出密碼
    #print (v)
    m = v.split('\n')[0]                       #以回車為分割符,取出密碼的完整內容
    #print (m)
    password[k] = m
#print (password)                              #如果要看執行效果,就把那幾個#去掉
passwd.close()

lock = {}
look = open('D:\socket.txt','r')
for i in look.readlines():
    k1 = i.split('\n')[0]
    lock[k1]=k1
    print (k1)
print (lock)
count = 0
look.close()
username = input("請輸入用戶名:")
if username in lock.keys():
    print ("該用戶已被鎖定:")
else:
    pwd = input("請輸入密碼:")
    if pwd == password[username]:
        print ("登錄成功")
    else:
        while count < 2:
            pwd = input("請輸入密碼:")
            if pwd == password[username]:
                break
            count+=1
        else:
            sok = open("D:\socket.txt",'a+')
            sok.write(username+'\n')
            sok.close()
            print ("登錄次數過多,用戶被鎖定")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM