python----测试04.18

# py4测试题

# 1、8 << 2
# 等于?
8转化成二进制:1000
向左移动2位: 0010 0000
转化成十进制:32
# 2、通过内置函数计算5除以2的余数 print(divmod(5,2)) #divmod是取余和商 余为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 type(i) is str: a +=i print(a,type(a)) # 4、判断 # "yuan" # 是否在[123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"], 如何判断以及对应结果? f=[123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"] if "yuan" in f: print("find it") else: print("not find") #另一种实现方法(递归) l=[123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"] def func(l): if "yuan" in l: print(l) for i in l: if type(i)== tuple or type(i) ==list: func(i) if type(i) == dict func(i.keys()) func(i.values()) func(l) # 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)) 解答: base=(add(i,n) for i in generator()) #n=1 #n=11 g1=generator() #0 1 2 3 g2=(add(i,11) for i in g1) base=(add(i,11) for i in g2) next(base) 22 next(base) 23 next(base) 24 next(base) 25 # 9 # hello.py(gbk方式保存): # #coding:GBK # print(“老男孩”) # 如果用py2,py3下在cmd下运行会报错吗?为什么并提出解决方案? (编码) 不会出错。
# 10、通过函数化编程实现5的阶乘 def age(n): if n == 1: return 1 else: return age(n-1)*n print(age(5))
# 11、打印如下图案: # # *** # ***** # ******* # ***** # *** # * # 方法一: print('\n'.join([('*'*([i,abs(i-6)][i>3]*2+1)).center(7, ' ') for i in range(7)])) print('\n') #方法二: def draw(n): def paint(i,n): s,l = divmod(i,2) print(('%s%s%s'%('*' * s,'' * l,'*' * s)).center(n)) for i in range(1,n,2): paint(i,n) for i in range(n,0,-2): paint(i,n) draw(7)
# 12 # def outer(): # count = 10 # def inner(): # count = 20 # print(count) # inner() # print(count) # outer() # (1)分析运行结果? 运行结果如下: 20 102)如何让两个打印都是20 解答:在inner()下加入nonlocal count,最后结果都是20了。 def inner(): nonlocal count count = 20 print(count) # 13 # 输入一个年份,判断是否是闰年? #方法一: num = int(input('请输入年份:').strip()) if num%4 == 0: print('是闰年') else: print('不是闰年') #方法二: judge = lambda year: True if (year%4 == 0 and year%100!=0) or (year%400 == 0) else False print(judge(2004)) #拆解上面的lamdba表达式 def judge(year): if (year%4 ==0 and year%100!=0) or (year%400==0): return True else: return False
# 14 # 任意输入三个数,判断大小? def my_max(a,b,c): if a >= b: if a>=c: print(a) else: print(b) else: if b>=c: print(b) else: print(c)
# 15 # 求s = a + aa + aaa + aaaa + aa...a的值,其中a是一个数字。例如2 + 22 + 222 + 2222 + 22222 # ,几个数相加以及a的值由键盘控制。 num = 0 while 1: choice_value = input('选择a的值: ') choice_num = input('选择几个数相加: ') for i in range(1,int(choice_num)+1): num += int(choice_value*i) print(num) num = 0 # 16 # f = open("a") # while 1: # choice = input("是否显示:[Y/N]:") # if choice.upper() == "Y": # for i in f: # print(i) # else: # break # 请问程序有无bug,怎么解决? 有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) 1import datetime def logger(fun): def wor(): with open("%s"%fun.__doc__,"a") as f: fun() a=str(datetime.datetime.now()) f.write(a+"\n") return wor @logger def foo(): "foo" print('hello foo') return () @logger def bar(): "bar" print('hello bar') foo() #生成foo文件,记录时间 bar() #生成bar文件,记录时间 2import 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+"\n") 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 # 三次登陆锁定:要求一个用户名密码输入密码错误次数超过三次锁定? coding:utf-8 count = 0 #用于计数 username = "wys666" #用户名和密码 password = "123456" f = open('black_user','r') #读取黑名单内容 lock_file = f.read() f.close() username = input("请输入用户名:") for i in range(1): #判断输入的用户名是否在黑名单内,如果在则不允许继续输入密码 if lock_file == username: print("对不起,您的用户名已被锁定,暂时不允许使用!") exit() else: continue for i in range(3): #尝试输入密码,并将输入次数进行计数 password =input("请输入密码:") if password == password: print("登录成功") break else: print("登录失败...") count += 1 if count == 3: #如果错误密码输入了三次,则提示用户名锁定,并将用户名放入黑名单中 print("对不起,您输入的密码错误次数已达3次,将锁定您的账户!") f = open('black_user','w') f.write('%s'%username) f.close() 方法二: 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 + "\n") 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

 

posted @ 2017-04-24 20:03  ForeverPine  阅读(229)  评论(0编辑  收藏  举报
TOP