1 介绍
满分120分,90分及格
考试范围:
- Python语法
- 数据类型
- 流程控制
- 文件处理
考试时间:
周三下午2.00点-晚6:30
2 基础题(50分)
- 请说明python解释器与python语言的区别或联系(1分)
Python语言就是一个编程语言,是人与机器沟通的桥梁
Python解释器解释把人类的语言翻译成机器能听懂的语言,让机器代替人力
- 执行python脚本的两种方式是?(1分)
交互 。脚本运行
- python如何实现单行注释和多行注释(1分)
单行用# 多行用’’’ ‘’’
- 定义一个变量有三个特性,分别为?(1分)
Id type value
等号比较的是什么?(1分)
值
is比较的是什么?(1分)
id
- 使用链式赋值的方式将10赋值给变量x、y、z(1分)
X=y=z=10
- count=10,使用增量赋值,将count的值增加111(1分)
count+=111
- 使用一行代码将info=[‘egon’,18,’male’]将列表中用户的名字,年龄,性别分别赋值给变量name,age,gender(1分)
Name=info[0],age=info[1],gender=info[2]
- 编写猜年龄程序(2分)
a) 要求用户输入年龄,然后与程序后台存放的年龄进行比较,然后打印不同的提示信息,提示用户猜大了or猜....
b) 要求最多才三次则退出程序
Age=18
Count=0
While ount<3:
Inp_name=input(‘输入年龄:’)
If inp_name==age:
Print(‘猜对了’)
Count+=1
Break
Else:
Print('超过三次,重新输入’)
- 简述数据类型int,str,list,tuple,dict,set的应用场景(1分)
整型int
用来表示:等级,年龄,身份证号,学号,id号
字符串str:包含在引号(单引号,双引号,三引号)内的一串字符
用来表示:名字,家庭住址,描述性的数据
列表:定义在[]中括号内,用逗号分隔开多个值,值可以是任意类型
用来存放多个值:多个爱好,多个人名
元组按索引取值(正向取+反向取):只能取
字典:定义{}内用逗号分隔开,每一个元素都是key:value的形式,其中value可以是任意类型,而key一定要是不可变类型
集合:定义方式:在{}内用逗号分隔开一个个元素
注意的问题
集合内没有重复的元素
集合的元素必须是不可变类型
- 有列表data=[‘alex’,49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日赋值给不同的变量(1分)
Name=data【0】,age=data【1】,
- 有如下列表,请取出第三个学生的第1个爱好(1分)
students=[
{'name':'alex','age':38,'hobbies':['play','sleep']},
{'name':'egon','age':18,'hobbies':['read','sleep']},
{'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']},
] student【2】【3】【0】
- 有列表 students_info=[[‘egon’,18,[‘play',]],['alex',18,['play','sleep']]],请取出第二个学生的第二个爱好(1分)
- 所有数据类型自带布尔值,布尔值为假的有?(1分)
空 0 None
- 请判断下述代码的结果为?(1分)
print(10 > 3 and 'alex' != 'sb' or 'abc' > 'd') 真
print(10 > 3 and 'alex' == 'sb' or 'abc' < 'd') 假
print(10 > 3 or 'alex' < 'sb' or 'abc' < 'd' and 'egon' == ‘nb') 真
- 阅读代码,请写出执行结果
代码一:(1分)
if True or False and False:
print('yes')
else:
print('no') 真
代码二:(1分)
if (True or False) and False:
print('yes')
else:
print('no') 假
16. 请使用while和for两种方式来循环所有可循环的数据类型(while:1分,for:1分),比如
编写for循环,利用索引遍历出每一个字符
msg='hello egon 666’
for item in mag:
print(‘mag’)
编写while循环,利用索引遍历出每一个字符
msg='hello egon 666’
while True
print(msg【0:13】)
- 编写while循环,让用户输入用户名和密码,如果用户为空或者数字,则重新输入(1分)
While Ture:
Name=input(‘输入用户名:’)
Pwd=input(‘输入密码:’)
If not name.isdbhr():
Continu
18. 输出1-100内所有的奇数(1分)
Count=1
while count<101:
if count%2=0
print(‘count’)
count+=1
- 使用while循环输出1 2 3 4 5 6 8 9 10(1分)
Count+=1
While count<=10:
If count!=7:
Print(‘count’)
- 求1-2+3-4+5 ... 99的所有数的和(1分)
Res=0
Count=1
While count<=5:
If count%2==0:
Res-=count
Else
Res+=count
Print(res)
21. 请说明break与continue的区别(1分)
Break 跳过本次循环
Continu 跳过本层循环
- 常用数据类型有:字符串,列表,元组,字典,集合,请分类
按照存值个数分类?(1分)
标量:数字,字典
容器:列表,元组,字典
按照可变不可变类型分类?(1分)
可以变: 列表 字典
不可以变:数字,字符串 元组
按照取值方式分类(直接取值,按索引,按key取)?(1分)
顺序 字符串,列表元组,字典 key:字典
直接:数字
按照有序无序分类?(1分)
有:元组,列表 无:字典,集合
- 阅读代码,请写出执行结果 (1分)
a = "alex"
b = a.upper()
print(a)
alex
print(b)
ALEX
- 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分)
name = " aleX"
1) 移除 name 变量对应的值两边的空格,并输出处理结果
Print(name.strip())
2) 判断 name 变量对应的值是否以
"al" 开头,并输出结果
print(name.startawith(al))
3) 判断 name 变量对应的值是否以 "X"
结尾,并输出结果
print(name.endswith(x))
4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
Print(name.replace(‘l’,’p’))
5) 将 name 变量对应的值根据 “l” 分割,并输出结果。
Print(name.split(‘l’)
6) 将 name 变量对应的值变大写,并输出结果
print(name.upper(alex))
7) 将 name 变量对应的值变小写,并输出结果
print(name.lower())
8) 请输出 name 变量对应的值的第 2 个字符?
Print(name[1])
9) 请输出 name 变量对应的值的前 3 个字符?
Print(name[:3])
10) 请输出 name 变量对应的值的后 2 个字符?
print(name[-2:1])
11) 请输出 name 变量对应的值中 “e” 所在索引位置?
print(name.index(‘e’))
12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
Print(name[:-1])
- 有变量msg='/etc/a.txt|365|get'(1分)
将该变量中的文件名,文件大小,操作方法切割出来
Print(msg.split(‘/’).split(‘|’))
- msg='hello alex'中的alex替换成SB(1分)
print(msg.replace(‘alex’,’sb’))
- 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。(1分)
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
A={‘k1’:[],’k2’:[]}
C=[11,22,33,44,55,66,77,88,99,90]
For I in c:
If i>66:
A[‘k1’].append(i)
Else:
A[‘k2’].append(i) print(a)
- 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
pythons={‘alex’,’egon’,’yuanhao’,’wupeiqi’,’cobila’,’biubiu’}
linuxs={‘wupeiqi’,’oldboy’,’cobila’}
求出即报名python又报名linux课程的学员名字集合(1分)
Print(python & linux)
求出所有报名的学生名字集合(1分)
Print(python | linux)
求出只报名python课程的学员名字(1分)
Print(pythons - linuxs)
求出没有同时这两门课程的学员名字集合(2分)
Print(python ^ linuxs)
29. 什么是字符编码,如何避免乱码问题?(1分)
字符——翻译——数字,,用什么方式存就用什么方式取
30. unicode转成utf-8的过程称为encode还是decode(1分)
encode
- 在python3中bytes类型与unicode类型二者之间如何相互转换?(1分)
encode('gbk') 的结果xc9xcf正是python2中的str类型的值,而在python3是bytes类型,在python2中则是str类型
- 使用with语法以文本的方式打开一个文件,并读出文件所有内容(1分)该内容的数据类型是?(1分)
字符串
- 以b的方式打开文件,覆盖写入新内容’你好啊wxx’(1分)
With open(‘b.txt’,‘rb’)as f:
Data=f.read():
Data=data..replace(‘b’,’你好啊’)
With open(‘b.txt’,’wb’)as f:
f.write(data)
3 综合题(70分)
- 编写登陆接口
基础需求:(4分)
• 让用户输入用户名密码
• 认证成功后显示欢迎信息
• 输错三次后退出程序
dic={
'egon':{'password':'123','count':0},
'egon1':{'password':'123','count':0},
'egon2':{'password':'123','count':0},
}
while True:
name=input('用户名:')
if not name in dic:
print('用户名不存在')
continue
if dic[name]['count']>2:
print('次数过多,锁定')
continue
pwd=input('输入密码:')
if pwd==dic[name]['password']:
print('登录成功')
break
else:
print('用户名或者密码错误')
dic[name]['count']+=1
升级需求:(6分)
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
dic={
'egon':{'password':'123','count':0},
'egon1':{'password':'123','count':0},
'egon2':{'password':'123','count':0},
}
count=0
while True:
name=input('输入用户名:').strip()
if name not in dic:
print('用户名不存在')
continue
with open('b.txt',mode='r')as f:
lock_users=f.read().strip('|')
if name in lock_users:
print('用户%s已经被锁定' %name)
break
if dic[name]['count']>2:
print('次数过多,锁定')
with open('b.txt',mode='w')as f:
f.write('%s|' %name)
break
pwd=input('输入密码:')
if pwd ==dic[name]['password']:
print('登录成功')
break
else:
print('用户名或者密码错误')
dic[name]['count']+=1
- 利编写拷贝文件的程序,要求(10分)
a) 可以拷贝任意类型的文件
3. import sys
l=sys.argv
sre_of_path=l[1]
dst_of_path=l[2]
with open(r'%s' %sre_of_path,mode='rb')as read_f,
open(r'%s' %dst_of_path,mode='wb')as write_f:
for line in read_f:
write_f.write(line)
a) 在命令行中执行,命令的格式为:python3 copy.py src_file dst_file
- 请用两种方式实现,将文件中的alex全部替换成SB的操作(20分)
4. with open('db.txx',mode='r',encoding='utf-8')as f:
data=f.read()
data=data.replace('alex','sb')
with open('db.txt.swap',mode='w',encoding='utf-8')as f:
f.write(data)
import os
with open('db.txt',mode='r',encoding='uft-8')as read_f,
open('db.txt..sawp',mode='w',encoding='utf-8')as write_f:
for line in read_f:
if 'alex'in line:
line=line.replace('alex','sb')
write_f.write(line)
os.remove('db.txt')
os.rename('db.txt.sawp','db.txt')
- 编写购物车程序,实现注册,登陆,购物,查看功能,数据基于文件存取(30分)
import os
product_list = [['Iphone7',5800],
['Coffee',30],
['疙瘩汤',10],
['Python Book',99],
['Bike',199],
['ViVo X9',2499],
]
shopping_cart={}
current_userinfo=[]
db_file=r'db.txt'
while True:
print('''
登录
注册
购物
''')
choice=input('输入编号:')
if choice=='1':
tag=True
count=0
while tag:
if count==3:
print('次数过多,退出')
break
uname=input('输入用户名:')
pwd=input('输入密码:')
with open(db_file,mode='r',encoding='utf-8')as f:
for line in f:
line=line.strip(' ')
user_info=line.strip(',')
uname_of_db=user_info[0]
pwd_of_db=user_info[1]
balance_of_db=int[user_info[2]]
if uname==uname_of_db and pwd==pwd_of_db:
print('登录成功')
current_userinfo=[uname_of_db,balance_of_db]
print('用户学习:',current_userinfo)
tag=False
break
else:
print('用户名或者密码错误')
count+=1
elif choice=='2':
uname=input('输入用户名:')
while True:
pwd1=input('输入密码:')
pwd2=input('在次输入密码:')
if pwd2==pwd1:
break
else:
print('两次密码不一样')
balance=input('输入余额')
with open(db_file,mode='w',encoding='utf-8')as f:
f.write('%s,%s,%s ' %(uname,pwd1,balance))
elif choice =='3':
if len(current_userinfo)==0:
print('请先登录')
else:
uname_of_db=current_userinfo[0]
balance_of_db=current_userinfo[1]
print('尊敬的用户[%s] 你的余额[%s],祝你购物愉快' %(uname_of_db,balance_of_db))
tag = True
while tag:
for index, product in enumerate(product_list):
print(index, product)
choice = input('输入商品编号购物,输入q退出>>: ').strip()
if choice.isdigit():
choice = int(choice)
if choice < 0 or choice >= len(product_list): continue
pname = product_list[choice][0]
pprice = product_list[choice][1]
if balance_of_db > pprice:
if pname in shopping_cart: # 原来已经购买过
shopping_cart[pname]['count'] += 1
else:
shopping_cart[pname] = {'pprice': pprice, 'count': 1}
balance_of_db -= pprice # 扣钱
current_userinfo[1] = balance_of_db # 更新用户余额
print(
"Added product " + pname + " into shopping cart,