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 

 

posted @ 2016-05-03 12:32  许二哈哈哈  阅读(541)  评论(0编辑  收藏  举报