• py4测试题


    1、8<<2等于?
      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个字符提取出来并拼接成字符串。
      s1 = s[1::2]
      s2 ="".join(s1)
      print(s2)--->hello

    4、判断"yuan"是否在[123,(1,"yuan"),{"yuan":"handsome"},"yuanhao"],如何判断以及对应结果?

    s="yuan" #定义一个变量s
    for i in l:
        if type(i) == str: #判断一级索引是否为字符串
            if s in i:
                print("在里面")
        else:
            if type(i) != int: #当i不是int数据类型时。
                for j in i: #循环列表里非字符串的类型
                    if type(j) == str: #判断是字符串的情况,是否包含所需元素
                        if s in j:
                            print("在里面")
            else: #以上都不符合就没在里面
                print("没在里面")

    5、l=[1,2,3]
    l2=l.insert(3,"hello")
    print(l2)
    执行结果并解释为什么?

    答:执行结果是None,因为l.insert(3,"hello")是没有执行结果的,所以l2是None

    6、 a=[1,2,[3,"hello"],{"egon":"aigan"}]
    b=a[:]

    a[0]=5
    a[2][0]=666

    print(a)
    print(b)
    #计算结果以及为什么?
    答:
      print(a)--->[5, 2, [666, 'hello'], {'egon': 'aigan'}]
      a[0]=5 #通过下标索引定位到0的位置,修改原来的元素为5
      a[2][0]=666 #通过下标索引定位到2的位置,因为2位置是一个列表,在定位列表下标索引的0位置,修改原来的元素为666
      print(b)--->[1, 2, [666, 'hello'], {'egon': 'aigan'}] #b=a[:]中括号里面的冒号两边没有写值,表示取所有

    7 使用文件读取,找出文件中最长的行的长度(用一行代码解决)?
      max(len(f.readlines())

    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)

    9
    hello.py (gbk方式保存):
    #coding:GBK
    print(“老男孩”)

    如果用py2,py3下在cmd下运行回报错吗?为什么并提出解决方案? (编码)

    答:# _*_ coding:gbk _*_
    name = "老男孩"
    print (name)

    1、在CMD下运行py2和py3,都不会报错,因为CMD系统默认的编码格式就是GBK;
    2、不在CMD下,运行py3时,不会报错。因为py3里字符串本身就是unicode。是不需要解码的;
    运行py2时,会出现乱码,因为py2里字符串本身是Bytes文件,要转成明文的话,就要把name解码成unicode。
    print(name.decode("gbk"))------->老男孩

    10 通过函数化编程实现5的阶乘

    def jiecheng(n):
        '''进行阶乘'''
        if n ==1:
            return 1
        else :
            return jiecheng(n-1)*n
    print(jiecheng(5))

    11 打印如下图案:

         *
       ***
     *****
    *******
      *****
       ***
         *
    #看到这个菱形,分析:得分成两部分,上面四行为一部分,下面三行为另一部分

      方法一:

    n = 7
    str = "*"
    for i in range(4):
        print((str*(i*2+1)).center(n))
    for i in range(3):
        print((str*(5-2*i)).center(n))
    

      方法二:

    n = 7
    for i in range(1,n+1):
        if i%2 == 1:
            print(("*"*i).center(n))
    for i in reversed(range(1,n)):
        if i%2 == 1:
            print(("*"*i).center(n))
    

      方法三:

    from sys import stdout
    for i in range(4):
        for j in range(2-i+1):
           stdout.write(" ")
        for k in range(2*i+1):
            stdout.write("*")
        print()
    
    for i in range(3):
        for j in range(i+1):
            stdout.write(" ")
        for k in range(4-2*i+1):
            stdout.write("*")
        print()

    12
    def outer():
    count = 10
    def inner():
    count = 20
    print(count)
    inner()
    print(count)
    outer()

    (1)分析运行结果?
    (2)如何让两个打印都是20

      不好意思,老师,没时间做了。

    13 输入一个年份,判断是否是闰年?

    def judge(year): #闰年的规则:四年一闰,百年不闰,四百年又闰
        if (year%4 == 0 and year%100 != 0) or year%400 == 0 :
            return True
        else:
            return False
    print(judge(2017)) #输入年份进行判断是否为闰年
    #用匿名函数表示:
    judge = lambda year : True if ((year%4 == 0 and year%100 != 0) or year%400 == 0) else False
    print(judge(2017)) #输入年份进行判断是否为闰年
    ---------输出结果-------
    False #表示不是闰年
    False #表示不是闰年

    14 任意输入三个数,判断大小?

    l = []
    while True:
        choice = input("请输入您的数字:")
        if choice == "b":
            break
        else:
            l.append(int(choice))
    print(max(l))

    15 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222
    ,几个数相加以及a的值由键盘控制。

      不好意思,老师,没时间做了。

    16 f=open("a")

    while 1:
      choice=input("是否显示:[Y/N]:")
      if choice.upper()=="Y":
        for i in f:
          print(i)
      else:
        break

    请问程序有无bug,怎么解决?

      不好意思,老师,没时间做了。
    17

    def foo():
    print('hello foo')
    return()
    def bar():
    print('hello bar')


    (1)为这些基础函数加一个装饰器,执行对应函数内容后,将当前时间写入一个文件做一个日志记录。

    import time
    #定义装饰器阶段
    def timmer(func):
        def wrapper():
            func()
            with open("日志文件",mode="a",encoding="utf8") as f_add:
                f_add.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+"
    ")             
        return wrapper
    
    @timmer #调用装饰器
    def foo():
        print("hello foo")
        return
    @timmer #调用装饰器
    def bar():
        print("hello bar")
    #调用函数阶段
    foo()
    bar()
    -----------------文件记录结果-----------------------
    2017-04-19 00:21:04
    2017-04-19 00:21:04
    2017-04-19 00:21:09
    2017-04-19 00:21:09

    (2)改成参数装饰器,即可以根据调用时传的参数决定是否记录时间,比如@logger(True)

    import time
    #有参装饰器定义
    def decide(flag):
        def timmer(func):
            def wrapper():
                if flag == True:
                    func()
                    with open("日志文件",mode="a",encoding="utf8") as f:
                        f.write(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+"
    ")
            return wrapper
        return timmer
    #调用装饰器(传参)
    @decide(True)
    def foo():
        print("hello foo")
        return
    @decide(False)
    def bar():
        print("hello bar")
    #函数调用阶段
    foo()
    bar()
    ----------------文件记录结果---------------------
    2017-04-19 00:24:02
    2017-04-19 00:24:02
    2017-04-19 00:24:04
    2017-04-19 00:24:04

    18 三次登陆锁定:要求一个用户名密码输入密码错误次数超过三次锁定?

    def match(name,pwd):
        '''匹配用户输入的信息,进行判断'''
        falg = True
        while falg:
            with open("test",mode="r",encoding="utf8") as f_read,open("test2",mode="r",encoding="utf8") as f1_read:
                fread = f_read.readlines()
                f1read = f1_read.readlines()
                for lines in f1read:#循环黑名单里的内容
                    if name == lines:#判断是否在黑名单里,在就锁定退出
                        falg = False#退出while循环
                        print("This user has been locked!")
                if falg ==False:
                    break #退出黑名单循环
                for line in fread:#循环用户信息库,进行判断是否正确
                    if name in line and pwd in line :
                        verdict = True#输入正确为True,退出循环
                        break
                    else:
                        verdict = False#输入错误为False,跳出本次循环
                        continue
                if verdict == True:#因为用户信息库里有很多用户信息,so,要拿出来判断
                    print("welcome %s" % (name))
                    falg = False
                if verdict == False:
                    print("You input the username or password error")
                    decide(name)#当输入错误时,调用decide函数
                    falg = False
    
    def decide(name):
        '''写入用户输入错误的用户名,达到一定的次数,把该用户写入黑名单'''
        count = 0#计数器,用于记录输入错误用户的次数
        with open("test1",mode="a+",encoding="utf8") as f_add:
            f_add.write("
    "+name)#往文本写错误用户的信息
            f_add.seek(0)#把光标移到最开始位置
            fadd = f_add.readlines()#获取输入错误用户的信息
            for i in range(len(fadd)):#循环列表fadd
                fadd[i] = fadd[i].replace('
    ', '')#去掉每行中的“
    ”,用于下面的比对
            for line in fadd:#此时的fadd里已没有多余的空格,便于比对
                if name == line:#当有重复的用户名,累加一次
                    count += 1 #匹配后自加1
                if count > 2:#当输入3次时,就调用black函数
                    black(name)
    
    def black(name):
        '''黑名单,输入达到次数的用户,被锁定在黑名单'''
        with open("test2",mode="a+",encoding="utf8") as f_add:
            f_add.seek(0)#移动光标至最开始位置
            fadd = f_add.readlines()#获取黑名单信息
            for line in fadd:#循环黑名单,有重复的用户不会被写入
                if name == line :
                    break  #有重复的信息退出,不再写入黑名单
            f_add.write("
    "+name)#写入黑名单
    
    while True:
        name = input("Please input your username:").strip()
        if len(name) == 0:
            print("Input is wrong, please input again")
            continue
        if name =="q":#输入q退出
            print("ByeBye!")
            break
        pwd = input("Please input your password:").strip()
        match(name, pwd)#调用match函数,匹配输入信息
    

      

  • 相关阅读:
    假期阅读笔记三
    软件需求最佳实践阅读笔记03
    学习进度条第八周
    软件需求最佳实践阅读笔记02
    学习进度条第七周
    软件需求与分析课堂讨论一
    学习进度第五周
    软件需求最佳实践阅读笔记01
    学习进度第四周
    学习进度条第三周
  • 原文地址:https://www.cnblogs.com/Michael--chen/p/6728938.html
Copyright © 2020-2023  润新知