• Python之基础练习题


    Python之基础练习题

    1、执行 Python 脚本的两种方式

    2、简述位、字节的关系

      解:8位是一个字节

    3、简述 ascii、unicode、utf-8、gbk 的关系

    4、请写出 “李杰” 分别用 utf-8 和 gbk 编码所占的位数

    5、Pyhton 单行注释和多行注释分别用什么?

    6、声明变量注意事项有那些?

    8、如何查看变量在内存中的地址?

    9、执行 Python 程序时,自动生成的 .pyc 文件的作用是什么?

    10、写代码
      a.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败!

    username = input("username>>:")
    password = input("password>>:")
    
    if username == "seven" and password == "123":
         print("OK")
    else:
        print("username or password error ! ")

      b.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次

      c.实现用户输入用户名和密码,当用户名为 seven 或 alex 且 密码为 123 时,显示登陆成功,否则登陆失败,失败时允许重复输入三次

    11、写代码
      a. 使用while循环实现输出2-3+4-5+6...+100 的和
      b. 使用for循环和range实现输出 1-2+3-4+5-6...+99 的和
      c. 使用 while 循环实现输出 1,2,3,4,5, 7,8,9, 11,12 d. 使用 while 循环实现输出 1-100 内的所有奇数
      e. 使用 while 循环实现输出 1-100 内的所有偶数

    12、分别书写数字 5,10,32,7 的二进制表示

    13、简述对象和 类的关系(可用比喻的手法)

    14、现有如下两个变量,请简述 n1 和 n2 是什么关系?

      n1 = 123

      n2 = 123

    15、现有如下两个变量,请简述 n1 和 n2 是什么关系?

      n1 = 123456

      n2 = 123456

    16、现有如下两个变量,请简述 n1 和 n2 是什么关系?

       n1 = 123456

      n2 = n1
    17、如有一下变量 n1 = 5,请使用 int 的提供的方法,得到该变量最少可以用多少个二进制位表示?

    18、布尔值分别有什么?

    19、阅读代码,请写出执行结果

      a = "alex"
      b = a.capitalize() print(a)
      print(b)

      请写出输出结果:

    20、写代码,有如下变量,请按照要求实现每个功能

      name = " aleX"

      a. 移除 name 变量对应的值两边的空格,并输入移除有的内容

      b. 判断 name 变量对应的值是否以 "al" 开头,并输出结果
      c. 判断 name 变量对应的值是否以 "X" 结尾,并输出结果
      d. 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果 e. 将 name 变量对应的值根据 “l” 分割,并输出结果。

      f. 请问,上一题 e 分割之后得到值是什么类型? g. 将 name 变量对应的值变大写,并输出结果
      h. 将 name 变量对应的值变小写,并输出结果
      i. 请输出 name 变量对应的值的第 2 个字符?

      j. 请输出 name 变量对应的值的前 3 个字符?
      k. 请输出 name 变量对应的值的后 2 个字符?
      l. 请输出 name 变量对应的值中 “e” 所在索引位置?

    21、字符串是否可迭代?如可以请使用 for 循环每一个元素?

    22、请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['alex', 'eric', 'rain']

    23、写代码,有如下列表,按照要求实现每一个功能

      li = ['alex', 'eric', 'rain']
      a. 计算列表长度并输出
      b. 列表中追加元素 “seven”,并输出添加后的列表
      c. 请在列表的第 1 个位置插入元素 “Tony”,并输出添加后的列表
      d. 请修改列表第 2 个位置的元素为 “Kelly”,并输出修改后的列表
      e. 请删除列表中的元素 “eric”,并输出修改后的列表
      f. 请删除列表中的第 2 个元素,并输出删除的元素的值和删除元素后的列表 g. 请删除列表中的第 3 个元素,并输出删除元素后的列表
      h. 请删除列表中的第 2 至 4 个元素,并输出删除元素后的列表
      i. 请将列表所有的元素反转,并输出反转后的列表

      j. 请使用 for、len、range 输出列表的索引
      k. 请使用 enumrate 输出列表元素和序号(序号从 100 开始) l. 请使用 for 循环输出列表的所有元素

    24、写代码,有如下列表,请按照功能要求实现每一个功能

      li = ["hello", 'seven', ["mon", ["h", "kelly"], 'all'], 123, 446]

      a. 请输出 “Kelly”
      b. 请使用索引找到 'all' 元素并将其修改为 “ALL”

    25、写代码,有如下元组,按照要求实现每一个功能

      tu = ('alex', 'eric', 'rain')
      a. 计算元组长度并输出
      b. 获取元组的第 2 个元素,并输出

      c. 获取元组的第 1-2 个元素,并输出

      d. 请使用 for 输出元组的元素
      e. 请使用 for、len、range 输出元组的索引
      f. 请使用 enumrate 输出元祖元素和序号(序号从 10 开始)

    26、有如下变量,请实现要求的功能
      tu = ("alex", [11, 22, {"k1": 'v1', "k2": ["age", "name"], "k3": (11,22,33)}, 44])

      a. 讲述元祖的特性
      b. 请问 tu 变量中的第一个元素 “alex” 是否可被修改?
      c. 请问 tu 变量中的"k2"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”

      d. 请问 tu 变量中的"k3"对应的值是什么类型?是否可以被修改?如果可以,请在其中添加一个元素 “Seven”

    27、字典
      dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}

      a. 请循环输出所有的 key

      b. 请循环输出所有的 value

      c. 请循环输出所有的 key 和 value
      d. 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
      e. 请在修改字典中 “k1” 对应的值为 “alex”,输出修改后的字典

      f. 请在 k3 对应的值中追加一个元素 44,输出修改后的字典
      g. 请在 k3 对应的值的第 1 个位置插入个元素 18,输出修改后的字典

    28、转换
      a. 将字符串 s = "alex" 转换成列表
      b. 将字符串 s = "alex" 转换成元祖
      c. 将列表 li = ["alex", "seven"] 转换成元组
      d. 将元祖 tu = ('Alex', "seven") 转换成列表
      e. 将列表 li = ["alex", "seven"] 转换成字典且字典的 key 按照 10 开始向后递增

    29、转码

      n = "老男孩"
      a. 将字符串转换成 utf-8 编码的字节,并输出,然后将该字节再转换成 utf-8 编码字符串,再输出

      b. 将字符串转换成 gbk 编码的字节,并输出,然后将该字节再转换成 gbk 编码字符串,再输出

    30、求 1-100 内的所有数的和

    31、元素分类
      有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个 key 中,将小于 66 的值保存至第二个 key 的值中。

      即: {'k1': 大于 66 的所有值, 'k2': 小于 66 的所有值}

    32、购物车 功能要求:

      要求用户输入总资产,例如:2000 显示商品列表,让用户根据序号选择商品,加入购物车 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。

      goods = [
            {"name": "电脑", "price": 1999},

            {"name": "鼠标", "price": 10},

            {"name": "游艇", "price": 20},

            {"name": "美女", "price": 998},

          ]

     
     
     
     
     
    # py4测试题
    # 1、8 << 2等于?
    # 将8转为二进制数0b1000,<<2表示将此二进制左移两位==》0b100000,结果为32
    
    # 2、通过内置函数计算5除以2的余数
    print(divmod(5,2)[1])
    # 
    # 3、s = [1, "h", 2, "e", [1, 2, 3], "l", (4, 5), "l", {1: "111"}, "o"], 将s中的5个字符提取出来并拼接成字符串。
    s = [1, "h", 2, "e", [1, 2, 3], "l", (4, 5), "l", {1: "111"}, "o"]
    l=[]
    for i in s:
        if isinstance(i,str):
            l.append(i)
    result="".join(l)
    print(result)
    # 
    # 4、判断
    # "yuan"是否在[123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"], 如何判断以及对应结果?
    if "yuan" in [123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"]:
        print(True)
    else:
        print(False)
    #判断结果为:false
    
    # 5、
    l = [1, 2, 3]
    l2 = l.insert(3, "hello")
    print(l2)
    # 执行结果并解释为什么?
    # 答:执行结果为None,l.insert(3, "hello")是对列表l进行添加,实际上是通过l的绑定方法insert来执行此函数,而这个函数
    # 没有返回值(即无return),所以执行结束后返回值为None。
    # 
    # 6、 a = [1, 2, [3, "hello"], {"egon": "aigan"}]
    a = [1, 2, [3, "hello"], {"egon": "aigan"}]
    b = a[:]
    a[0] = 5
    a[2][0] = 666
    print(a)
    print(b)
    print(id(a),id(b))
    # 计算结果以及为什么?
    # print(a)的执行结果为[5, 2, [666, 'hello'], {'egon': 'aigan'}],print(b)的结果为[1, 2, [666, 'hello'], {'egon': 'aigan'}]
    # 这是因为b=a[:]是一个切片操作,在没有设定索引的情况下,就是切所有的赋值给b,这相当于浅拷贝一个b(id(b)不等于id(a)),
    # a,b一样的就只是最外层元素的地址引用,而在修改a[0]时,数字修改就相当于重新赋值,因此b依然指向原来的地址,而a改变了,对于a[2][0]
    # 的修改,对于列表的地址并没有改变,因此在a和b中都发生了改变
    
    # 7.使用文件读取,找出文件中最长的行的长度(用一行代码解决)?
    #   print(max(open("a"),key=lambda x:len(x)))
    # 
    # 8
    def add(s, x):
        return s + x
    def generator():
        for i in range(4):
            yield i
    base = generator()
    l=[]
    for n in [1,11]:
        for i in base:
            a=add(i,n)
            l.append(a)
        base=iter(l)
    print(list(base))
    # 结果为:[22, 23, 24, 25]
    # 当n=1的时候,for i in base ,产生的i依次是0,1,2,3,在经过add函数后,base作为一个生成器里面有1,2,3,4
    #当n=11的时候,for i in base ,产生的i依次是1,2,3,4,在经过add函数后,base作为一个生成器里面有12,13,14,15
    
    
    # 9
    # hello.py(gbk方式保存):
    # #coding:GBK
    # print(“老男孩”)
    # 如果用py2,py3下在cmd下运行回报错吗?为什么并提出解决方案? (编码)
    # 都可以打开,因为windows系统为gbk编码,因此显示无问题
    # 而mac本默认编码为utf-8,可以打开,但是显示会乱码
    # 
    # 10
    # 通过函数化编程实现5的阶乘
    def func(n):
        total=1
        for i in range(1,n+1):
            total*=i
        return total
    print(func(5))
    # 11
    # 打印如下图案:
    # 
    # *
    # ***
    # *****
    # *******
    # *****
    # ***
    # *
    for i in range(5):
        print("* "*(2*i-1))
    for i in range(3,0,-1):
        print("* "*(2*i-1))
    # 
    # 12
    def outer():
        count = 10
    def inner():
        global count
        count = 20
        print(count)
    inner()
    print(count)
    outer()
    # (1)分析运行结果?
    # (2)如何让两个打印都是20
    # 无法运行,因为count没有被定义,在print(count)的时候
    # (2)在inner函数中加入global count即可
    
    # 13
    # 输入一个年份,判断是否是闰年?
    def year(n):
        if n%100 ==0 :
            if n % 400==0 :
                print("%s是闰年"%n)
            else:
                print("%s不是闰年"%n)
        else:
            if n%4==0:
                print("%s是闰年" % n)
            else:
                print("%s不是闰年"%n)
    n=int(input("请输入年份:"))
    year(n)
    # 
    # 14
    # 任意输入三个数,判断大小?
    def func(x,y,z):
        l=[x,y,z]
        m=1
        while m<len(l)-1:
            for i in range(len(l)-m):
                if l[i]>l[i+1]:
                    mid=l[i]
                    l[i]=l[i+1]
                    l[i+1]=mid
            m+=1
        print(l)
        print("%s<%s<%s"%(l[0],l[1],l[2]))
    func(12,4,7)
    # 
    # 15
    # 求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222
    # ,几个数相加以及a的值由键盘控制。
    def func(a,n):
        l=[]
        for i in range(n):
            x=0
            while i>=0:
                x+=(a*(10**i))
                i=i-1
            l.append(x)
        sum(l)
        print(l)
    func(2,6)
    # 
    16
    f = open("a")
    while 1:
        choice = input("是否显示:[Y/N]:")
        if choice.upper() == "Y":
            for i in f:
                print(i)
        else:
            break
    # 请问程序有无bug,怎么解决?
    # 有bug,如果打开文件时,是操作系统打开的,默认编码为GBK,如果该文件是utf-8的文件,里面包含文字的话就会出现乱码情况,因此这里应该指定编码格式
    # 其次这里是一个while True的死循环,在输入显示Y后,文件句柄f作为一个迭代器,只能只用一次,即使循环,再输入y也是无显示的,因此去掉死循环,或重新获得文件句柄
    # 在打印的时候,为了有良好的效果,最好.strip(),去掉前后的空格与换行符
    
    # 17
    # (1)为这些基础函数加一个装饰器,执行对应函数内容后,将当前时间写入一个文件做一个日志记录。
    import time
    def log(func):
        def wrapper(*args,**kwargs):
            res = func(*args,**kwargs)
            with open("test","a",encoding="utf8")as f:
                f.write("在%s执行了%s"%(time.time(),func))
            return res
        return wrapper
    @log
    def foo():
        print('hello foo')
        return ()
    @log
    def bar():
        print('hello bar')
    foo()
    # (2)改成参数装饰器,即可以根据调用时传的参数决定是否记录时间,比如 @ logger(True)
    import time
    def logger(flag):
        def log(func):
            def wrapper(*args,**kwargs):
                res = func(*args,**kwargs)
                if flag:
                    with open("test","a",encoding="utf8")as f:
                        f.write("在%s执行了%s
    "%(time.time(),func))
                return res
            return wrapper
        return log
    @logger(True)
    def foo():
        print('hello foo')
        return ()
    @logger(False)
    def bar():
        print('hello bar')
    foo()
    bar()
    
    # 18
    # 三次登陆锁定:要求一个用户名密码输入密码错误次数超过三次锁定?
    with open("user_information",encoding="utf8") as f_usr,
        open("locked",mode="a+",encoding="utf8") as f_locked : #打开用户信息文件和黑名单文件,防止有汉字加上编码
        flag=True  #设置标志位
        count=0    #初始化变量
        count_list = [] #创建一个用以放置输入错误账户名的列表
        while flag and count<3:
            count+=1
            user_name = input("please input username:")
            f_locked.seek(0)     #因locked文件时a+模式,在读取时先将光标调至开头
            for line in f_locked: #逐行读取黑名单
                if user_name == line.strip(): #判断用户名是否在文件中
                    print("Sorry!This user has been locked!")
                    flag=False  #更改标志位,以结束最外层循环
                    break   #结束读取黑名单文件操作
            if flag:   # 不在黑名单时,执行以下操作
                f_usr.seek(0)  #移动光标位置(此处是为了下次循环继续从头读取信息,而第一次读取,r模式下就是从开头读取)
                for line1 in f_usr: #读取用户信息文件
                    user_information = line1.strip().split("---")#将每行的用户名与密码分割成一个列表
                    if user_information[0]==user_name: #判断用户名是否与输入的相同,不相同则继续循环
                        pwd = input("please input pwd:")
                        if user_information[1]==pwd:
                            flag=False  #匹配成功,修改标志位
                            print("hello %s,welcome you!"%user_name)
                            break
                        else:
                            print("user_name or pwd wrong!") #否则则报错
                            count_list.append(user_name)  #将此用户加入到计数列表中
                            count1=count_list.count(user_name) #计算此用户已输入错误几次
                            if count1 == 3:  # 判断本次输入的用户错误次数是否到达3次
                                f_locked.write("
    " + user_name)  # 到达,则加入locked文件
                            break
                else:
                    print("User name doesn't exist!") #在逐行读取完毕,正常结束的情况下,表示无此用户名
     
    # py4测试题
    # 1、8 << 2等于?
    
    #8转化成二进制:1000
    #向左移动2位: 0010 0000
    #转化成十进制:32
    
    # 2、通过内置函数计算5除以2的余数
    
    #a=divmod(5,2)
    #余数:
    #    a[1]  --->1
    #
    
    # 3、s = [1, "h", 2, "e", [1, 2, 3], "l", (4, 5), "l", {1: "111"}, "o"], 将s中的5个字符提取出来并拼接成字符串。
    #
    s = [1, "h", 2, "e", [1, 2, 3], "l", (4, 5), "l", {1: "111"}, "o"]
    a=[]
    for i in s:
        if isinstance(i,str):
            a.append(i)
    b="".join(a)
    print(b)
    
    
    # 4、判断
    # "yuan" 是否在[123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"], 如何判断以及对应结果?
    #
    #判断"yuan"是不是列表的元素:
    a=[123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"]
    if "yuan" in a:
        print("yuan  in the list")
    
    # 5、l = [1, 2, 3]
    # l2 = l.insert(3, "hello")
    # print(l2)
    # 执行结果并解释为什么?
    #
    #结果是none。因为l.insert 是给l插入值,没有返回值。
    #
    # 6、
    a = [1, 2, [3, "hello"], {"egon": "aigan"}]
    b = a[:]
    a[0] = 5
    a[2][0] = 666
    
    print(a)
    print(b)
    # # 计算结果以及为什么?
    #
    # a:[5,2,[666,"hello"],{"egon":"aigan"}]
    #
    # b:[1,2,[666,"hello"],{"egon":"aigan"}]
    # 原因:这种拷贝方法。不可变类型的,原对象更改不会影响到拷贝对象,而可变类型的,原对象更改会影响到拷贝对象,
    # 拿列表来说,实际存储的是指向列表的内存地址。而列表里的元素只和列表有关系。
    
    
    # 7
    # 使用文件读取,找出文件中最长的行的长度(用一行代码解决)?
    with open("a") as f:
        print(max((len(i.strip()) for i in f)))
    # 8
    def add(s, x):
        return s + x
    
    def generator():
        for i in range(4):
            yield i
    
    base = generator()
    for n in [1, 11]:
        base = (add(i, n) for i in base)
    
    print(list(base)
    
    #输出结果:[22,23,24,25]
    #原因:生成器有定义阶段和调用阶段,定义阶段只会定义,而不会运行,当调用这个生成器的时候才会执行。
    #base = [0,1,2,3]
    #base1 = (add(i, n) for i in [0,1,2,3])
    #base2 = (add(i, n) for i in base1)
    #
    #最后执行base2,会依次从上往下执行,可到base1,n已经在for运行完变成了11,所以base1 = [11,12,13,14]
    #
    #再执行base2 = [22,23,24,25]
    #
    # 9
    # hello.py(gbk方式保存):
    # #coding:GBK
    print(“老男孩”)
    #
    # 如果用py2,py3下在cmd下运行回报错吗?为什么并提出解决方案? (编码)
    #
    #不会出错。
    #
    #
    # 10、通过函数化编程实现5的阶乘
    def foo(n):
         sum=1*n
         a = 1
         while a < n:
             sum *= a
             a += 1
         print(sum)
    foo(5)
    #
    # 结果:120
    #
    #
    # 11、 打印如下图案:
    #
    #
    #     * * *
    #    ** * **
    #   ** ** * **
    #    ** * **
    #     * * *
    #       *
    
     for i in range(1,8,2):
         a="*"*i
         print(a.center(10))
     for i in range(5,0,-2):
         a="*"*i
         print(a.center(10))
    
    
    # 12
     def outer():
         count = 10
         def inner():
             count = 20
             print(count)
         inner()
         print(count)
     outer()
    #
    #(1)分析运行结果?
    #(2)如何让两个打印都是20
    #(1):先输出20,再输出10
    
    #(2):在inner()下加入nonlocal count,最后结果都是20了。
        def inner():
            nonlocal count
            count = 20
            print(count)
    
    # 13、 输入一个年份,判断是否是闰年?
     a = int(input("请输入年份: "))
     if a%4 ==0:
         if a%40 == 0:
             print("该年份是闰年!")
         else:
             print("该年份不是闰年!")
     else:
         print("该年份不是闰年!")
    #
    #
    # 14、 任意输入三个数,判断大小?
    
     def com(a,b,c):
         max = a
         min = a
         l=[a,b,c]
         for i in l :
             if i >= max:
                 max  = i
             else:
                 min = i
         print("The max is %s " % max)
         print("The min is %s " % min)
     a=int(input("Please input the first number: "))    #6
     b=int(input("Please input the second number: "))   #2
     c=int(input("Please input the third number: "))    #9
     com(a,b,c)
    
    # 输出结果:
    #     The max is 9
    #     The min is 2
    # 15
    # 求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222
    # ,几个数相加以及a的值由键盘控制。
     from functools import reduce
     def foo(a,n):
         l=[]
         while n>0:
             l.append(int(a*n))
             n -= 1
         sum=reduce(lambda x,y:x+y ,l)
         print(sum)
     a=input("Please input a's value: ")     #2
     n=int(input("Please a's counts :"))     #3
     foo(a,n)
    
    #输出结果:
        #246     2+22+222
    # 16
     f = open("a")
    
     while 1:
         choice = input("是否显示:[Y/N]:")
         if choice.upper() == "Y":
             for i in f:
                 print(i)
         else:
             break
    #
    # 请问程序有无bug,怎么解决?
    #1、如果输入Y。输出文件内容。但每行都多一个换行符。再次输入Y则不会显示。
    #2、输入的不是Y也不是N,程序都会终止。
    
    #如果想要循环输出,则:
     f = open("a")
    
     while 1:
         choice = input("是否显示:[Y/N]:")
         if choice.upper() == "Y":
             for i in f:
                 print(i.strip())
             f.seek(0)
         elif choice.upper()=="N":
             break
         else:
             print("请输入正确的命令!")
    # 17
     def foo():
         print('hello foo')
         return ()
     def bar():
         print('hello bar')
    #
    # (1)为这些基础函数加一个装饰器,执行对应函数内容后,将当前时间写入一个文件做一个日志记录。
    # (2)改成参数装饰器,即可以根据调用时传的参数决定是否记录时间,比如 @ logger(True)
    
    # 1、
     import datetime
     def logger(fun):
         def wor():
             with open("%s"%fun.__doc__,"a") as f:
                 fun()
                 a=str(datetime.datetime.now())
                 f.write(a+"
    ")
         return wor
     @logger
     def foo():
         "foo"
         print('hello foo')
         return ()
     @logger
     def bar():
         "bar"
         print('hello bar')
    
     foo()   #生成foo文件,记录时间
     bar()   #生成bar文件,记录时间
    
    #2、
     import datetime
     def logger(bool):
         def logger1(fun):
             def wor():
                 if bool:
                     with open("%s"%fun.__doc__,"a") as f:
                         fun()
                         a=str(datetime.datetime.now())
                         f.write(a+"
    ")
             return wor
         return logger1
     @logger(True)
     def foo():
         "foo"
         print('hello foo')
         return ()
     @logger(False)
     def bar():
         "bar"
         print('hello bar')
    
     foo()   #生成foo文件,记录时间
     bar()   #不会生成bar文件
    
    
    # 18、三次登陆锁定:要求一个用户名密码输入密码错误次数超过三次锁定?
     used={}   #可用用户名
     error={}  #用户名:输入错误次数(默认0)
    
    with open("used.txt") as f:
        for l in f.readlines():
             l=l.split()
             used[l[0]]=l[1]
    
     for i in used:
         error[i]=0
    
     flag=True
     flag1=True
    
    #先判断用户输入错误次数是否有达到3次的,有直接锁定用户并退出。
    #判断输入的用户是否在已锁定的用户中,有的话提示该用户已锁定。
    #输入的用户名和密码匹配正确,提示欢迎词。
    #输入的用户不存在提示重新输入。用户名正确,密码错误,error中对应用户的输入错误次数自加1,并提示重新输入!
    
     while flag:
         print(error)
         for i in error:
             if error[i] == 3:
                 print("The name is disabled!")
                 with open("black", "a") as f:
                     f.write(i + "
    ")
                 flag = False
                 flag1= False
                 break
         if flag1:
             name = input("Please input your name : ")
             passwd = input("Please input your password : ")
             with open("black") as f:
                 for i in f.readlines():
                     if name in i.strip():
                         print("The name is disabled!")
                         flag1=False
                         break
             if flag1:
                 if name in used:
                     if passwd == used[name]:
                         print("Welcome %s !" % name)
                         break
                     else:
                         print("Please input again !")
                         error[name]+=1
                 else:
                     print("Please input agin !")
         flag1=True
     三次登录:
    def shujuku():
        with open("账号密码",mode='r',encoding='utf8') as f:
            lines = f.readlines()
            for i in lines:
                zm = i.strip()
                z,m = zm.split(":",2)[0],zm.split(":",2)[1]
                return z,m
    def heimingdan():
        with open('黑名单',mode='r',encoding='utf8') as f:
            lines = f.readlines()
            for i in lines:
                z1 = i.strip()
                return z1
    def suoding(userh):
        with open('黑名单', mode='a+', encoding='utf8') as f:
            f.write(userh)
    count = 0
    while True:
        user = input('账号:').strip()
        pwd = input('密码:').strip()
        z1 = heimingdan()
        if user == z1:
            print('该账号处于锁定状态,请联系管理员!')
            break
        z,m = shujuku()
        if user != z:
            print('用户名或密码错误,请重新输入!!')
            continue
        elif pwd != m:
            print('用户名或密码错误,请重新输入!!')
            count += 1
            if count == 3:
                print('该账号错误次数过多,已被锁定,请联系管理员解锁!!')
                suoding(user)
                break
            else:
                continue
        else:
            print('欢迎登录!!')
            break
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    CentOS 如何将.deb 文件 转换.rpm
    zabbix 使用SNMP监控富士施乐打印机
    zabbix5.0安装centos7环境
    zabbix5.0安装centos8
    iptables 扩展模式
    -bash: mail: command not found
    笔记本安装Centos8
    Centos 8 安装
    zabbix5.4部署
    死循环判断进程是否存活脚本
  • 原文地址:https://www.cnblogs.com/george92/p/8978663.html
Copyright © 2020-2023  润新知