python(36)- 测试题
1、8<<2等于?
32
“<<”位运算 264 132 64 32 16 8 4 2 1 原始位置 0 0 0 0 0 1 0 0 0 想左位移2位 0 0 0 1 0 0 0 0 0
2、通过内置函数计算5除以2的余数
a=divmod(5,2) print(a) --->(2,1) #2为商,1有余数 print(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"] str_s="" for i in s: if type(i)==str: str_s+="".join(i) print(str_s) --->hello str_s="".join([i for i in s if type(i)==str]) print(str_s) --->hello
4、判断"yuan"是否在[123,(1,"yuan"),{"yuan":"handsome"},"yuanhao"],如何判断以及对应结果?
s=[123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"] if "yuan" in s: print('"yuan"在列表s中') else: print('"yuan"不在列表s中') --->"yuan"不在列表s中
5、l=[1,2,3]
l2=l.insert(3,"hello")
print(l2)
执行结果并解释为什么?
l=[1,2,3] l2=l.insert(3,"hello") print(l) --->[1, 2, 3, 'hello'] print(l2) --->None #因为l.insert(3,'hello')的执行结果是没有返回值的,所以打印l2什么也得不到
6、 a=[1,2,[3,"hello"],{"egon":"aigan"}]
b=a[:]
a[0]=5
a[2][0]=666
print(a)
print(b)
计算结果以及为什么?
[5, 2, [666, 'hello'], {'egon': 'aigan'}] [1, 2, [666, 'hello'], {'egon': 'aigan'}] b相当于a的浅拷贝,当拷贝a中[3,"hello"]相当于只拷贝了一个内存地址,当劣列表里的元素改变时, b指向的内存地址并未发生改变,所以列表元素跟着一起改变
7 使用文件读取,找出文件中最长的行的长度(用一行代码解决)?
print(max([line for line in open("a.txt","r",encoding="utf8")]))
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]) --->[11,12,13,14] base2=(add(i, n) for i in [11,12,13,14]) --->[22,23,24,25]
9
hello.py(gbk方式保存):
#coding:GBK
print(“老男孩”)
如果用py2,py3下在cmd下运行回报错吗?为什么并提出解决方案? (编码)
均不会报错,因为cmd默认编码方式为GBK,所以在python2和python3中都不会报错
但在python2解释器中会报错,需要gbk模式解码。python3解释器中不会报错
10 通过函数化编程实现5的阶乘
def func(n): if n == 1: return 1 else: return n * func(n-1) obj = func(3) print(obj)
11 打印如下图案:
* *** ***** ******* ***** *** * def func(number): for i in range(1,number,2): print(("*" * i).center(number)) for i in range(number,0,-2): print(("*" * i).center(number)) func(7)
12 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222,几个数相加以及a的值由键盘控制。
def func(a,n): sum=0 a=str(a) for i in range(1,n+1): x=int(a*i) sum+=x return sum print(func(2,2))
13
def foo():
print('hello foo')
return()
def bar():
print('hello bar')
(1)为这些基础函数加一个装饰器,执行对应函数内容后,将当前时间写入一个文件做一个日志记录。
def timer(func): def wrapper(): import time res = func() f = open('log', 'a+') #以追加的方式打开文件,没有则会创建 s = time.asctime() #获取当前时间:Tue Apr 18 21:46:18 2017 f.write(s + '\n') #将当前时间写入log文件,并换行 f.close() #关闭log文件 return res return wrapper @timer def foo(): print('hello foo') return () @timer def bar(): print('hello bar') foo() bar()
(2)改成参数装饰器,即可以根据调用时传的参数决定是否记录时间,比如@logger(True)
def logger(choice): def timmer(func): def wrapper(): import time if choice == True: res = func() f = open('log', 'a+') #以追加的方式打开文件,没有则会创建 s = time.asctime() #获取当前时间:Tue Apr 18 21:46:18 2017 f.write(s + '\n') #将当前时间写入log文件,并换行 f.close() #关闭log文件 return res else: pass return wrapper return timmer @logger(True) def foo(): print('hello foo') return () @logger(True) def bar(): print('hello bar') foo() bar()
18 三次登陆锁定:要求一个用户名密码输入密码错误次数超过三次锁定?
#读取注册用户的信息,用户名,密码,输错次数,写入字典中 user={} with open("DB1",encoding="utf8") as f: for line in f: username_list=line.strip().split("|") #username_list--->['egon', '123', '2'] user[username_list[0]]={"name":username_list[0], "pwd":username_list[1], "times":username_list[2]} # print(user) #-->{'egon': {'name': 'egon', 'pwd': '123', 'times': '2'}, 'xuyaping': {'name': 'xuyaping', 'pwd': '123', 'times': '0'}, 'xyy': {'name': 'xyy', 'pwd': '123', 'times': '1'}} #读取黑名单用户,将黑名单用户加入列表中 with open("black_lockname",encoding="utf8") as f1: black_list=[] for line in f1: black_list.append(line.strip()) # print(black_list) while True: username = input("please input your username:").strip() passwd = input("please input your passwd:").strip() #用户在黑名单中 if username in black_list: print("该用户为黑名单用户,请滚") break # 用户为注册用户 elif username in user: user[username]["times"]=int(user[username]["times"]) if user[username]["times"]<3 and passwd==user[username]["pwd"]: print("登录成功") user[username]["times"]=0 #将修改后的信息重新写入DB1中 with open("DB1","w",encoding="utf8") as f3: for i in user: f3.write(i + "|" + user[i]["pwd"] + "|" + str(user[i]["times"]) + "\n") break else: user[username]["times"]+=1 print("登录错误") # 将修改后的信息重新写入DB1中 with open("DB1", "w", encoding="utf8") as f3: for i in user: f3.write(i + "|" + user[i]["pwd"] + "|" + str(user[i]["times"]) + "\n") if user[username]["times"]==3: black_list.append(username) print("账户被锁定") # 将修改后的信息重新写入black_lockname中 with open("black_lockname","w",encoding="utf8") as f4: for j in black_list: f4.write(j+ "\n") break #用户不是注册用户 else: print("该用户没有注册") break
参考博客:http://www.cnblogs.com/xuyaping/p/6679305.html