python第三天 变量 作业
作业1,模拟登陆:
1. 用户输入帐号密码进行登陆
2. 用户信息保存在文件内
3. 用户密码输入错误三次后锁定用户
使用文件:user_file.txt 用户列表文件。 格式:{'张三':'123abc','lili':'eeettt','王五':'www123','calmyan':'yanyan','Aelx':'tttt'}
lock_name.txt 被锁定的用户文件 。 格式:['calmyan']
先上一下流程图:
下面的详细代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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[]
经过测试,觉得没毛病!
而且多了1、提示功能:用户不存提示,用已经被定提示,剩下重试密码次数提示!
2、可选择是否出退!
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 #############################################################################################################
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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(' ')
![](https://files.cnblogs.com/files/uge3/%E5%BE%AE%E4%BF%A1.bmp)
您的资助是我最大的动力!
金额随意,欢迎来赏!
![](https://files.cnblogs.com/files/uge3/%E6%94%AF%E4%BB%98%E5%AE%9D.bmp)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【莫柔落切】!
联系或打赏博主【莫柔落切】!https://home.cnblogs.com/u/uge3/