zoukankan      html  css  js  c++  java
  • 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("是否重新登陆!按33[31;1mY/y33[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("欢迎您 33[32;1m%s33[0m  你已经登陆成功!" % _user_name)
    49                 break
    50             else:
    51                 count -=1#次数减少
    52                 print("密码错误请重试,剩余:33[31;1m%s33[0m次! "% count)
    53         else:
    54             print("33[31;1m超出所试次数,账户已锁定!请联系商家!33[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("欢迎您 33[32;1m%s33[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符号(	)转换为空格,字符默认的空格数是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]))       <按照'
    '分隔,返回一个包含各行作为元素的列表,
    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( '
     Alex'.lstrip())
    31 print( 'Alex 
    '.rstrip())
    32 print( '    Alex
    '.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('---按换行
    分割----不同系统的换行')
    52 print('1+2
    +3+4'.splitlines())
    53 print('                 ')
    54 
    55 print('---按换行
    分割----')
    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://home.cnblogs.com/u/uge3/

  • 相关阅读:
    看完这篇文章,你还会问陈景润证明“1+2”有什么意义吗?
    stm32串口发送数据复位 第一个数据丢失
    无理数的由来
    定义一个大数组时,出现错误,程序进入HardFault_Handler中断
    STM32使用FatFs
    块级元素IE6/IE7下inline-block解决方案
    Building Your First jQuery Plugin
    ub挂载window磁盘
    PE文件结构部分解析以及输入的定位
    私有云建设之超融合技术
  • 原文地址:https://www.cnblogs.com/uge3/p/6811998.html
Copyright © 2011-2022 走看看