python第三天 變量 作業


作業1,模擬登陸:
1. 用戶輸入帳號密碼進行登陸
2. 用戶信息保存在文件內
3. 用戶密碼輸入錯誤三次后鎖定用戶

使用文件:user_file.txt  用戶列表文件。     格式:{'張三':'123abc','lili':'eeettt','王五':'www123','calmyan':'yanyan','Aelx':'tttt'}

     lock_name.txt 被鎖定的用戶文件 。    格式:['calmyan']

先上一下流程圖:

下面的詳細代碼:

 1 #!usr/bin/env python
 2 #-*-coding:utf-8-*-
 3 # Author calmyan
 4 #import getpass
 5 user_file=open("user_file.txt",'r',encoding='utf-8')#打開用戶列表文件
 6 lock_name=open('lock_name.txt','r+',encoding='utf-8')#打開鎖定用戶列表文件
 7 user_list=eval(user_file.readline())#轉換用戶文件中的字符串
 8 lock_list=eval(lock_name.readline())#轉換鎖定用戶文件中的字符串
 9 
10 def userchar(_user_name):#檢測用戶名的函數
11     while True:
12         #_user_name=(input('請輸入用戶名:'))
13         if _user_name in user_list and _user_name not in lock_list:#判斷用戶是否存在並正常
14             return True#存在返回真
15             break
16         elif _user_name in user_list and _user_name  in lock_list:#判斷用戶是否被鎖定
17             print('您的用戶已經被鎖定,請聯系商家解鎖!')
18             break
19         else:
20             print('您輸入用戶不存在,請先注冊')
21             break
22 
23 def out():#退出時相關文件操作函數
24     global bool#定義退出循環條件全局變量
25     bool=False
26     lock_name.close()#關閉鎖定用戶文件
27     user_file.close()#關閉用戶列表文件
28 
29 def confirm():#退出確認函數
30     qu=input("是否重新登陸!按\033[31;1mY/y\033[0m重新登陸,否則退出:")
31     if qu=='Y'or qu=='y':
32         pass
33     else:
34         print("您已經退出!" )
35         out()
36 
37 bool=True#定義退出循環條件變量
38 while bool:
39     _user_name=(input('請輸入用戶名:'))
40     if userchar(_user_name):#運行檢測用戶名的函數判斷
41         count=3#定義鎖次數
42         while count>0 :#如果密碼錯誤次數超過退出密碼輸入
43             #password=getpass.getpass('請輸入密碼:')
44             password=input('請輸入密碼:')
45             if password==user_list[_user_name]:#密碼通過驗證結束循環
46                 print("密碼通過驗證")
47                 out()
48                 print("歡迎您 \033[32;1m%s\033[0m  你已經登陸成功!" % _user_name)
49                 break
50             else:
51                 count -=1#次數減少
52                 print("密碼錯誤請重試,剩余:\033[31;1m%s\033[0m次! "% count)
53         else:
54             print("\033[31;1m超出所試次數,賬戶已鎖定!請聯系商家!\033[0m")
55             lock_list.append(_user_name)#將用戶名加出鎖定列表
56             lock_name.seek(0)#指針移動到開頭,以免產生多個元組
57             lock_name.write(str(lock_list))#寫入鎖定用戶文件
58             lock_name.tell()#獲取當前指針,以免產生多個元組
59             #qu=input("是否重新登陸!按Y重新登陸,否則退出:")
60             # if qu=='Y':
61             #     pass
62             # else:
63             #     print("您已經退出!" )
64             #     out()
65             confirm()
66             continue#退回到輸入用戶名的位置
67 
68     else:#如果用戶名出錯新來過
69         confirm()
70         pass
71 
72 #print("歡迎您 \033[32;1m%s\033[0m  你已經登陸成功!" % _user_name)
73 #if password==user_list[]
View Code

 

經過測試,覺得沒毛病!

而且多了1、提示功能:用戶不存提示,用已經被定提示,剩下重試密碼次數提示!

    2、可選擇是否出退!

 

 

 

 1 ####>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 2 #變量名.capitalize()
 3 #
 4 #capitalize()                   <把字符串的第一個字符改為大寫>
 5 #casefold()                     <把整個字符串的所有的字符變成小寫>
 6 #center(width)                  <將字符串居中,並使用空格填充至長度width的新字符串>
 7 #count(sub[,start[,end]])       <返回sub在字符串里邊出現的次數,start和end參數表示范圍,可選>
 8 #encode(encoding='utf-8',errors='strict')           <以encoding指定的編碼格式對字符串進行編碼>
 9 #endswith(sub[,start[,end]])    <檢查字符串是否sub字符串結束,如果是返回true,否則返回false,
10 #                                    start和end參數表示范圍,可選 >
11 #expandtabs([tabsize=8])        <把字符串的tab符號(\t)轉換為空格,字符默認的空格數是tabsize=8>
12 #find(sub[,start[end]])         <檢測sub是否包含在字符串中,如果有返回索引值,否則返回-1,
13 #                                    start和end參數表示范圍,可選>
14 #index(sub[,start[,end]])       <跟find方法一樣,不過如果sub不在string中會產生異常>
15 #isalunum()                     <如果字符串至少有一個字符都是字母或數字則返回true,否則返回false>
16 #isalpha()                      <如果字符串至少有一個字符並且所有字符都是字母則返回true,否則返回false>
17 #isdecimal()                    <如果字符串只包含十進制數字則返回true,否則返回false>
18 #isdingt()                      <如果字符串中只包含數字,則返回true,否則返回false>
19 #islower()                      <如果字符串中至少包含一個區分大小寫的字符,並且這些字符都是小寫,
20 #                                    則返回ttue,否則返回false>        
21 #isnumeric()                    <如果字符串中只包含數字字符,則返回true,否則返回false>
22 #isspace()                      <如果字符串中只包含空格,則返回true,否則返回false>
23 #istile()                       <如果字符串是標題化(所有的單詞都是以大寫開始,其余字母均小寫)
24 #                                     則返回ttue,否則返回false>
25 #isupper()                      <如果字符串至少包含一個區分大小寫的字符,並且這些字符都是大寫,
26 #                                  則返回ttue,否則返回false>
27 #join(sub)                      <以字符串作為分隔符,插入到sub中所有的字符之間>
28 #ljust(width)                   <返回一個左對齊的字符串,並且使用空格填充至長度為width的新字符串>
29 #lower()                        <轉換字符串中所有大寫字符為小寫>
30 #lstrip()                       <去掉字符串左邊的所有空格>
31 #partition(sub)                 <找到子字符串sub,把字符串分成一個3元組(pre_sub,sub,fol_sub),
32 #                                    如果字符串中不包含sub則返回('原字符串','','')>
33 #replace(old,new[,count])       <把字符串中的old子字符串替換成new子字符串,
34 #                                     如果count指定,則替換不超過count次>
35 #rfind(sub[,start[,end]])       <類似於find()方法,不過是從右邊開始查找>
36 #rindex(sub[start[,end]])       <類似於index()方法,不過是從右邊開始>
37 #rjust(width)                   <返回一個右對齊的字符串,並且使用空格填充至長度為width的新字符串>
38 #rpartion(sub)                  <類似於partion()方法,不過是從右邊開始查找>
39 #rstrip()                       <刪除字符串末尾的空格>
40 #splis(sep=none,maxsplit=-1)    <不帶參數默認是以空格為分隔符切片字符串,如果maxsplit參數有設置,
41 #                                     則僅分隔maxsplit個子字符串,返回切片后的子字符串拼接列表>
42 #splitlines(([keepends]))       <按照'\n'分隔,返回一個包含各行作為元素的列表,
43 #                                     如果keepends參數指定,則返回前keepends行>
44 #startswith(prefix[,start[,end]])<檢查字符串是否以prefix開頭,是則返回true,否則返回false,
45 #                                      start和end參數可以指定范圍檢查,可選>
46 #strip([chars])                 <刪除字符串前邊和后邊所有的空格,chars參數可以指定刪除的字符,可選>
47 #swapcase()                     <翻轉字符串中的大小寫>
48 #title()                        <返回標題化(所有的單詞都以大寫開始,其余字母均小寫)>
49 #####>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
50 #translate(table)               <根據table的規則(可以由str.maketrans('a','b')定制)轉換字符串只的字符>
51 #                                     >>> str1 = 'ssssssaaaaasssss'
52 #                                     >>> str1.translate(str.maketrans('s','b'))
53 #                                         'bbbbbbaaaaabbbbb'
54 ######>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
55 #upper()                        <轉換字符串中的所有小寫字符為大寫>
56 #zfill(width)                   <返回長度為width的字符串,原字符串右對齊,前邊用0填充>
57 #############################################################################################################
變量常用的方法
 1 ################################################################################
 2 #以下代碼復制到python(3.6.2rc2)下 按F5 可以正常執行,對比學習。QQ:124111294歡迎
 3 #字符串的操作特性:不可修改
 4 #
 5 #常用變量演示
 6 name = 'my name is alex'
 7 print(name.capitalize())
 8 print(name.count('a'))
 9 print(name.center(50,'-'))
10 print(name.endswith('ex'))
11 print(name.expandtabs(tabsize=30))
12 print(name[name.find('name'):])
13 print(name.format(name='alex',year=23))
14 print(name.format_map( {'name':'alex','year':12} ))
15 print('ab23'.isalnum())
16 print('abA'.isalpha())
17 print('1A'.isdecimal())
18 print('1A'.isdigit())
19 print('a 1A'.isidentifier())#判斷是否合法的標識符
20 print('33'.isnumeric())
21 print('33'.isspace())
22 print('My Name IS '.istitle())
23 print('My Name IS '.isprintable())#設備終端使用
24 print('My Name IS '.isupper())
25 print('+'.join(['1','2','3']))
26 print( name.ljust(23,'*'))
27 print( name.rjust(25,'-'))
28 print( 'Alex'.lower())
29 print( 'Alex'.upper())
30 print( '\n Alex'.lstrip())
31 print( 'Alex \n'.rstrip())
32 print( '    Alex\n'.strip())
33 
34 print('---隨機密碼----')
35 h = str.maketrans('abcdefli','123$@456')#隨機密碼
36 print('alex li'.translate(h))
37 print('                 ')
38 
39 print('---替換----')
40 print('alex li lllll'.replace('l','L',4))
41 print('                 ')
42 
43 print('---尋找下標號----')
44 print('alex li'.rfind('l'))
45 print('                 ')
46 
47 print('---按字符串分割----')
48 print('al ex lil'.split('l'))
49 print('                 ')
50 
51 print('---按換行\n分割----不同系統的換行')
52 print('1+2\n+3+4'.splitlines())
53 print('                 ')
54 
55 print('---按換行\n分割----')
56 print('Alex Li'.swapcase())
57 print('                 ')
58 
59 print('---第一字母大寫----')
60 print('llex Li'.title())
61 print('                 ')
62 
63 print('---前邊用0填充----')
64 print('lex Li'.zfill(26))
65 print('                 ')
常用變量演示

 


免責聲明!

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



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