1. 8<<2等于?

 #
# 解释:将8按位左移2位
# 8 0 0 0 0 1 0 0 0
# 32 0 0 1 0 0 0 0 0

2. 通过内置函数计算5除以2的余数

 print(divmod(5, 2)[1])

 #(2, 1)  2 = 5 // 2; 1 = 5 % 2

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: ""}, "o"]
s_g = filter(lambda x: type(x) is str, s) #由于int类型非可迭代对象,先使用filter过滤掉
s_new = '' #拼接字符串变量
for i in s_g:
s_new += i
print(s_new)
#方法2
1 s = [1, "h", 2, "e", [1, 2, 3], "l", (4, 5), "l", {1: ""}, "o"] print(''.join([i for i in s if type(i) == str]))

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

 l = [123, (1, "yuan"), {"yuan": "handsome"}, "yuanhao"]
l_yuan = str(l) #将列表转换为字符串
if 'yuan' in l_yuan:
print('True')
#方法2 
1 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) #运行结果
#(1, 'yuan')
#dict_keys(['yuan'])

5. 执行结果并解释为什么?

l=[1,2,3]

l2=l.insert(3,"hello")

print(l2)

 执行结果:None
解释:‘.insert’方法的返回值为‘None’

6. 计算结果以及为什么?

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

b=a[:]

a[0]=5

a[2][0]=666

print(a)

print(b)

 a = [1,2,[3,"hello"],{"egon":"aigan"}]
b = a[:] #列表b和列表a相同 a[0] = 5 #将列表a中的第一个元素‘1’变为‘5’
a[2][0] = 666 #将列表a中的第3个元素‘[3,"hello"]’(同样为列表)的第1个元素变为‘666’ print(a) #打印更改后的列表a
print(b) #打印列表b,就是列表a更改前的元素 #执行结果: [5, 2, [666, 'hello'], {'egon': 'aigan'}]
# [1, 2, [666, 'hello'], {'egon': 'aigan'}]

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

 print(max([len(x) for x in open('test.py', encoding='utf-8')]))    #bug:open文件的次数与for循环一致
#方法2
1 f = open('test.py', encoding='utf-8') #假设文件已经打开
print(max([len(i) for i in f]))
 #方法3
f = open('test.py', encoding='utf-8') from functools import reduce print(reduce(lambda a, b: a if a > b else b, (len(i) 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]
#解释:
#这个可以以管道的思路来理解,首先generator()函数是第一个生成器,下一个是第一次循环的base = (add(i, n) for i in base),
# 最后一个生成器是第二次循环的base = (add(i, n) for i in base)。 这样就相当于三个管道依次连接,但是水(数据)还没有流过,
# 现在到了list(base),就相当于驱动器,打开了水的开关,这时候,按照管道的顺序,由第一个产生一个数据,yield 0,
# 然后第一个管道关闭。 之后传递给第二个管道就是第一次循环,此时执行了add(0, 11),然后水继续流,
# 到第二次循环,再执行add(11, 11),此时到管道尾巴了,第一个数据22就产生了。此时第一个管道再开放yield 1, 
# 流程跟上面的一样。依次产生23,24,25; 直到没有数据。 把代码改一下容易理解:
#由于在打开驱动器(list(base))之前,for循环已经走完了,循环体可以表示为:base = (add(i, n) for i in (add(i, n) for i in base)),所以,最终n=11
def generator():
for i in range(4):
yield i #第1个管道 base = (add(i, n) for i in base) #第2个管道
base = (add(i, n) for i in base) #第3个管道 list(base) #开关驱动器

参考:python迭代器与生成器小结

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

test.py (gbk方式保存):

#coding:GBK

print(“老男孩”)

扩展,但是在python2.x解释器中,会显式乱码,python3.x下正常显式,是因为解释器自动帮我们解码了文件内容:

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

 def fn(n):
x = 1
if n == 0: #0的阶乘为1
x
else:
for i in range(1, n+1):
x *= i
return x print(fn(5))
 #方法2:递归
def func(n):
if n == 0 or n == 1:
return 1
return n * func(n-1) print(func(5))

11. 打印如下图案:

     *

***

*****

*******

*****

***

*

 def print_star(n):    #n必须为奇数,此程序没有做判断
s = '*'
i = 1 #上部分,包含对称行
j = n #下部分
while i < n and i % 2 != 0:
print((s * i).center(n))
i += 2
while j > 0 and j % 2 != 0:
print((s * j).center(n))
j -= 2 print_star(7)

12

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

outer()

(1). 分析运行结果?

 运行结果:20
10
分析:当调用函数outer时,按顺序读函数定义部分,outer函数内部嵌套定义了inner函数,
读完inner函数的定义,首先调用了inner(),此时inner函数局部变量count为20,故先打印了20,然后打印了outer函数内部变量10

(2).如何让两个打印都是20

 #方法1:将inner函数内部的count变量删除,将outer函数下的count变量赋值为20即可
def outer():
count = 20
def inner():
print(count)
return count
inner()
print(count) outer()
 #方法2:将inner函数内部变量count = 20返回给外部函数outer的变量count
def outer():
def inner():
count = 20
print(count)
return count
count = inner()
print(count)
outer()

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

 #闰年:四年一润,百年不润,四百年再润
def leap_year(y):
if y % 100 == 0:
if y % 400 == 0:
print('leap year')
else:
print('not leap year')
elif y % 4 == 0:
print('leap year')
else:
print('not leap year') leap_year(2000)
 #方法2
judge = lambda year: True if (year % == and year % != ) or year % == else False
print(judge())

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

 def max_three(x, y, z):
return max(max(x, y),z) print(max_three(1,2,3))

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

 def sum_new(a, n):      #a代表求和的数字,n代表相加的次数
sum = 0
a = str(a)
for i in range(1, n+1):
x = int(a * i)
sum += x
return sum print(sum_new(2,3))

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

 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/Y’只一次有效,如果用户想再次查看文件内容,必须得重启程序
#解决方法:
f = open("a")
while 1:
choice=input("是否显示:[Y/N]:")
if choice.upper() == "Y":
for i in f:
print(i)
f.seek(0)  #重置文件位置于文首
elif choice.upper() == "N":  #严格要求用户必须输入‘n/N’方可退出程序
break

17.

 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. 三次登陆锁定:要求一个用户名密码输入密码错误次数超过三次锁定?

 with open('account',encoding='utf8') as f_account, open('lockedlist', 'a+') as f_locked:
l = [] #定义用户名验证列表,存放黑名单数据
f_locked.seek(0) #"a+"模式打开后,文件位置位于末尾,要遍历文件内容,需要将指针移至文件起始位置
for locked_info in f_locked.readlines(): #遍历黑名单
l.append(locked_info.strip()) #将黑名单数据添加进列表,注意:需要将文件中的换行符脱掉 c = [] #定义用户登录名列表,存储用户尝试的登录名
count = 1 #登陆次数计数器
flag = True #登陆循环控制开关
while flag and count < 4:
user = input('Please input username:') #输入用户名
pwd = input('Please input password:') #输入用户密码
if user in l: #用户名在黑名单中
print("This user is in blacklist,can't log in!") #打印提示信息
continue
c.append(user)
for info in f_account: #用户名不在黑名单中,遍历用户登陆文件
user_name, user_pwd = info.strip().split(',') #将文件中的用户名和登陆密码赋值给判定变量
if user == user_name: #用户名符合
if pwd == user_pwd: #对应密码符合
print('Welcome %s' % user) #打印登陆成功信息
flag = False #登陆成功,跳出登陆程序
break
count += 1 #对应密码不符合,while循环计数器加1
break
count += 1 #用户名不符合,while循环计数器加1
break
if count == 4: #如果不同用户名密码输错3次,关闭程序
print('More than 3 times wrong!') #打印提示信息
if len(c) == 3 and c[0] == c[1] == c[2]: #如果相同用户名密码输错3次,将该用户名加入黑名单,限制登陆
print('This user has been locked!')
f_locked.write(user+'\n') #将错误3次的用户名写入黑名单,注意,加换行符

Python基础-月考的更多相关文章

  1. python最全学习资料:python基础进阶+人工智能+机器学习+神经网络(包括黑马程序员2017年12月python视频(百度云链接))

    首先用数据说话,看看资料大小,达到675G 承诺:真实资料.不加密,获取资料请加QQ:122317653 包含内容:1.python基础+进阶+应用项目实战 2.神经网络算法+python应用 3.人 ...

  2. Python基础教程 - Tdcqma

      1.1 普通字符串 1.21 错误与异常 1.41 XXXXXX 1.61 XXXXXX 1.81 XXXXXX 1.101 XXXXXX 1.2 转义字符串 1.22 装饰器         1 ...

  3. S5第一次月考

    # Python五期月考一 # 1 介绍 # 满分100分,90分及格 # # 考试范围: # 1.Python语法 # 2.数据类型 # 3.流程控制 # 4.函数 # 5.模块 # # 考试时间: ...

  4. 快速掌握Python的捷径-Python基础前传(1)

    文: jacky(朱元禄) 开文序 最近看新闻,发现高考都考Python了,随着人工智能的火热,学数据科学的人越来越多了!但对于数据行业本身来说,现象级的火热,这并不是什么好事. 方丈高楼平地起,无论 ...

  5. Python基础s14-day1

    2016年7月23日"Python基础s14-Day1" Python是什么? Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),是一种面向对象.直译式 ...

  6. .Net程序员之Python基础教程学习----列表和元组 [First Day]

    一. 通用序列操作: 其实对于列表,元组 都属于序列化数据,可以通过下表来访问的.下面就来看看序列的基本操作吧. 1.1 索引: 序列中的所有元素的下标是从0开始递增的. 如果索引的长度的是N,那么所 ...

  7. Python基础学习笔记(十)日期Calendar和时间Timer

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-date-time.html 3. http://www.liao ...

  8. Python基础教程【读书笔记】 - 2016/7/31

    希望通过博客园持续的更新,分享和记录Python基础知识到高级应用的点点滴滴! 第十波:第10章  充电时刻 Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装包括 ...

  9. python 基础知识(一)

    python 基础知识(一) 一.python发展介绍 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本 ...

随机推荐

  1. 2.ajax+servlet实现注册时用户名验证

    效果: 精灵图(来源:从百度注册中download下来的): userVerify.jsp <%@ page language="java" contentType=&quo ...

  2. Shell基本知识

    Shell是什么 Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以使用Shell来启动.挂起.停止甚至编写一些程序. Shell还是一个功 ...

  3. 2018年10月19 手记 - 身为开发者的我de窘境

    从10月1国庆过完节回来,那已经是7号了,之后便开始紧锣密鼓的筹划着接下来11月份的公司组织的对外活动,这边新来的产品对产品或者说对任务很是负责,并且策划了很多的方案,并且乐意站在我们开发的角度上去考 ...

  4. 2.阿里实人认证 .net 准备工作2 转换demo

    1.引入阿里的SDK 2. 搬一下java 的代码 DefaultProfile profile = DefaultProfile.GetProfile( "cn-hangzhou" ...

  5. vue 之bug<1> Warn : [vue-router] Duplicate named routes definition:

    原因:定义重复的路由名称. 我有3个不同的(父级)vue文件分别配置了3个相同的(子级)vue文件,配置路由的js文件里子集路由的name重复了. 解决方案: 一天一个小Bug

  6. 删除centos 7 系统自带的 openjdk

    1.  查看是否系统自带openjdk. java -version 2. 查看jdk位置 rpm -qa | grep java 3. 删除jdk rpm -e --nodeps java--ope ...

  7. Docker部署Nginx应用(2)

    Docker部署Nginx应用(2) 1.拉取Nginx镜像 [root@localhost ~]# docker pull nginx Using default tag: latest lates ...

  8. javascript 正则表达式校验方式写法

    if(/[0-9]/.test(value)){return true; } if(/[a-z]/.test(value)){return true; } if(/[A-Z]/.test(value) ...

  9. 读取Cert格式证书的密钥

    不想存储Cert证书内容,只想存储证书密钥,可通过以下实现读取证书的密钥出来: package com.zat.ucop.service.util; import sun.misc.BASE64Enc ...

  10. 关于cmdbuild

    哪位大神用过cmdbuild,网上的资料非常少,而且都是关于如何安装的,就在这少只又少的文章里,居然还都是互抄的,哎!!!