python基础练习题 经常更新
小练习
1.打印出jason
l1 = [11, 22, 'kevin', ['tony', 'jerry', [123, 456, 'jason']]]
# print(l1[3][2][2])
l2 = l1[3] # l2 = ['tony', 'jerry', [123, 456, 'jason']]
l3 = l2[2] # l3 = [123, 456, 'jason']
print(l3[2])
2.打印出大宝贝
d1 = {'name': 'jason', 'others': {'a1': 'heiheihei', 'a2': {'k1': 'hahaha', 'k2': 'hehehe', 'k3': '大宝贝'}}}
# print(d1['others']['a2']['k3'])
d2 = d1['others'] # d2 = {'a1': 'heiheihei','a2': {'k1': 'hahaha','k2': 'hehehe','k3': '大宝贝'}}
d3 = d2['a2'] # d3 = {'k1': 'hahaha','k2': 'hehehe','k3': '大宝贝'}
print(d3['k3'])
3.打印出run
data = {'username': 'jason', 'hobby': [11, 22, {'height': 183, 'hobby': ['read', 'run', 'music']}]}
# print(data['hobby'][2]['hobby'][1])
data1 = data['hobby'] # data1 = [11, 22, {'height': 183,'hobby': ['read' 'run','music']}]
data2 = data1[2] # data2 = {'height': 183,'hobby': ['read' 'run','music']}
data3 = data2['hobby'] # data3 = ['read' 'run','music']
print(data3[1])
九九乘法表
for a in range(1, 10):
for b in range(1, a+1):
print("%s*%s=%s\t" % (b, a, b*a,),end="")
print()
1.计算1-100所有的数之和
num = 0
for i in range(1,101):
num += i
print(num)
2.判断列表中数字2出现的次数
l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
num = 0
for i in l1:
if i == 2:
num += 1
print(num)
3.编写代码自动生成所有页网址(注意总共多少页)
https://movie.douban.com/top250
s = 'https://movie.douban.com/top250?start=%s&filter='
for i in range(0,251,25):
print(s % i)
4.编写代码打印出下列图形(ps:for循环嵌套)
*****
*****
*****
*****
for i in range(4):
for j in range(5):
print("*", end='')
print()
5.获取用户输入并打印成下列格式
------------ info of Jason -----------
Name : Jason
Age : 18
Sex : male
Job : Teacher
---------------- end -----------------
name = input('请输入名字>>>:')
age = input('请输入年龄>>>:')
sex = input('请输入性别>>>:')
job = input('请输入工作>>>:')
print("""
-------------info of %s---------
Name:%s
Age:%s
Sex:%s
Job:%s
----------------end-------------
"""% (name,name,age,sex,job))
6.说出下列变量名v绑定的结果
v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or False and 1
v1 = 1 or 3 # 1
v2 = 1 and 3 # 3
v3 = 0 and 2 and 1 # 0
v4 = 0 and 2 or 1 # 1
v5 = 0 and 2 or 1 or 4 # 1
v6 = 0 or False and 1 # False
or看两边是否有成立的,有一个成立就成立,输出为右边数值或者True
and如果左边成立则看右边,成立则看右边的值,True或False
7.利用列表编写一个员工管理系统
输入1执行添加用户名功能
输入2执行查看所有用户名功能
输入3执行删除指定用户名功能
'''分析 用户输入的不同 可以执行不同的代码'''
''' ps: 思考如何让程序循环起来并且可以根据不同指令执行不同操作
提示: 循环结构 + 分支结构
1.优化员工管理系统
拔高: 是否可以换成字典或者数据的嵌套使用完成更加完善的员工管理而不是简简单单的一个用户名(能写就写不会没有关系)
# 先定义一个空字典
# user_data_dict = {}
# # 建立循环
# while True:
# print("""
# 1.添加员工信息
# 2.修改员工薪资
# 3.查看指定员工信息
# 4.查看所有员工信息
# 5.删除员工信息
# """)
# # 获取需要查看的功能编码
# choice = input('请输入需要执行的功能编码>>>:').strip()
# # 判断输入的功能编码
# if choice == '1':
# # 获取员工信息
# emp_id = input('请输入员工编号>>>:').strip()
# # 判断员工编号是否存在
# if emp_id in user_data_dict:
# print('员工编号已存在,无法重复添加')
# continue
# # 获取员工其他信息
# emp_name = input('请输入员工姓名>>>:').strip()
# emp_age = input('请输入员工年龄>>>:').strip()
# emp_salary = input('请输入员工薪资>>>:').strip()
# # 定义一个员工小字典
# user_dict = {'emp_id': emp_id, 'emp_name': emp_name, 'emp_age': emp_age, 'emp_salary': emp_salary}
# # 员工小字典插入大字典
# user_data_dict[emp_id] = user_dict
# # 提示信息
# print(f'员工{emp_name}信息已添加完成')
# elif choice == '2':
# # 获取需要修改的员工编号
# target_id = input('请输入需要修改的员工编号>>>:').strip()
# # 判断编号是否存在
# if target_id not in user_data_dict:
# print('你输入的员工编号不存在,无法修改')
# continue
# # 获取对应员工字典数据
# user_dict = user_data_dict.get(target_id)
# # 获取员工新的薪资
# new_salary = input('请输入员工新的薪资>>>:').strip()
# # 修改员工字典数据
# user_dict['emp_salary'] = new_salary
# # 修改大字典数据
# user_data_dict[target_id] = user_dict
# # 打印提示
# print(f'编号为{target_id}的员工薪资成功修改为{new_salary}')
# elif choice == '3':
# # 获取需要查询的员工编号
# target_id = input('请输入需要查询的员工编号>>>:').strip()
# # 判断编号是否存在
# if target_id not in user_data_dict:
# print('你输入的员工编号不存在,无法查询')
# continue
# # 获取指定用户字典信息
# user_dict = user_data_dict.get(target_id)
# print("""
# ------------user info----------
# 员工编号:%s
# 员工姓名:%s
# 员工年龄:%s
# 员工薪资:%s
# -----------------end-----------
# """ % tuple(user_dict.values()))
# elif choice == '4':
# # 获取员工信息并打印
# for user_dict in user_data_dict.values():
# print("""
# -------------user info---------
# 员工编号:%s
# 员工姓名:%s
# 员工年龄:%s
# 员工薪资:%s
# -----------------end-----------
# """ % tuple(user_dict.values()))
# elif choice == '5':
# # 获取需要删除的员工编号
# delete_id = input('请输入需要删除的员工编号>>>:').strip()
# # 判断编号是否存在
# if delete_id not in user_data_dict:
# print('你输入的员工编号不存在,无法删除')
# continue
# res = user_data_dict.pop(delete_id)
# print(f'员工信息已删除完成', res)
# else:
# print("请输入正确的功能编码")
第二种写法
# 先定义一个空字典
# user_data_dict = {}
# 1.先搭建系统骨架
# while True:
# print("""
# 1.创建员工信息
# 2.查看单个员工
# 3.查看所有员工
# 4.修改员工薪资
# 5.删除员工信息
# """)
# choice = input('请选择您想要执行的功能编号>>>:').strip()
# if choice == '1':
# while True:
# # 1.获取员工编号
# emp_id = input('请输入该员工的员工编号(q)>>>:').strip()
# if emp_id == 'q':
# break
# # 判断编号是否是纯数字
# if not emp_id.isdigit():
# print('员工编号必须是纯数字')
# continue
# # 2.判断员工编号是否已存在
# if emp_id in user_data_dict:
# print('员工编号已存在 请重新录入')
# continue
# # 3.获取员工详细信息
# username = input('请输入员工姓名>>>:').strip()
# age = input('请输入员工年龄>>>:').strip()
# job = input('请输入员工岗位>>>:').strip()
# salary = input('请输入员工薪资>>>:').strip()
# # 4.构建一个临时的小字典
# temp_dict = {}
# # 5.添加员工信息键值对
# temp_dict['emp_id'] = emp_id
# temp_dict['name'] = username
# temp_dict['age'] = age
# temp_dict['job'] = job
# temp_dict['salary'] = salary
# # 6.添加到大字典中
# user_data_dict[emp_id] = temp_dict
# print(f'员工{username}添加成功')
# elif choice == '2':
# while True:
# # 1.先获取员工编号
# target_id = input('请输入您想要查看的员工编号(q)>>>:').strip()
# if target_id == 'q':
# break
# # 2.判断员工编号是否不存在
# if target_id not in user_data_dict:
# print('员工编号不存在 无法查看')
# continue
# # 3.根据员工编号获取员工字典数据
# user_dict = user_data_dict.get(target_id)
# # 4.格式化输出
# print(f"""
# --------------info of emp-------------------
# 编号:{user_dict.get('emp_id')}
# 姓名:{user_dict.get('name')}
# 年龄:{user_dict.get('age')}
# 岗位:{user_dict.get('job')}
# 薪资:{user_dict.get('salary')}
# --------------------------------------------
# """)
# elif choice == '3':
# for user_dict in user_data_dict.values():
# print(f"""
# --------------info of emp-------------------
# 编号:{user_dict.get('emp_id')}
# 姓名:{user_dict.get('name')}
# 年龄:{user_dict.get('age')}
# 岗位:{user_dict.get('job')}
# 薪资:{user_dict.get('salary')}
# --------------------------------------------
# """)
# elif choice == '4':
# while True:
# # 1.先获取想要修改的员工编号
# target_id = input('请输入您想要修改的员工编号(q)>>>:').strip()
# if target_id == 'q':
# break
# if target_id not in user_data_dict:
# print('员工编号不存在')
# continue
# # 2.获取新的薪资
# new_salary = input('请输入该员工的新薪资待遇>>>:').strip()
# if not new_salary.isdigit():
# print('薪资只能是纯数字')
# continue
# # 3.获取员工字典
# user_dict = user_data_dict.get(target_id) # {'salary':123}
# # 4.修改字典中的薪资
# user_dict['salary'] = new_salary # {'salary': 321}
# # 5.修改大字典
# user_data_dict[target_id] = user_dict
# print(user_data_dict.get(target_id))
# elif choice == '5':
# while True:
# # 1.先获取想要删除的员工编号
# target_id = input('请输入您想要删除的员工编号(q)>>>:').strip()
# if target_id == 'q':
# break
# if target_id not in user_data_dict:
# print('员工编号不存在')
# continue
# # 2.字典删除键值对
# user_data_dict.pop(target_id)
# else:
# print('抱歉 暂无该功能编号!!!')
8.去重下列列表并保留数据值原来的顺序
eg: [1,2,3,2,1] 去重之后 [1,2,3]
l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
# l1 = [2,3,2,1,2,3,2,3,4,3,4,3,2,3,5,6,5]
# # 定义一个空列表
# s = []
# for i in l1:
# if i not in s:
# s.append(i)
# print(s)
9.有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合
# pythons={'jason','oscar','kevin','ricky','gangdan','biubiu'}
# linuxs={'kermit','tony','gangdan'}
# # 1. 求出即报名python又报名linux课程的学员名字集合
# print(pythons & linuxs)
# # 2. 求出所有报名的学生名字集合
# print(pythons | linuxs)
# 3. 求出只报名python课程的学员名字
# print(pythons - linuxs)
# # 4. 求出没有同时报这两门课程的学员名字集合
# print(pythons ^ linuxs)
4.统计列表中每个数据值出现的次数并组织成字典
eg: l1 = ['jason','jason','kevin','oscar']
结果:{'jason':2,'kevin':1,'oscar':1}
真实数据
l1 = ['jason','jason','kevin','oscar','kevin','tony','kevin']
# s = {}
# for i in l1:
# if i not in s:
# s[i] = 1
# else:
# s[i] += 1
# print(s)
1.编写简易版本的拷贝工具
自己输入想要拷贝的数据路径 自己输入拷贝到哪个地方的目标路径
任何类型数据皆可拷贝
ps:个别电脑C盘文件由于权限问题可能无法拷贝 换其他盘尝试即可
1.获取想要拷贝的文件路径
source_file_path = input('请输入您想要拷贝的文件路径>>>:').strip()
2.获取目标文件的路径
target_file_path = input('请输入您想要拷贝到哪个地方的路径>>>:').strip()
3.打开第一个文件路径 读取内容写入第二个文件路径中
with open(r'%s' % source_file_path, 'rb') as read_f, open(r'%s' % target_file_path, 'wb') as write_f:
for line in read_f:
write_f.write(line)
2.利用文件充当数据库编写用户登录、注册功能
文件名称:userinfo.txt
基础要求:
用户注册功能>>>:文件内添加用户数据(用户名、密码等)
用户登录功能>>>:读取文件内用户数据做校验
ps:上述功能只需要实现一次就算过关(单用户) 文件内始终就一个用户信息
拔高要求:
用户可以连续注册
用户可以多账号切换登录(多用户) 文件内有多个用户信息
ps:思考多用户数据情况下如何组织文件内数据结构较为简单
提示:本质其实就是昨天作业的第二道题 只不过数据库由数据类型变成文件
# while True:
# print("""
# 1.注册功能
# 2.登陆功能
# """)
# choice = input('请输入你需要执行的功能>>>:').strip()
# if choice == '1':
# username = input('please input your username>>>:').strip()
# password = input('please input your password>>>:').strip()
# # 2.校验用户名和密码已存在
# with open(r'userinfo.txt', 'r', encoding='utf8') as f:
# for line in f: # jason|123
# real_name, real_pwd = line.split('|')
# if username == real_name:
# print('用户已存在,无法完成注册')
# break # 一旦重复 没有必要继续往下校验是否重复了 直接结束循环
# else:
# with open(r'userinfo.txt', 'a', encoding='utf8') as f1:
# f1.write(f'{username}|{password}\n')
# print(f'用户{username}注册成功')
# elif choice == '2':
# username = input('please input your username>>>:').strip()
# password = input('please input your password>>>:').strip()
# # 2.打开文件读取内容并校验
# with open(r'userinfo.txt', 'r', encoding='utf8') as f:
# for line in f: # jason|123
# real_name, real_pwd = line.split('|') # 'jason' '123\n'
# if real_name == username and real_pwd.strip('\n') == password:
# print('登陆成功')
# break
# else:
# print('用户名和密码错误')
# else:
# print('没有当前功能编号')
1.利用递归函数依次打印列表中每一个数据值
l1 = [1, [2, [3, [4, [5, [6, [7, [8, ]]]]]]]]
# 方法1:胡
def print_item(l):
print(l[0])
if len(l) == 1:
return l[0]
return print_item(l[1])
print_item(l1)
# 方法2:
# print(isinstance(123,int)) # 判断第一个数据值是不是属于第二个参数指定的数据类型
# print(isinstance(123,str)) # 判断第一个数据值是不是属于第二个参数指定的数据类型
def get_num(l1):
for i in l1:
if isinstance(i, int):
print(i)
else:
return get_num(i)
get_num(l1)
2.利用有参装饰器编写多种用户登录校验策略
def login_auth(condition):
def outer(func_name):
def inner(*args,**kwargs):
# 获取用户名和密码
username = input('please input your username>>>:').strip()
password = input('please input your password>>>:').strip()
# 判断校验的策略
if condition == 'absolute':
if username == 'jason' and password == '123':
res = func_name(*args, **kwargs)
return res
else:
print('用户名和密码错误')
elif condition == 'list_type':
user_list = ['jason|123', 'tony|321', 'kevin|222']
user_data = f'{username}|{password}'
if user_data not in user_list:
res = func_name(*args, **kwargs)
return res
else:
print('用户名和密码错误')
elif condition == 'file_type':
with open(r'userinfo.txt','r',encoding='utf8')as f:
for line in f:
real_name, real_pwd = line.split('|')
if real_name == username and real_pwd.strip('\n') == password:
res = func_name(*args, **kwargs)
return res
return inner
return outer
@login_auth('absolute')
def index(*args,**kwargs):
print('form index')
@login_auth('list_type')
def func(*args,**kwargs):
print('from func')
@login_auth('file_type')
def func1(*args,**kwargs):
print('from func1')
index()
func()
func1()
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
统计 {'k1'[小于60], 'k2':[大于60]}
# 1.先定义字典数据
# num_dict = {'k1': [], 'k2': []}
# 2.for循环列表数据
# for i in l1:
# if i > 60:
# num_dict.get('k2').append(i)
# else:
# num_dict.get('k1').append(i)
# print(num_dict)