python习题,关于函数相关的练习
习题1
lis = [['哇', ['how', {'good': ['am', 100, '99']}, '太白金星']]]
- 列表lis中的'am'变成大写
- 列表中的100通过数字相加在转换成字符串的方式变成'10010'
解:
lis = [['哇', ['how', {'good': ['am', 100, '99']}, '太白金星']]]
lis[0][1][1].get('good')[0] = lis[0][1][1].get('good')[0].upper()
lis[0][1][1].get('good')[1] = str(lis[0][1][1].get('good')[1] + 9910)
print(lis)
# 结果:
# [['哇', ['how', {'good': ['AM', '10010', '99']}, '太白金星']]]
习题2
dic = {'k1': 'v1', 'k2': ['alex', 'sb'], (1, 2, 3): {'k3': ['2', 100, 'wer']}}
-
将'k3'对应的值的最后面添加一个元素'23'
-
将'k2'对应的值的第0个位置插入元素'a'
-
将(1,2,3)对应的值添加一个键值对'k4':'v4'
解:
dic = {'k1': 'v1', 'k2': ['alex', 'sb'], (1, 2, 3): {'k3': ['2', 100, 'wer']}}
dic[(1, 2, 3)].get('k3').append('23')
dic['k2'].insert(0, 'a')
dic[(1, 2, 3)].update(k4='v4')
print(dic)
# 结果:
# {'k1': 'v1', 'k2': ['a', 'alex', 'sb'], (1, 2, 3): {'k3': ['2', 100, 'wer', '23'], 'k4': 'v4'}}
习题3
实现一个整数加法计算器(多个数相加)
例如:content = input('请输入内容:')用户输入:5 9 6 12 13
然后进行分割再进行计算
解:
import re
while True:
try:
nums = input('输入多个数(中间空格分隔开):')
if not re.match(r'([\s]*[0-9]+[\s]*){2,}$', nums):
print('输入有误!')
continue
nums = [i for i in (re.split(r'[\s]+', nums))]
if len(nums) < 2:
raise Exception('必须2个数及以上')
except Exception as e:
print('输入有误!')
continue
s = 0
for i in nums:
if i == '':
continue
s += int(i)
print(f'它们的和为:{s}')
break
# 结果:
# 输入多个数(中间空格分隔开):f1 2 d 3
# 输入有误!
# 输入多个数(中间空格分隔开):1234
# 输入有误!
# 输入多个数(中间空格分隔开): 1 2 3
# 它们的和为:6
习题4
请写一个电影投票程序.现在上映的电影列表如下:
lst = ['复仇者联盟4', '驯龙高手3', '金萍梅', '老男孩', '大话西游']
由用户给每一个电影投票,最终将该用户投票的信息公布出来
要求:
-
用户可以持续投票,用户输入序号,进行投票.
比如:输入序号1,给金萍梅投票1
-
每次投票成功,显示给哪部电影投票成功
-
退出投票程序后,要显示最终每个电影的投票数
建议最终投票的结果为这种形式:
解:
import re
lst = ['复仇者联盟4', '驯龙高手3', '金萍梅', '老男孩', '大话西游']
movies = {index: {'name': movie, 'count': 0} for index, movie in enumerate(lst, start=1)}
# 上映的票房信息
def print_movies():
for index, movie in movies.items():
print(f'序号:{index}\t影片:{movie["name"]}\t票数:{movie["count"]}')
# 更新票房信息
def update_movies(fun):
def inner():
while True:
print('提示:输入q退出!')
num = fun()
if not num:
break
movies[num]['count'] += 1
print(f'电影:【{movies[num]["name"]}】投票成功')
return inner
# 获取输入的编号
@update_movies
def get_movies_num():
while True:
num = input('输入投票的序号:').strip()
if num.upper() == 'Q':
return False
if not re.match(r'[1-9]+$', num):
print('输入有误!')
continue
else:
num = int(num)
if not 0 < num <= len(movies):
print('输入有误!')
continue
return num
def main():
print('**********投票前结果如下**********')
print_movies()
get_movies_num()
print('**********投票后结果如下**********')
print_movies()
if __name__ == '__main__':
main()
# 运行结果:
# **********投票前结果如下**********
# 序号:1 影片:复仇者联盟4 票数:0
# 序号:2 影片:驯龙高手3 票数:0
# 序号:3 影片:金萍梅 票数:0
# 序号:4 影片:老男孩 票数:0
# 序号:5 影片:大话西游 票数:0
# 提示:输入q退出!
# 输入投票的序号:1
# 电影:【复仇者联盟4】投票成功
# 提示:输入q退出!
# 输入投票的序号:6
# 输入有误!
# 输入投票的序号:2
# 电影:【驯龙高手3】投票成功
# 提示:输入q退出!
# 输入投票的序号:3
# 电影:【金萍梅】投票成功
# 提示:输入q退出!
# 输入投票的序号:4
# 电影:【老男孩】投票成功
# 提示:输入q退出!
# 输入投票的序号:2
# 电影:【驯龙高手3】投票成功
# 提示:输入q退出!
# 输入投票的序号:1
# 电影:【复仇者联盟4】投票成功
# 提示:输入q退出!
# 输入投票的序号:5
# 电影:【大话西游】投票成功
# 提示:输入q退出!
# 输入投票的序号:4
# 电影:【老男孩】投票成功
# 提示:输入q退出!
# 输入投票的序号:4
# 电影:【老男孩】投票成功
# 提示:输入q退出!
# 输入投票的序号:3
# 电影:【金萍梅】投票成功
# 提示:输入q退出!
# 输入投票的序号:q
# **********投票后结果如下**********
# 序号:1 影片:复仇者联盟4 票数:2
# 序号:2 影片:驯龙高手3 票数:2
# 序号:3 影片:金萍梅 票数:2
# 序号:4 影片:老男孩 票数:3
# 序号:5 影片:大话西游 票数:1
习题5
有文件t1.txt里面的内容为:
id,name,age,phone,job
1,Alex,22,13651054608,IT
2,taibai,23,13304320533,Tearcher
3,nezha,25,1333235322,IT
利用文件操作,将其构造成如下格式的数据类型
[{'id': '1', 'name': 'Alex', 'age': '22', 'phone': '13651054608', 'job': 'IT'}...]
解:
lst = []
# 本地数据
def load_local_info():
try:
with open('t1.txt', encoding='utf-8') as f1:
temp = None
for line in f1:
result = {}
line = line.strip('\n').split(',')
if temp == None:
temp = line
continue
for key, vaule in zip(temp, line):
result[key] = vaule
lst.append(result)
except FileNotFoundError:
with open('t1.txt', encoding='utf-8', mode='w') as f2:
pass
def main():
# 加载数据
load_local_info()
print(lst)
if __name__ == '__main__':
main()
# 运行结果:
# [{'id': '1', 'name': 'Alex', 'age': '22', 'phone': '13651054608', 'job': 'IT'}, {'id': '2', 'name': 'taibai', 'age': '23', 'phone': '13304320533', 'job': 'Tearcher'}, {'id': '3', 'name': 'nezha', 'age': '25', 'phone': '1333235322', 'job': 'IT'}]
习题6
按要求完成下列转化
list3 = [
{'name': 'alex', 'hobby': '抽烟'},
{'name': 'alex', 'hobby': '喝酒'},
{'name': 'alex', 'hobby': '烫头'},
{'name': 'alex', 'hobby': 'Massage'},
{'name': 'wusir', 'hobby': '喊麦'},
{'name': 'wusir', 'hobby': '街舞'}]
# 转化结果
# list4 = [
# {'name': 'alex', 'hobby_list': ['抽烟', '喝酒', '烫头', 'Massage']},
# {'name': 'wusir', 'hobby_list': ['喊麦', '街舞']}]
将list3这种数据类型转化成list4类型:代码必须支持可拓展
无论要求加多少数据,代码都可以转化
# 比如:
['name', 'wusir', 'hobby', '溜达'] # list3增加一个字典
{'name': 'wusir', 'hobby_list': ['rap', 'sing', 'dance']} # list4增加一个字典
{'name': '太白', 'hobby_list': ["开车"]} # list4增加一个字典
解:
list3 = [
{'name': 'alex', 'hobby': '抽烟'},
{'name': 'alex', 'hobby': '喝酒'},
{'name': 'alex', 'hobby': '烫头'},
{'name': 'alex', 'hobby': 'Massage'},
{'name': 'wusir', 'hobby': '喊麦'},
{'name': 'wusir', 'hobby': '街舞'}]
list4 = []
# 列表list3转为为list4的格式
def l3_l4(l3: list):
if not isinstance(l3, list):
raise Exception('参数有误,必须为列表类型!')
# 遍历源列表内的字典元素
for group in l3:
if list4 == []:
temp = {}
temp.update({'name': group['name'], 'hobby_list': [group['hobby']]})
list4.append(temp)
continue
flag_name = 0
i = 0
# 查看l3的组name,hobby是否在lst列表中
while i < len(list4):
# 查看l3的组name对应的value是否在lst列表中
if group.get('name') != list4[i].get('name'):
flag_name += 1
else:
index = i
i += 1
# 进入次数等于列表的循环次数 说明没有找到name对应的value值
if flag_name == len(list4):
temp = {}
temp.update({'name': group['name'], 'hobby_list': [group['hobby']]})
list4.append(temp)
else:
# 进入次数少于循环次数说明有对应name的value值
# 存在name后判断hobby_list列表内的元素是否重叠 利用集合特性去重
list4[index]['hobby_list'].append(group.get('hobby'))
list4[index]['hobby_list'] = list(set(list4[index]['hobby_list']))
# list3列表的元素添加
def add_list3(name='name', name_value=None, hobby='hobby', holly_value=None):
temp = {}
temp.update({name: name_value, hobby: holly_value})
list3.append(temp)
# list4列表的元素添加
def add_list4(temp: dict):
if not isinstance(temp, dict):
raise Exception('参数错误,必须是dict类型!')
if list4 == []:
list4.append(temp)
return True
# 判断是否在列表内
i = 0
count = 0
while i < len(list4):
# 判断列表内是否有该name
if list4[i].get('name') != temp.get('name'):
count += 1
else:
index = i
i += 1
# 如果相同则不在内
if count == len(list4):
list4.append(temp)
else:
# 存在name后判断列表内的元素是否重叠 利用集合特性去重
list4[index]['hobby_list'].extend(temp['hobby_list'])
list4[index]['hobby_list'] = list(set(list4[index]['hobby_list']))
def main():
add_list3(*['name', 'wusir', 'hobby', '溜达'])
print(f'列表list3:{list3}')
l3_l4(list3)
print(f'list3转化后的结果:{list4}')
add_list4({'name': 'wusir', 'hobby_list': ['rap', 'sing', 'dance']})
print(f'新添一个元素后的结果:{list4}')
add_list4({'name': '太白', 'hobby_list': ["开车"]})
print(f'在添一个元素后的结果:{list4}')
if __name__ == '__main__':
main()
# 运行结果:
# 列表list3:[{'name': 'alex', 'hobby': '抽烟'}, {'name': 'alex', 'hobby': '喝酒'}, {'name': 'alex', 'hobby': '烫头'}, {'name': 'alex', 'hobby': 'Massage'}, {'name': 'wusir', 'hobby': '喊麦'}, {'name': 'wusir', 'hobby': '街舞'}, {'name': 'wusir', 'hobby': '溜达'}]
# list3转化后的结果:[{'name': 'alex', 'hobby_list': ['烫头', 'Massage', '抽烟', '喝酒']}, {'name': 'wusir', 'hobby_list': ['溜达', '喊麦', '街舞']}]
# 新添一个元素后的结果:[{'name': 'alex', 'hobby_list': ['烫头', 'Massage', '抽烟', '喝酒']}, {'name': 'wusir', 'hobby_list': ['喊麦', '街舞', '溜达', 'sing', 'rap', 'dance']}]
# 在添一个元素后的结果:[{'name': 'alex', 'hobby_list': ['烫头', 'Massage', '抽烟', '喝酒']}, {'name': 'wusir', 'hobby_list': ['喊麦', '街舞', '溜达', 'sing', 'rap', 'dance']}, {'name': '太白', 'hobby_list': ['开车']}]

浙公网安备 33010602011771号