zoukankan      html  css  js  c++  java
  • 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
    ")                                   #写入内容并换行
    3 file1.close()                                              #关闭文件

    方法三:

    1 file1 = open('D:socket.txt','a+')                       #以追加的模式打开文件
    2 file1.writelines("bbbbbb
    ")                                   #写入内容并换行
    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
    90"
    print (str)
    
    str1 = str.split(',')           #以逗号为分隔符,分割内容,分割后的内容存入列表
    print (str1)                    #打印列表
    str = "1234,567
    90"
    print (str)
    print ("==================")
    str1 = str.split(',')[0]           #以逗号为分隔符,分割内容,只取出第一部分
    print (str1)                    #打印列表
    str = "1234,567
    90"
    print (str)
    print ("==================")
    str1 = str.split(',')           #以逗号为分隔符,分割内容,只取出第一部分
    print (str1)                    #打印列表
    str2 = str.split('
    ')[1]       #以换行符为分隔符,取出第二部分
    print (str2)

    实验要求:

    输入用户名密码

    认证成功后显示欢迎信息

    输错三次后锁定用户

    流程思路:

    打开用户和密码文件并存入字典

    打开锁文件存入字典

    提示用户输入用户名和密码

    如果输入错误再次提示输入,重复三次,三次之后将该用户锁定,紧有保存的用户名

    #coding = utf-8
    
    password = {}                                   #创建字典
    passwd = open('D:passwd.txt','r')            #以只读的模式打开,确保文件存在否则报错
    for n in passwd.readlines():                   #读取文件的全部内容
        k = n.split('	')[0]                       #以tab为分割取出用户名
        #print(k)
        v = n.split('	')[1]                       #以tab为分割取出密码
        #print (v)
        m = v.split('
    ')[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('
    ')[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+'
    ')
                sok.close()
                print ("登录次数过多,用户被锁定")
  • 相关阅读:
    理解cookie和session机制
    http协议中connection头的作用
    [转]使用Wireshark来检测一次HTTP连接过程
    http协议学习系列
    xcode清空project list
    How To Use Git Source Control with Xcode in iOS 6
    iOS开发XCODE5 SVN配置 使用办法
    iOS申请证书,Certificates, Identifiers &Profiles 简介
    C#学习单向链表和接口 IList<T>
    halcon学习笔记——(7)HALCON标定后的二维测量
  • 原文地址:https://www.cnblogs.com/fonzie/p/7234586.html
Copyright © 2011-2022 走看看