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('                 ')
常用变量演示

 

posted @ 2017-05-05 11:13  莫柔落切  阅读(1061)  评论(6编辑  收藏  举报