所有实验的实验要求
按照本实验要求的后续实验内容编写代码,运行结果即可。每一个实验都必须编写实验报告,要求如下:

  1. 实验报告用word编写,后缀是docx;
  2. word文件命名的格式统一要求:为以“杨健”同学19号为例,他所做的第4次实验的实验报告应该命令为:“Python实验4—物联11502 — 19号—杨健” (即格式是:实验序号—班级名—班内序号—姓名);

3、实验报告用统一的封面,封面模板到时发给大家;
4、报告中截取每题的源码截图、实验结果截图
5、实验报告最后要加上实验总结,总结部分必须写出自己的切身体会
6、实验报告如有雷同、抄袭现象,后果自负;
7、实验报告上交截止时间:上机后一周之内
8、实验上交方式:由学委收集齐全后,统一交付老师:

实验1:Python基础训练

一、实验目的
1、掌握Python开发应用程序的步骤;
2、掌握实验平台(推荐Pycharm)的使用方法及使用步骤;
2、熟悉Python语言的基本要素,包括基本数据类型、数组等;
3、熟悉Python程序控制的几种流程;

二、实验环境
装有Python运行环境、Pycharm平台的PC电脑一台

三、实验内容
1、编写一个程序,将用户输入的两个变量进行相互交换。要求不使用临时变量实现。
image.png
2、有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
image.png
3、输入某年某月某日,判断这一天是这一年的第几天?
image.png
4、所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。利用for循环控制100-999个数,每个数分解出个位,十位,百位。
image.png
5、如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5^3 + 3^3 = 153。1000以内的阿姆斯特朗数: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。请编写程序,检测用户输入的数字是否为阿姆斯特朗数。
image.png
6、素数(prime number)又称质数,有无限个。除了1和它本身以外不再被其他的除数整除。请编写一个程序,输出指定范围内的素数:
image.png
7、编写一个程序,实现简单计算器实现,包括两个数基本的加减乘除运算。

  1. """
  2. 7、编写一个程序,实现简单计算器实现,包括两个数基本的加减乘除运算。
  3. """
  4. # 定义函数
  5. def add(x, y):
  6. """相加"""
  7. return x + y
  8. def subtract(x, y):
  9. """相减"""
  10. return x - y
  11. def multiply(x, y):
  12. """相乘"""
  13. return x * y
  14. def divide(x, y):
  15. """相除"""
  16. return x / y
  17. # 用户输入
  18. print("选择运算:")
  19. print("1、相加")
  20. print("2、相减")
  21. print("3、相乘")
  22. print("4、相除")
  23. choice = input("输入你的选择(1/2/3/4):")
  24. num1 = int(input("输入第一个数字: "))
  25. num2 = int(input("输入第二个数字: "))
  26. if choice == '1':
  27. print(num1, "+", num2, "=", add(num1, num2))
  28. elif choice == '2':
  29. print(num1, "-", num2, "=", subtract(num1, num2))
  30. elif choice == '3':
  31. print(num1, "*", num2, "=", multiply(num1, num2))
  32. elif choice == '4':
  33. print(num1, "/", num2, "=", divide(num1, num2))
  34. else:
  35. print("非法输入")

image.png
8、编写程序,解一元二次方程 ax^2+bx+c=0。
image.png
9、某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
image.png
10、猜数游戏。
编写程序模拟猜数游戏。程序运行时,系统生成一个随机数,然后提示用户进行猜测,并根据用户输入进行必要的提示(猜对了、太大了、太小了),如果猜对则提前结束程序,如果次数用完仍没有猜对,提示游戏结束并给出正确答案。
image.png

11、使用蒙特·卡罗方法计算圆周率近似值。
蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计算问题。假设有一块边长为 2 的正方形木板,上面画一个单位圆,如下图所示。
Python16学时上机题目%26要求等 - 图11
然后随意往木板上扔飞镖,落点坐标(x, y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以 4,这个数字会无限逼近圆周率的值。这就是蒙特·卡罗发明的用于计算圆周率近似值的方法。编写程序,模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。
image.png
image.png

实验2 字符串训练

一、实验目的
1、掌握字符串的输入输出;
2、理解字符串的存储方式,掌握字符串切片;
3、掌握常见的字符串内建函数的使用;
4、掌握常见的字符串运算符应用。

二、实验环境
装有Python运行环境、Pycharm平台的PC电脑一台

三、实验内容
1、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
image.png
2、字符串大小写转换:1)将用户输入的字符串全部转换为大写字母;2)将用户输入的字符串全部转为小写字母等。
image.png
3、求正整数与其反序数之和:键盘输入正整数n,求出n与其反序数之和并输出,例如,输入2038,输出应为2038+8302=10340
image.png
4、编写一个程序,演示Python字符串中和判断有关的方法的使用。
字符串中常见的判断操作的方法如下所示:

  1. isalnum(): 判断所有字符都是数字或者字母
  2. isalpha(): 判断所有字符都是字母
  3. isdigit():判断所有字符都是数字
  4. islower():判断所有字符都是小写
  5. isupper():判断所有字符都是大写
  6. istitle():判断所有单词都是首字母大写,像标题
  7. isspace():判断所有字符都是空白字符、\t、\n、\r

image.png
5、编写一个程序,演示Python字符串的替换、删除、截取、复制、连接、比较、查找、包含、分割等操作;

  1. """
  2. 5、编写一个程序,演示Python字符串的替换、删除、截取、复制、连接、比较、查找、包含、分割等操作;
  3. """
  4. # str=input("请输入一个字符:") #weng
  5. str="wengweng"
  6. # 替换
  7. """
  8. replace(old,new [,max])
  9. 把将字符串中的old替换成new,如果max指定,则替换不超过max次。
  10. """
  11. print("e替换成s:",str.replace("e","s"))
  12. # 删除
  13. print("删除w:",str.strip("w"))
  14. # 截取
  15. print("截取第一位到第三位的字符:",str[0:3]) #截取第一位到第三位的字符
  16. print("截取字符串的全部字符:",str[:]) #截取字符串的全部字符
  17. print("截取第七个字符到结尾:",str[6:]) #截取第七个字符到结尾
  18. print("截取从头开始到倒数第三个字符之前:",str[:-3]) #截取从头开始到倒数第三个字符之前
  19. print("截取第三个字符:",str[2]) #截取第三个字符
  20. print("截取倒数第一个字符:",str[-1]) #截取倒数第一个字符
  21. print("创造一个与原字符串顺序相反的字符串:",str[::-1]) #创造一个与原字符串顺序相反的字符串
  22. print("截取倒数第三位与倒数第一位之前的字符:",str[-3:-1]) #截取倒数第三位与倒数第一位之前的字符
  23. print("截取倒数第三位到结尾:",str[-3:]) #截取倒数第三位到结尾
  24. print("逆向截取,倒数第一位与倒数第五位之间的字符,步长为3:",str[:-5:-3]) #逆向截取,倒数第一位与倒数第五位之间的字符,步长为3
  25. # 复制
  26. str1=str[0:4]
  27. print("复制:",str1)
  28. # 连接
  29. print("连接:",str+str1)
  30. # 比较
  31. print("比较:",str==str1)
  32. # 查找
  33. print("查找:",str.find("weng"))
  34. # 包含
  35. print("包含:",str.find("ng"))
  36. # 分割
  37. print("分割:",str.split("n"))

image.png

6、对李之仪的《卜算子》进行分词,并查看分词结果:即对每个单词计数,并保存到字典类型 counts 中,然后按照单词出现的次数从高到低排序。

  1. """
  2. 6、对李之仪的《卜算子》进行分词,并查看分词结果:即对每个单词计数,并保存到字典类型 counts 中,然后按照单词出现的次数从高到低排序。
  3. """
  4. import jieba
  5. txt='''
  6. 卜算子
  7. 【宋】李之仪
  8. 我住长江头,君住长江尾。
  9. 日日思君不见君,共饮长江水。
  10. 此水几时休?此恨何时已?
  11. 只愿君心似我心,定不负相思意。
  12. '''
  13. words = jieba.lcut(txt)
  14. counts = {}
  15. for word in words:
  16. if len(word) == 1:
  17. continue
  18. else:
  19. rword = word
  20. counts[rword] = counts.get(rword,0) + 1
  21. items = list(counts.items())
  22. items.sort(key=lambda x:x[1], reverse=True)
  23. for item in items:
  24. print(item)

image.png

实验3 列表、元组和字典的使用训练

一、实验目的
1、掌握列表的概念,使用场景和使用步骤;
2、掌握元组的概念,使用场景和使用步骤;
3、掌握字典的概念,使用场景和使用步骤;

二、实验环境
装有Python运行环境、Pycharm平台的PC电脑一台

三、实验内容
1、用列表实现:输入三个整数x,y,z,请把这三个数由小到大输出。
image.png
2、现有一个班级的学生数学成绩list(可随机生成40名同学的数学成绩),要求统计及格人的平均成绩。

  1. """
  2. 2、现有一个班级的学生数学成绩list(可随机生成40名同学的数学成绩),要求统计及格人的平均成绩。
  3. """
  4. import random
  5. def get_level(score):
  6. if 90 < score <= 100:
  7. return '非常优秀'
  8. elif 80 < score <= 90:
  9. return '优秀'
  10. elif 60 < score <= 80:
  11. return '及格'
  12. else:
  13. return '不及格'
  14. def main():
  15. for i in range(40):
  16. score = random.randint(1, 100)
  17. level = get_level(score)
  18. print("成绩: %s, 等级: %s" % (score, level))
  19. if __name__ == "__main__":
  20. main()

image.png
3、编写程序,输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表;
image.png
4、求一个3*3矩阵主对角线元素之和。
image.png
5、计算两个矩阵相加。
image.png
6、利用列表实现石头剪刀布游戏;

  1. """
  2. 6、利用列表实现石头剪刀布游戏;
  3. """
  4. import random
  5. allList=['石头','剪刀','布']
  6. winList=[['石头','剪刀'],['剪刀','布'],['布','石头']] #定义胜的情况
  7. chum=-1
  8. prompt='''
  9. 欢迎参加游戏,请选择对应的数字
  10. 0 石头,1 剪刀,2 布,3 我不想玩了
  11. '''
  12. while True:
  13. chnum=input(prompt)
  14. if chnum not in['0','1','2','3']:
  15. print("无效的选择,请选择0/1/2/3")
  16. continue
  17. if chnum=='3':
  18. break
  19. cchoice=random.choice(allList) #电脑随机选择'石头','剪刀','布'
  20. uchoice=allList[int(chnum)]
  21. print("您选择了:{}\n计算机选择了:{}".format(uchoice,cchoice))
  22. if uchoice==cchoice:
  23. print("平局")
  24. elif [uchoice,cchoice] in winList: #胜的情况
  25. print("你赢了!!!")
  26. else:
  27. print("你输了!!!")
  28. print("游戏结束!")

image.png

7、编写程序,模拟抓狐狸小游戏。假设一共有一排 5 个洞口,小狐狸最开始的时候在其中一个洞口,然后玩家随机打开一个洞口,如果里面有狐狸就抓到了。如果洞口里没有狐狸就第二天再来抓,但是第二天狐狸会在玩家来抓之前跳到隔壁洞口里。

  1. """
  2. 7、编写程序,模拟抓狐狸小游戏。假设一共有一排 5 个洞口,小狐狸最开始的时候在其中一个洞口,然后玩家随机打开一个洞口,如果里面有狐狸就抓到了。如果洞口里没有狐狸就第二天再来抓,但是第二天狐狸会在玩家来抓之前跳到隔壁洞口里。
  3. """
  4. import random
  5. def sj():
  6. csj = random.randint(1, 5)
  7. return csj
  8. a = sj() #小狐狸最开始的时候在其中一个洞口a
  9. Count = 0
  10. while True:
  11. # for i in range(5):
  12. x = int(input('请输入要打开的洞口编号(1-5),输入6退出:'))
  13. if x not in [0, 1, 2, 3, 4, 5]:
  14. print("无效的选择,请选择0/1/2/3/4/5")
  15. continue
  16. if(x==6):
  17. break
  18. Count += 1
  19. if x == a: #玩家随机打开一个洞口,抓到了
  20. print('玩家胜利,您共猜了:%d次'%(Count))
  21. break
  22. else:
  23. print("选择了{},未猜中".format(x))
  24. a += random.choice([-1, 1]) #跳到隔壁洞口

image.png

8、编写程序,模拟打字练习程序的成绩评定。假设 origin 为原始内容,userInput 为用户练习时输入的内容,要求用户输入的内容长度不能大于原始内容的长度,如果对应位置的字符一致则认为正确,否则判定输入错误。最后成绩为:正确的字符数量/原始字符串长度,按百分制输出,要求保留 2 位小数。

  1. """
  2. 8、编写程序,模拟打字练习程序的成绩评定。假设 origin 为原始内容,userInput 为用户练习时输入的内容,要求用户输入的内容长度不能大于原始内容的长度,
  3. 如果对应位置的字符一致则认为正确,否则判定输入错误。最后成绩为:正确的字符数量/原始字符串长度,按百分制输出,要求保留 2 位小数。
  4. """
  5. import random
  6. import string
  7. order = 'y'
  8. while (order == 'y' or order == 'Y'):
  9. print('----------模拟打字练习程序----------')
  10. original = ''.join(random.sample('abcdefghijklmnopqrstuvwxyz', 10)) # 随机生成由10个小写英文字符构成的字符串,字符数可改变
  11. print('输出:' + original)
  12. userInput = input('输入:')
  13. combination = list(zip(original, userInput))
  14. true_word = 0.0 #记录正确的字符数
  15. # 统计正确字符数
  16. for word in combination:
  17. if word[0] == word[1]:
  18. true_word += 1
  19. # 评定等级
  20. score = round(true_word / len(original), 3) * 100
  21. if (score >= 90):
  22. grade = '优'
  23. elif (score >= 80):
  24. grade = '良'
  25. elif (score >= 70):
  26. grade = '中'
  27. elif (score >= 60):
  28. grade = '及格'
  29. else:
  30. grade = '不及格'
  31. print('分数:' + str(score) + '分\n成绩等级:' + grade)
  32. order = input('\n是否继续练习(输入Y(y)orN(n)):')
  33. print('退出程序!')

image.png

9、利用字典实现金庸小说中的大侠个人信息查询程序(至少得有三个人);
Python16学时上机题目%26要求等 - 图28

  1. """
  2. 9、利用字典实现金庸小说中的大侠个人信息查询程序(至少得有三个人);
  3. """
  4. people={
  5. '乔峰':{
  6. '绝技':'降龙十八掌',
  7. '门派':'丐帮'
  8. },
  9. '张无忌':{
  10. '绝技': '乾坤大挪移',
  11. '门派': '明教'
  12. },
  13. '令狐冲': {
  14. '绝技': '乾坤大挪移',
  15. '门派': '华山派'
  16. }
  17. }
  18. labels={
  19. '绝技': '行走在江湖的绝技',
  20. '门派': '所在的门派'
  21. }
  22. #初始化名字
  23. name =input ('请输入大侠的名字:')
  24. #获取选项
  25. r=input ('请选择大侠的绝技(q)或者门派(a):')
  26. #获取键
  27. if r=='q':
  28. y='绝技'
  29. if r =='a':
  30. y='门派'
  31. #查找
  32. if name in people:
  33. print("{}大侠{}是{}".format(name,labels[y],people[name][y]))

image.png

10、将一个N=10个元素的列表转换为字典。
image.png

实验4 Python函数训练

一、实验目的
1、掌握函数的概念,使用场景和使用步骤;
2、掌握递归函数的概念,使用场景和使用步骤;
3、掌握常见内置函数的使用场景和使用步骤;

二、实验环境
装有Python运行环境、Pycharm平台的PC电脑一台

三、实验内容
1、编写程序,用于实现十进制转二进制、八进制、十六进制。
image.png
2、编写一个程序,实现斐波那契数列。
image.png
3、请编写程序,用于生成指定日期的日历。
image.png
4、通过导入 datetime 模块来获取昨天的日期。
image.png
5、将书中P113页的“名片管理系统”实现出来,并运行查看结果;

  1. """
  2. 5、将书中P113页的“名片管理系统”实现出来,并运行查看结果;
  3. """
  4. # 1打印功能提示
  5. def show_menu():
  6. '''这是显示菜单界面'''
  7. print('=' * 20)
  8. print('---名片管理系统---')
  9. print('1:添加一个新的名片')
  10. print('2:删除一个名片')
  11. print('3:修改一个名片')
  12. print('4:查询一个名片')
  13. print('5:显示所有的名片')
  14. print('6:退出系统')
  15. print('=' * 20)
  16. # 用来存储名片
  17. card_infors = []
  18. while True:
  19. # 2获取用户选择
  20. show_menu()
  21. num = input('请输入操作序号:')
  22. if num.isdigit():
  23. num = int(num)
  24. if num == 1:
  25. new_name = input('请输入名字:')
  26. new_qq = input('请输入QQ:')
  27. new_weixin = input('请输入微信:')
  28. new_addr = input('请输入新的住址:')
  29. # 定义一个新的字典,用来存储一个新的名片
  30. new_infor = {}
  31. new_infor['name'] = new_name
  32. new_infor['qq'] = new_qq
  33. new_infor['weixin'] = new_weixin
  34. new_infor['addr'] = new_addr
  35. # 将一个字典,添加到列表中
  36. card_infors.append(new_infor)
  37. #print(card_infors) # for test
  38. elif num == 2:
  39. del_name = input("请输入要删除的名字:")
  40. find_flag = False
  41. for line in card_infors:
  42. if line['name'] == del_name:
  43. find_flag = True
  44. card_infors.remove(line)
  45. break
  46. if find_flag:
  47. print("已删除!")
  48. else:
  49. print("输入的用户名不存在")
  50. # print(card_infors) for test
  51. elif num == 3:
  52. old_name = input('请输入要修改的姓名:')
  53. flag = 0
  54. for line in card_infors:
  55. if line['name'] == old_name:
  56. new_name = input('姓名:')
  57. # new_qq = input('年龄:')
  58. new_weixin = input('微信:')
  59. new_addr = input('住址:')
  60. line['name'] = new_name
  61. line['qq'] = new_qq
  62. line['weixin'] = new_weixin
  63. line['addr'] = new_addr
  64. flag = True
  65. break
  66. if flag:
  67. print("已修改!")
  68. else:
  69. print('输入的用户不存在!')
  70. elif num == 4:
  71. find_nmae = input("请输入要查找的姓名:")
  72. find_flag = 0 # 默认表示没有找到
  73. for temp in card_infors:
  74. if find_nmae == temp['name']:
  75. print("姓名\tQQ\t微信\t住址\t")
  76. print('%s\t%s\t%s\t%s' % (temp['name'], temp['qq'], temp['weixin'], temp['addr']))
  77. find_flag = 1 # 表示找到了
  78. break
  79. # 判断是否找到
  80. if find_flag == 0:
  81. print('没有找到')
  82. elif num == 5:
  83. print("姓名\tQQ\t微信\t住址\t")
  84. for temp in card_infors:
  85. print('%s\t%s\t%s\t%s\t' % (temp['name'], temp['qq'], temp['weixin'], temp['addr']))
  86. elif num == 6:
  87. break
  88. else:
  89. print('输入有误!请重新输入')
  90. continue
  91. print('')
  92. else:
  93. print("输入错误,请重新输入!")

image.png
6、将书中P130页的“学生管理系统”实现出来,并运行查看结果;

  1. """
  2. 5、将书中P113页的“名片管理系统”实现出来,并运行查看结果;
  3. """
  4. student_info_lst = [] # 保存所有学生的信息
  5. '''
  6. [{'name':'zs',.......},
  7. {'name':'ls',.......},
  8. ]
  9. '''
  10. def show_menu():
  11. '''这是显示菜单界面'''
  12. print('------------欢迎来到学生管理系统--------------')
  13. print('新增学员请按[1]')
  14. print('显示全部请按[2]')
  15. print('查询学员请按[3]')
  16. print('退出系统请按[0]')
  17. def add_student():
  18. '''这是新增学员功能'''
  19. print('-------------这是新增学员功能----------------')
  20. name = input('请输入姓名:')
  21. age = input('请输入年龄:')
  22. gender = input('请输入性别:')
  23. tel = input('请输入手机号码:')
  24. # print(name, age, gender, tel)
  25. # 将用户输入的信息保存到一个字典中
  26. dic = {}
  27. dic['name'] = name
  28. dic['age'] = age
  29. dic['gender'] = gender
  30. dic['tel'] = tel
  31. # print(dic)
  32. # 注意:将用户的信息保存到一个全局变量 student_info_lst 中
  33. # 列表中,让其他功能使用列表中的数据
  34. student_info_lst.append(dic)
  35. # print(lst)
  36. def alignment(s, space):
  37. '''动态获取长度'''
  38. s1 = s.encode('gbk')
  39. lenght = len(s1)
  40. space = space - lenght
  41. s = s + space * ' '
  42. return s
  43. def show_all_student():
  44. print('-----------显示所有的学员功能---------------')
  45. if not student_info_lst:
  46. print('还没有学员呢,请添加学员')
  47. return
  48. # 显示学员信息
  49. # print('name\tage\tgender\tel')
  50. # print('name', 16 * ' ', 'age', 17 * ' ', 'gender', 15 * ' ', 'tel')
  51. name = alignment('name', 15)
  52. age = alignment('age', 15)
  53. gender = alignment('gender', 15)
  54. tel = alignment('tel', 15)
  55. print(name, age, gender, tel)
  56. for dic in student_info_lst:
  57. name = dic['name']
  58. age = dic['age']
  59. gender = dic['gender']
  60. tel = dic['tel']
  61. # print('{}\t{}\t{}\t{}'.format(name, age, gender, tel))
  62. # print(name, (20 - len(name)) * ' ', age, (20 - len(name)) * ' ', gender, (20 - len(name)) * ' ', tel)
  63. name = alignment(dic['name'], 15)
  64. age = alignment(dic['age'], 15)
  65. gender = alignment(dic['gender'], 15)
  66. tel = alignment(dic['tel'], 15)
  67. print('{}\t{}\t{}\t{}'.format(name, age, gender, tel))
  68. def modify_student(old_value, msg):
  69. new_value = input(msg)
  70. if new_value.strip():
  71. '''msg有内容'''
  72. return new_value
  73. else:
  74. '''msg有内容'''
  75. return old_value
  76. def deal_student(dic):
  77. '''修改和删除学员信息'''
  78. action_str = input('【1】修改 【2】删除 【0】返回上一级菜单,请选择要执行的操作:')
  79. if action_str == '1':
  80. '''修改学员信息'''
  81. # name = input('请输入姓名:')
  82. # age = input('请输入年龄:')
  83. # gender = input('请输入性别:')
  84. # tel = input('请输入手机号码:')
  85. name = modify_student(dic['name'], '请输入姓名:')
  86. age = modify_student(dic['age'], '请输入年龄:')
  87. gender = modify_student(dic['gender'], '请输入性别:')
  88. tel = modify_student(dic['tel'], '请输入手机号码:')
  89. dic['name'] = name
  90. dic['age'] = age
  91. dic['gender'] = gender
  92. dic['tel'] = tel
  93. elif action_str == '2':
  94. '''删除该学员'''
  95. student_info_lst.remove(dic)
  96. # del student_info_lst[dic]
  97. print('-------------删除成功了--------------')
  98. elif action_str == '0':
  99. '''返回上一级菜单'''
  100. pass
  101. def search_student_by_name():
  102. print('--------------欢迎来到查询学员功能----------------')
  103. if student_info_lst:
  104. name = input('请输入要查询的学生的姓名:')
  105. for dic in student_info_lst: # 获取所有学员
  106. if dic['name'] == name: # 比较学员姓名
  107. # print('name\tage\tgender\tel')
  108. # print('name', 16 * ' ', 'age', 17 * ' ', 'gender', 15 * ' ', 'tel')
  109. name = alignment('name', 15)
  110. age = alignment('age', 15)
  111. gender = alignment('gender', 15)
  112. tel = alignment('tel', 15)
  113. print(name, age, gender, tel)
  114. name = dic['name']
  115. age = dic['age']
  116. gender = dic['gender']
  117. tel = dic['tel']
  118. # print('{}\t{}\t{}\t{}'.format(dic['name'], dic['age'], dic['gender'], dic['tel']))
  119. # print(name, (20 - len(name)) * ' ', age, (20 - len(name)) * ' ', gender, (20 - len(name)) * ' ', tel)
  120. name = alignment(dic['name'], 15)
  121. age = alignment(dic['age'], 15)
  122. gender = alignment(dic['gender'], 15)
  123. tel = alignment(dic['tel'], 15)
  124. print('{}\t{}\t{}\t{}'.format(name, age, gender, tel))
  125. # 修改学员信息
  126. # 需要将学员的信息传递到函数
  127. deal_student(dic)
  128. break
  129. else:
  130. print('have not this stuent')
  131. # add_student()
  132. else:
  133. print('have not atudent,please add student')
  134. add_student()
  135. while True:
  136. show_menu()
  137. action_str = input('请输入您要选的数字:')
  138. lst = ['0', '1', '2', '3']
  139. if action_str in lst:
  140. if action_str == '1':
  141. '''添加新增学员'''
  142. add_student()
  143. elif action_str == '2':
  144. '''显示所有学员信息'''
  145. show_all_student()
  146. elif action_str == '3':
  147. '''查询学员'''
  148. search_student_by_name()
  149. elif action_str == '0':
  150. '''退出系统'''
  151. print('三位慢走,欢迎下次光临')
  152. break
  153. else:
  154. print('---------输错了,请重新输入------------')

image.png
7、有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
image.png

实验5 Python文件操作训练

一、实验目的
1、掌握文件的打开、关闭操作的使用步骤;
2、掌握文件读写的相关使用步骤;
3、掌握文件删除及重命名的相关使用步骤;
4、了解扩展库openpyxl的安装与使用
5、了解扩展库 python-docx 的安装与使用

二、实验环境
装有Python运行环境、Pycharm平台的PC电脑一台

三、实验内容
1、完成书中P164页的案例“学生管理系统”,并运行查看结果;

2、从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件”test”中保存。
image.png
3、有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。

  1. """
  2. 3、有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。
  3. """
  4. fp1 = open('A.txt', 'w')
  5. a_str1 = input("请写入字符串:")
  6. fp1.write(a_str1)
  7. fp1.close()
  8. fpr1 = open('A.txt', 'r')
  9. a_str11 = fpr1.read()
  10. print("A.txt:",a_str11)
  11. fpr1.close()
  12. fp2 = open('B.txt', 'w')
  13. a_str2 = input("请写入字符串:")
  14. fp2.write(a_str2)
  15. fp2.close()
  16. fpr2 = open('B.txt', 'r')
  17. a_str22 = fpr2.read()
  18. print("B.txt:",a_str22)
  19. fpr2.close()
  20. fp = open('C.txt', 'w')
  21. fp_str = str(a_str1 + a_str2)
  22. fp.write(fp_str)
  23. fp.close()
  24. fpr3 = open('B.txt', 'r')
  25. a_str33 = fpr3.read()
  26. print("C.txt:",a_str33)
  27. fpr3.close()

image.png
4、编写程序,生成 200 个人的模拟信息,包括姓名、性别、年龄、电话号码、家庭住址、电子邮箱地址,把生成的信息写入文本文件,每行存放一个人的信息,最后再读取生成的文本文件并输出其中的信息

  1. """
  2. 4、编写程序,生成 200 个人的模拟信息,
  3. 包括姓名、性别、年龄、电话号码、家庭住址、电子邮箱地址,
  4. 把生成的信息写入文本文件,每行存放一个人的信息,
  5. 最后再读取生成的文本文件并输出其中的信息
  6. """
  7. import random
  8. import string
  9. #常见的姓
  10. n1="王 李 张 刘 陈 杨 黄 赵 吴 周 徐 孙 马 朱 胡 郭 何 高 林 罗 郑 梁 谢 宋 唐 许 " \
  11. "韩 冯 邓 曹 彭 曾 萧 田 董 潘 袁 于 蒋 蔡 余 杜 叶 程 苏 魏 吕 丁 任 沈 姚 卢 " \
  12. "姜 崔 钟 谭 陆 汪 范 金 石 廖 贾 夏 韦 傅 方 白 邹 孟 熊 秦 邱 江 尹 薛 阎 段 " \
  13. "雷 侯 龙 史 陶 黎 贺 顾 毛 郝 龚 邵 万 钱 严 覃 武 戴 莫 孔 向 汤 "
  14. #字
  15. name2="\u7684\u4e00\u662f\u4e86\u6211\u4e0d\u4eba\u5728\u4ed6\u6709\u8fd9\u4e2a\u4e0a\u4eec\u6765"\
  16. "\u5230\u65f6\u5927\u5730\u4e3a\u5b50\u4e2d\u4f60\u8bf4\u751f\u56fd\u5e74\u7740\u5c31\u90a3"\
  17. "\u548c\u8981\u5979\u51fa\u4e5f\u5f97\u91cc\u540e\u81ea\u4ee5\u4f1a\u5bb6\u53ef\u4e0b\u800c"\
  18. "\u8fc7\u5929\u53bb\u80fd\u5bf9\u5c0f\u591a\u7136\u4e8e\u5fc3\u5b66\u4e48\u4e4b\u90fd\u597d"\
  19. "\u770b\u8d77\u53d1\u5f53\u6ca1\u6210\u53ea\u5982\u4e8b\u628a\u8fd8\u7528\u7b2c\u6837\u9053"\
  20. "\u60f3\u4f5c\u79cd\u5f00\u7f8e\u603b\u4ece\u65e0\u60c5\u5df1\u9762\u6700\u5973\u4f46\u73b0"\
  21. "\u524d\u4e9b\u6240\u540c\u65e5\u624b\u53c8\u884c\u610f\u52a8\u65b9\u671f\u5b83\u5934\u7ecf"\
  22. "\u957f\u513f\u56de\u4f4d\u5206\u7231\u8001\u56e0\u5f88\u7ed9\u540d\u6cd5\u95f4\u65af\u77e5"\
  23. "\u4e16\u4ec0\u4e24\u6b21\u4f7f\u8eab\u8005\u88ab\u9ad8\u5df2\u4eb2\u5176\u8fdb\u6b64\u8bdd"\
  24. "\u5e38\u4e0e\u6d3b\u6b63\u611f\u89c1\u660e\u95ee\u529b\u7406\u5c14\u70b9\u6587\u51e0\u5b9a"\
  25. "\u672c\u516c\u7279\u505a\u5916\u5b69\u76f8\u897f\u679c\u8d70\u5c06\u6708\u5341\u5b9e\u5411"\
  26. "\u58f0\u8f66\u5168\u4fe1\u91cd\u4e09\u673a\u5de5\u7269\u6c14\u6bcf\u5e76\u522b\u771f\u6253"\
  27. "\u592a\u65b0\u6bd4\u624d\u4fbf\u592b\u518d\u4e66\u90e8\u6c34\u50cf\u773c\u7b49\u4f53\u5374"\
  28. "\u52a0\u7535\u4e3b\u754c\u95e8\u5229\u6d77\u53d7\u542c\u8868\u5fb7\u5c11\u514b\u4ee3\u5458"\
  29. "\u8bb8\u7a1c\u5148\u53e3\u7531\u6b7b\u5b89\u5199\u6027\u9a6c\u5149\u767d\u6216\u4f4f\u96be"\
  30. "\u671b\u6559\u547d\u82b1\u7ed3\u4e50\u8272\u66f4\u62c9\u4e1c\u795e\u8bb0\u5904\u8ba9\u6bcd"\
  31. "\u7236\u5e94\u76f4\u5b57\u573a\u5e73\u62a5\u53cb\u5173\u653e\u81f3\u5f20\u8ba4\u63a5\u544a"\
  32. "\u5165\u7b11\u5185\u82f1\u519b\u5019\u6c11\u5c81\u5f80\u4f55\u5ea6\u5c71\u89c9\u8def\u5e26"\
  33. "\u4e07\u7537\u8fb9\u98ce\u89e3\u53eb\u4efb\u91d1\u5feb\u539f\u5403\u5988\u53d8\u901a\u5e08"\
  34. "\u7acb\u8c61\u6570\u56db\u5931\u6ee1\u6218\u8fdc\u683c\u58eb\u97f3\u8f7b\u76ee\u6761\u5462"\
  35. "\u75c5\u59cb\u8fbe\u6df1\u5b8c\u4eca\u63d0\u6c42\u6e05\u738b\u5316\u7a7a\u4e1a\u601d\u5207"\
  36. "\u600e\u975e\u627e\u7247\u7f57\u94b1\u7d36\u5417\u8bed\u5143\u559c\u66fe\u79bb\u98de\u79d1"\
  37. "\u8a00\u5e72\u6d41\u6b22\u7ea6\u5404\u5373\u6307\u5408\u53cd\u9898\u5fc5\u8be5\u8bba\u4ea4"\
  38. "\u7ec8\u6797\u8bf7\u533b\u665a\u5236\u7403\u51b3\u7aa2\u4f20\u753b\u4fdd\u8bfb\u8fd0\u53ca"\
  39. "\u5219\u623f\u65e9\u9662\u91cf\u82e6\u706b\u5e03\u54c1\u8fd1\u5750\u4ea7\u7b54\u661f\u7cbe"\
  40. "\u89c6\u4e94\u8fde\u53f8\u5df4\u5947\u7ba1\u7c7b\u672a\u670b\u4e14\u5a5a\u53f0\u591c\u9752"\
  41. "\u5317\u961f\u4e45\u4e4e\u8d8a\u89c2\u843d\u5c3d\u5f62\u5f71\u7ea2\u7238\u767e\u4ee4\u5468"\
  42. "\u5427\u8bc6\u6b65\u5e0c\u4e9a\u672f\u7559\u5e02\u534a\u70ed\u9001\u5174\u9020\u8c08\u5bb9"\
  43. "\u6781\u968f\u6f14\u6536\u9996\u6839\u8bb2\u6574\u5f0f\u53d6\u7167\u529e\u5f3a\u77f3\u53e4"\
  44. "\u534e\u8ae3\u62ff\u8ba1\u60a8\u88c5\u4f3c\u8db3\u53cc\u59bb\u5c3c\u8f6c\u8bc9\u7c73\u79f0"\
  45. "\u4e3d\u5ba2\u5357\u9886\u8282\u8863\u7ad9\u9ed1\u523b\u7edf\u65ad\u798f\u57ce\u6545\u5386"\
  46. "\u60ca\u8138\u9009\u5305\u7d27\u4e89\u53e6\u5efa\u7ef4\u7edd\u6811\u7cfb\u4f24\u793a\u613f"\
  47. "\u6301\u5343\u53f2\u8c01\u51c6\u8054\u5987\u7eaa\u57fa\u4e70\u5fd7\u9759\u963f\u8bd7\u72ec"\
  48. "\u590d\u75db\u6d88\u793e\u7b97\u4e49\u7adf\u786e\u9152\u9700\u5355\u6cbb\u5361\u5e78\u5170"\
  49. "\u5ff5\u4e3e\u4ec5\u949f\u6015\u5171\u6bdb\u53e5\u606f\u529f\u5b98\u5f85\u7a76\u8ddf\u7a7f"
  50. name1=n1.split(" ")#从网上复制粘贴下来有空格所以用了spilt()将空格给去掉了
  51. #姓名
  52. def getName():
  53. name=random.choice(name1)#从name1中选取一个当姓
  54. #姓名长度可能位2,3,4
  55. for i in range(random.choice([2,3,4])-1):#因为前边有一个姓了所以-1
  56. name=name+random.choice(name2)
  57. return name
  58. #性别
  59. def sex():
  60. return random.choice(["男","女"])#从男女中随机选一个
  61. #电话号码,手机号码是一个字符串,11位
  62. def phoneNumber():
  63. number="1"#开头数字是1
  64. for i in range(10):#剩下的10
  65. number=number+random.choice(string.digits)#string.digits 返回'0123456789'
  66. return number
  67. #年龄
  68. def Age():
  69. return str(random.randint(1,85))#年龄在1-85岁之间
  70. #邮箱
  71. def Email():
  72. email=''
  73. #邮箱的结尾
  74. ending = ["@qq.com", "@163.com", "@126.com", "@hotmail.com", "@gmail.com"]
  75. #随机选择邮箱的长度
  76. for i in range(random.randint(6,12)):
  77. email=email+random.choice(string.ascii_letters+string.digits)
  78. email=email+random.choice(ending)
  79. return email
  80. #将信息输入到文本之中去
  81. def Input(n):
  82. f=open("demo04.txt","w")
  83. for i in range(n):#n表示多少条数据
  84. message=list(getName()+" "+sex()+" "+Age()+" "+phoneNumber()+' '+Email()+"\n")
  85. f.writelines(message) #利用writelines写入数据
  86. # f.writelines("\n") #进行换行
  87. f.close()
  88. #读取文本中的信息
  89. def read():
  90. f=open("demo04.txt","r")
  91. for line in f: #逐行读内容
  92. print(line)
  93. f.close()
  94. n=200
  95. Input(n)
  96. read()
  1. C:\Users\23046\AppData\Local\Programs\Python\Python38\python.exe D:\Study\Python\python_test\demo05\demo04.py
  2. 姜花分生 52 14454110897 e8HzShXZz@126.com
  3. 朱传精 9 10105531960 7XRaylHr6@163.com
  4. 高加由看 4 10029098070 nDm50jXTlZ@hotmail.com
  5. 许她千 18 15360277706 XjC3reX@qq.com
  6. 金演兰 59 14572419622 a120NRos4IYA@hotmail.com
  7. 钱社决吃 23 19168679632 WFxLtd@gmail.com
  8. 丁断格 35 14786914658 0cmgyhN@hotmail.com
  9. 覃官北 59 14507577693 UX1vJKY@hotmail.com
  10. 范每学管 2 10377883262 UGB6xGzVfmSB@126.com
  11. 郝住原 43 15509944052 HUzUhY1pIxqS@qq.com
  12. 段西 17 12013628185 o0C8keW7es@gmail.com
  13. 汤算四风 82 19910884546 TwJs10lTNuXb@126.com
  14. 金福元 63 11788718562 kWFM31Oj6aR@126.com
  15. 罗需社 25 11692045639 Cuh2REj@126.com
  16. 贾入 40 13341899223 EzUuaKQV@gmail.com
  17. 田制点么 81 16504297776 6EgzmnJHVH@qq.com
  18. 戴则 59 16414180806 Octy5Bpn@hotmail.com
  19. 钟需諣近 82 16255056547 HL3AOhobHo@gmail.com
  20. 江小 80 17734550864 T626hD@163.com
  21. 邓孩穿 85 13018750936 9I21HK@qq.com
  22. 徐口 53 17355037271 mWCv7aY8@gmail.com
  23. 卢事答话 36 17846937199 5mL38v2hV2@gmail.com
  24. 魏久转于 68 12408835257 iKH7gVzWblbr@126.com
  25. 贺部 25 17355209750 qqVTrXStIEns@gmail.com
  26. 曹就中 32 17168310008 tm5NFnPH@hotmail.com
  27. 曾司及西 10 17349120177 qky4AMHMTS7@163.com
  28. 武些公至 50 15383351825 Yf1px0NKZ9@126.com
  29. 吕准火头 42 19954596719 OXtA9Dqaa@hotmail.com
  30. 朱球名度 77 12264472292 wNWFgx3D@126.com
  31. 邓队电 13 11604158824 5ehWUoGlI@hotmail.com
  32. 郭得她 60 11845428838 7pVwBm0QAPj@hotmail.com
  33. 雷音要 59 14138635371 Sl9W9yjqT@qq.com
  34. 戴事只 64 11290469446 WvZfNkkg2M9@126.com
  35. 曾基切 38 13663951900 q1kpDuVx32@163.com
  36. 莫好通社 63 12536177156 7hH9zCCl@gmail.com
  37. 覃然近 60 13934750101 LjtJSljeY@qq.com
  38. 杨气数 62 18285823713 yYprNaRmw@126.com
  39. 邹罗 33 13102606172 MDMc8U@gmail.com
  40. 顾候 50 15118478071 uHMmDuqdtr@qq.com
  41. 郭些 23 12536421077 Perbt1f8szqH@qq.com
  42. 宋称利 46 10448050870 OBjQija6vZe@qq.com
  43. 魏似 34 16416473790 z7MAniXi@126.com
  44. 史痛 44 19368903538 CH7xG1@gmail.com
  45. 谭深听 2 15360382769 WidnNTzOYh@hotmail.com
  46. 徐手酒德 85 15808054222 aGbRtbsdK@qq.com
  47. 韦送欢 68 16739437641 c3Z2Rx@hotmail.com
  48. 苏个会 18 15083795984 VTvmnqB3@gmail.com
  49. 于惊 74 18726839014 Z1LJiOb@hotmail.com
  50. 蔡各始志 52 13098151916 PdbEP9aF@163.com
  51. 吴流 71 15766553483 d1lL2geSYO@163.com
  52. 秦失作亲 19 14708000871 4oClTj3npu3@126.com
  53. 赵候 46 10949949351 lBPHNpw@hotmail.com
  54. 袁妈路取 21 16432636454 Y0PEYU@hotmail.com
  55. 卢的 16 17867773948 IL40ltj@126.com
  56. 邱读愿 35 18606375289 qV8gMdQRyly@gmail.com
  57. 韩做发诉 13 14834134477 HIzo2k@gmail.com
  58. 徐传 13 16449752682 wj1tO74M6i@163.com
  59. 刘义其世 73 17431931236 ZlZgPRBG20Fc@163.com
  60. 金话望 3 17347776478 vn6foYnS@163.com
  61. 陈定 70 11109221434 sGB7Xa@hotmail.com
  62. 沈周识 60 13873647285 aJXAlX@126.com
  63. 韩火很军 76 19359478204 ALFf3qW5@gmail.com
  64. 潘爸力 54 11260475506 OmGU55Mnj@gmail.com
  65. 田准功开 10 19493105231 ZWzv0r5n@gmail.com
  66. 冯息关 66 13053015943 wil6GcXMc@qq.com
  67. 石似期 19 17355894742 33p1sJnoW7q@hotmail.com
  68. 魏痛 9 12072483011 MKkRbfC0mxFT@hotmail.com
  69. 余三发 24 12220314685 8TGbNEW2@qq.com
  70. 程决清 10 18932045724 IduGLUWTxZ4@hotmail.com
  71. 许此 35 13848893656 KvkymyB6E@163.com
  72. 陈父告 53 10857540589 0DKNcI8U4@gmail.com
  73. 白及直布 23 10884744431 lYYCVR8qCwx4@hotmail.com
  74. 任分几保 77 19009988133 9noD3OCxVkZ@163.com
  75. 陈风 11 13961663351 oE1vmc@163.com
  76. 朱大任活 81 18720434591 REnjXAZr@126.com
  77. 傅谈吗 64 12941317137 CR1A3pzl2@hotmail.com
  78. 胡吧毛 63 18540360661 Auq6gr6@163.com
  79. 何何特日 81 14140453240 amCFdNha9D9@hotmail.com
  80. 李单 36 16743934106 yHl8PtClpw7@gmail.com
  81. 曾难风百 67 18168309992 zczTYf3@qq.com
  82. 秦两士 41 13110340451 XGVhspftJa8c@hotmail.com
  83. 顾任身北 37 15054197941 GO4shCLhOT@hotmail.com
  84. 江动何也 70 19072428907 Ap5wCBNI2OjT@qq.com
  85. 谭没 2 17419603903 wFQTkEfPOn@163.com
  86. 顾放 29 16160824844 na2FHCS@gmail.com
  87. 胡第仅应 7 19391462007 CpYIXhtPh@hotmail.com
  88. 白后球是 5 11393429557 BlH2j8EC@gmail.com
  89. 罗与生己 59 11213566214 h783qW4@126.com
  90. 陈制日条 33 15234806798 MW7lfkmhmyX@gmail.com
  91. 余容 28 15734600586 sW4MP1zyV@163.com
  92. 梁亲官 38 12199615352 zHqdCwR4f2@gmail.com
  93. 万本 42 19393760674 TuR90B3ttVF@126.com
  94. 董气运 71 11974842971 4YQRVZ8@hotmail.com
  95. 廖即 71 11835820437 XCd0gnDOyZUZ@qq.com
  96. 覃口该转 65 10287307424 dKDDuYh@163.com
  97. 陆苦无观 22 18900274622 8n2zgvB@hotmail.com
  98. 吕演独双 15 18375485889 BoiZVi18KgF@gmail.com
  99. 秦球争 44 10310726489 3fIUFTsu@163.com
  100. 彭另绝 67 14059405327 RlxZoIG@gmail.com
  101. 王早全 70 14881165532 YDK0HiikRj@gmail.com
  102. 钟争 10 14825994186 HrFsSPtO@hotmail.com
  103. 石点画 46 10130718021 hBTbZjVAkX@gmail.com
  104. 叶尔 60 16875912985 lkqUK6@gmail.com
  105. 万通望 83 13081799610 sDTQkLbk@126.com
  106. 杜全 25 11831102106 T15jugNg@qq.com
  107. 林岁一看 10 12102138379 ninmCGK@gmail.com
  108. 彭同合 66 12096450139 j5gYfZkyY@163.com
  109. 尹它整 80 13053785989 W1eYw9cp4K9@qq.com
  110. 任包 21 13820290351 umuQj3e@163.com
  111. 韩等 41 19617114662 B8KX2R@163.com
  112. 卢法我 84 19546177976 XEmp60rxJ7E@126.com
  113. 胡战小 67 18109322843 uknaWcJ6C@gmail.com
  114. 尹而 17 12967402694 5vys4iAw75ed@163.com
  115. 廖论光从 66 15067304886 wVqzPgD3OG@hotmail.com
  116. 侯知车月 48 10670688394 QAkjah@qq.com
  117. 侯师希风 79 11944366887 jkdpYD@126.com
  118. 顾南 50 13612039532 BMIUAtnW6@hotmail.com
  119. 贾马穿 73 11613317134 KN3ZMDPt@qq.com
  120. 史头眼可 77 14810304537 BnISYJVBP@gmail.com
  121. 钟可 7 12748619928 3rdw9TSfTsHA@126.com
  122. 戴才 48 19882165615 kkHua9TLx@gmail.com
  123. 史由 82 16135770678 slrmiWz@qq.com
  124. 曹收 44 16612386516 IYOIHC8wI@gmail.com
  125. 邹人 79 16291127167 mfSZMT3tCSw@gmail.com
  126. 王不实再 54 10426748415 YiIGaR0@hotmail.com
  127. 陈息 18 13667836315 agZcl7@126.com
  128. 魏些 7 14510650538 FJ6pEOwdJsg@gmail.com
  129. 莫早科海 29 14163256163 GlEabm9tHOmj@gmail.com
  130. 徐静句 42 15695649675 LIej3oVp@126.com
  131. 叶她远望 59 15017676826 LPntIYU@hotmail.com
  132. 钟米候 77 12776407746 2LhxaFlCUx@qq.com
  133. 魏至华斯 61 13264619181 a5t05gcyyX88@qq.com
  134. 段房 31 10688134513 8ZTy09Xl@163.com
  135. 龚最朋 41 11052680758 hc2JPpY@gmail.com
  136. 潘且讲 1 18828405162 j47jjjf@163.com
  137. 黎加随带 18 15193054342 FBFLAwVqC@163.com
  138. 江刻物无 18 19886980309 GkunZ3e9dpuR@126.com
  139. 薛眼 19 16106514450 9tCYrZ@hotmail.com
  140. 万格领何 73 17531914375 jzbj31m@hotmail.com
  141. 蔡候开第 2 18597224819 HxI4CfqX8@qq.com
  142. 曹象回则 27 16545598204 a2W39WBr@qq.com
  143. 杜定山 1 13938773207 QPTcfVE@gmail.com
  144. 程果球 55 13177659937 I2enqpjFqcBV@163.com
  145. 马活被仅 44 19852931950 fJ5e8r8fp@hotmail.com
  146. 邓产 24 11712592915 dqg2ubNESb@126.com
  147. 孔类学青 32 17650242862 H2zORi@gmail.com
  148. 金流定很 69 10620434279 CC66qyC3KC7t@gmail.com
  149. 邹行热 44 10080158347 rqjN2zG@qq.com
  150. 田精情 6 15160802419 ISaiUF4pcY7@qq.com
  151. 魏就紧 4 10297253300 lEEDkpr2@163.com
  152. 周也 7 15887309362 e9lrjc0@qq.com
  153. 邹流道可 17 17088015193 lZb9WCSSp3Ob@hotmail.com
  154. 韩容业 45 19057333750 HaSZ3XHOo5@qq.com
  155. 曹处你最 29 16567428349 R27JJfRGP83i@gmail.com
  156. 曾则起 57 18077140287 L3RUCf6a@qq.com
  157. 雷公 65 19168636483 OpvBcOMl@163.com
  158. 邓火 22 19443005664 0nSkPb1b@qq.com
  159. 黄欢历 75 14144076236 Nh7CIy0KuzSj@163.com
  160. 王化量 81 18887602943 QD1v95@gmail.com
  161. 莫诉称精 68 16365765373 xODCohMTt3@163.com
  162. 邵妻 24 16477767408 X93q9CW@163.com
  163. 朱十她 9 16475951590 LlsNWZH@163.com
  164. 夏岁 8 11323155821 0GZ1BT0ruUTJ@163.com
  165. 莫钟产 10 13926885153 KSn5oZKFc@163.com
  166. 陶制位 35 18058070586 DNBZJEWE@gmail.com
  167. 程请 42 19026097683 yFrbZxv6fgWJ@hotmail.com
  168. 陆近 73 18349124909 DtqgwPaOwoG@126.com
  169. 严妻神 18 11913473910 XsjCbkFB1f@hotmail.com
  170. 韩似 71 14533717609 hfi4LhEAbYnu@163.com
  171. 毛几妈达 63 11677260756 ts8EEKeB@163.com
  172. 夏认 15 19941049589 gobsWxeZO@126.com
  173. 廖作 29 17841241667 wiUOivIIja@gmail.com
  174. 马断 3 18284708286 vBnm8QbDiM7J@qq.com
  175. 赵息 66 11708271628 HUH9AG@163.com
  176. 林建 54 15591327606 qgI5scAF@qq.com
  177. 阎需言 60 13409875027 ZQiNMy@gmail.com
  178. 杜句 60 16841598258 4l62BtBZ3@qq.com
  179. 武些时最 1 12263387158 V55y2Gps3hJ@gmail.com
  180. 吴总 71 10141273219 jDMPRU@gmail.com
  181. 向金 79 13173971413 gWilaE@gmail.com
  182. 蒋古进约 31 11316084542 EPl3FS2d9Ra@gmail.com
  183. 赵答故市 51 15252654656 5yowZnqlZXA@qq.com
  184. 于夫今 79 19588343025 ggM6LZB@126.com
  185. 覃活三早 69 13780163858 u41NsCf67@126.com
  186. 杨常 45 10235158565 P8yXtqk3En29@gmail.com
  187. 尹认品制 83 12622097777 oBRj1wx@126.com
  188. 何和品 75 13956682478 ro45KMWO9E@hotmail.com
  189. 严钟 49 18802370371 PECXegtC1gV@gmail.com
  190. 石各所 20 13868433322 fi71jpmu3iKK@gmail.com
  191. 郑至象形 21 15249244798 xoLT7RyL@gmail.com
  192. 董走 21 10581184258 wRffOfd4Gkb@163.com
  193. 姜样晚 51 14841854441 qNAFCm@gmail.com
  194. 卢请口 14 10448378365 TwI6oXa@163.com
  195. 杜精 76 11457656539 J6oeP7mX5@163.com
  196. 陈晚比 5 15233618873 DZ1MowD0b@gmail.com
  197. 许主使成 43 13696800464 47Q7geKdjH@163.com
  198. 熊决毛 30 14951881707 7vaUKcTP0L7B@gmail.com
  199. 毛读 28 12187810996 WOTdbIF9@126.com
  200. 阎口 54 16959868707 J77s6kc1hS@hotmail.com
  201. 林照高比 62 17320139407 xNbfMc@gmail.com
  202. 进程已结束,退出代码0

5、编写一个程序 demo.py,要求运行该程序后,生成 demo_new.py 文件,其中内容与demo.py 一样,只是在每一行的后面加上行号。要求行号以#开始,并且所有行的#符号垂直对齐。
image.png

6、磁盘垃圾文件清理器
编写程序,实现磁盘垃圾文件清理功能。要求程序运行时,通过命令行参数指定要清理的文件夹,然后删除该文件夹及其子文件夹中所有扩展名为 tmp、log、obj、txt 以及大小为 0 的文件
image.png

7、Excel文件成绩处理
假设某学校所有课程每学期允许多次考试,学生可随时参加考试,系统自动将每次成绩添加到 Excel 文件(包含 3 列:姓名,课程,成绩)中,现期末要求统计所有学生每门课程的最高成绩。
编写程序,模拟生成若干同学的成绩并写入 Excel 文件,其中学生姓名和课程名称均
可重复,也就是允许出现同一门课程的多次成绩,最后统计所有学生每门课程的最高成绩,并写入新的 Excel 文件。

  1. #encoding=gbk
  2. """
  3. 7、Excel文件成绩处理
  4. 假设某学校所有课程每学期允许多次考试,学生可随时参加考试,系统自动将每次成绩添加到 Excel 文件(包含 3 列:姓名,课程,成绩)中,现期末要求统计所有学生每门课程的最高成绩。
  5. 编写程序,模拟生成若干同学的成绩并写入 Excel 文件,其中学生姓名和课程名称均
  6. 可重复,也就是允许出现同一门课程的多次成绩,最后统计所有学生每门课程的最高成绩,并写入新的 Excel 文件。
  7. pip install openpyxl
  8. """
  9. import openpyxl
  10. import random
  11. def autoGet(fileName):
  12. wb = openpyxl.Workbook()
  13. sheet = wb.active
  14. sheet.append(['姓名', '课程', '成绩'])
  15. first = tuple('王李张刘陈杨黄赵吴周徐孙马朱胡郭何高林罗郑梁谢宋唐许韩冯邓曹彭曾萧田董潘袁于蒋蔡余杜叶程苏魏吕丁任沈姚卢姜崔钟谭陆汪范金石廖贾夏韦傅方白邹孟熊秦邱江尹薛阎段雷侯龙史陶黎贺顾毛郝龚邵万钱严覃武戴莫孔向汤')
  16. middle = tuple('"\u7684\u4e00\u662f\u4e86\u6211\u4e0d\u4eba\u5728\u4ed6\u6709\u8fd9\u4e2a\u4e0a\u4eec\u6765"\
  17. "\u5230\u65f6\u5927\u5730\u4e3a\u5b50\u4e2d\u4f60\u8bf4\u751f\u56fd\u5e74\u7740\u5c31\u90a3"\
  18. "\u548c\u8981\u5979\u51fa\u4e5f\u5f97\u91cc\u540e\u81ea\u4ee5\u4f1a\u5bb6\u53ef\u4e0b\u800c"\
  19. "\u8fc7\u5929\u53bb\u80fd\u5bf9\u5c0f\u591a\u7136\u4e8e\u5fc3\u5b66\u4e48\u4e4b\u90fd\u597d"\
  20. "\u770b\u8d77\u53d1\u5f53\u6ca1\u6210\u53ea\u5982\u4e8b\u628a\u8fd8\u7528\u7b2c\u6837\u9053"\
  21. "\u60f3\u4f5c\u79cd\u5f00\u7f8e\u603b\u4ece\u65e0\u60c5\u5df1\u9762\u6700\u5973\u4f46\u73b0"\
  22. "\u524d\u4e9b\u6240\u540c\u65e5\u624b\u53c8\u884c\u610f\u52a8\u65b9\u671f\u5b83\u5934\u7ecf"\
  23. "\u957f\u513f\u56de\u4f4d\u5206\u7231\u8001\u56e0\u5f88\u7ed9\u540d\u6cd5\u95f4\u65af\u77e5"\
  24. "\u4e16\u4ec0\u4e24\u6b21\u4f7f\u8eab\u8005\u88ab\u9ad8\u5df2\u4eb2\u5176\u8fdb\u6b64\u8bdd"\
  25. "\u5e38\u4e0e\u6d3b\u6b63\u611f\u89c1\u660e\u95ee\u529b\u7406\u5c14\u70b9\u6587\u51e0\u5b9a"\
  26. "\u672c\u516c\u7279\u505a\u5916\u5b69\u76f8\u897f\u679c\u8d70\u5c06\u6708\u5341\u5b9e\u5411"\
  27. "\u58f0\u8f66\u5168\u4fe1\u91cd\u4e09\u673a\u5de5\u7269\u6c14\u6bcf\u5e76\u522b\u771f\u6253"\
  28. "\u592a\u65b0\u6bd4\u624d\u4fbf\u592b\u518d\u4e66\u90e8\u6c34\u50cf\u773c\u7b49\u4f53\u5374"\
  29. "\u52a0\u7535\u4e3b\u754c\u95e8\u5229\u6d77\u53d7\u542c\u8868\u5fb7\u5c11\u514b\u4ee3\u5458"\
  30. "\u8bb8\u7a1c\u5148\u53e3\u7531\u6b7b\u5b89\u5199\u6027\u9a6c\u5149\u767d\u6216\u4f4f\u96be"\
  31. "\u671b\u6559\u547d\u82b1\u7ed3\u4e50\u8272\u66f4\u62c9\u4e1c\u795e\u8bb0\u5904\u8ba9\u6bcd"\
  32. "\u7236\u5e94\u76f4\u5b57\u573a\u5e73\u62a5\u53cb\u5173\u653e\u81f3\u5f20\u8ba4\u63a5\u544a"\
  33. "\u5165\u7b11\u5185\u82f1\u519b\u5019\u6c11\u5c81\u5f80\u4f55\u5ea6\u5c71\u89c9\u8def\u5e26"\
  34. "\u4e07\u7537\u8fb9\u98ce\u89e3\u53eb\u4efb\u91d1\u5feb\u539f\u5403\u5988\u53d8\u901a\u5e08"\
  35. "\u7acb\u8c61\u6570\u56db\u5931\u6ee1\u6218\u8fdc\u683c\u58eb\u97f3\u8f7b\u76ee\u6761\u5462"\
  36. "\u75c5\u59cb\u8fbe\u6df1\u5b8c\u4eca\u63d0\u6c42\u6e05\u738b\u5316\u7a7a\u4e1a\u601d\u5207"\
  37. "\u600e\u975e\u627e\u7247\u7f57\u94b1\u7d36\u5417\u8bed\u5143\u559c\u66fe\u79bb\u98de\u79d1"\
  38. "\u8a00\u5e72\u6d41\u6b22\u7ea6\u5404\u5373\u6307\u5408\u53cd\u9898\u5fc5\u8be5\u8bba\u4ea4"\
  39. "\u7ec8\u6797\u8bf7\u533b\u665a\u5236\u7403\u51b3\u7aa2\u4f20\u753b\u4fdd\u8bfb\u8fd0\u53ca"\
  40. "\u5219\u623f\u65e9\u9662\u91cf\u82e6\u706b\u5e03\u54c1\u8fd1\u5750\u4ea7\u7b54\u661f\u7cbe"\
  41. "\u89c6\u4e94\u8fde\u53f8\u5df4\u5947\u7ba1\u7c7b\u672a\u670b\u4e14\u5a5a\u53f0\u591c\u9752"\
  42. "\u5317\u961f\u4e45\u4e4e\u8d8a\u89c2\u843d\u5c3d\u5f62\u5f71\u7ea2\u7238\u767e\u4ee4\u5468"\
  43. "\u5427\u8bc6\u6b65\u5e0c\u4e9a\u672f\u7559\u5e02\u534a\u70ed\u9001\u5174\u9020\u8c08\u5bb9"\
  44. "\u6781\u968f\u6f14\u6536\u9996\u6839\u8bb2\u6574\u5f0f\u53d6\u7167\u529e\u5f3a\u77f3\u53e4"\
  45. "\u534e\u8ae3\u62ff\u8ba1\u60a8\u88c5\u4f3c\u8db3\u53cc\u59bb\u5c3c\u8f6c\u8bc9\u7c73\u79f0"\
  46. "\u4e3d\u5ba2\u5357\u9886\u8282\u8863\u7ad9\u9ed1\u523b\u7edf\u65ad\u798f\u57ce\u6545\u5386"\
  47. "\u60ca\u8138\u9009\u5305\u7d27\u4e89\u53e6\u5efa\u7ef4\u7edd\u6811\u7cfb\u4f24\u793a\u613f"\
  48. "\u6301\u5343\u53f2\u8c01\u51c6\u8054\u5987\u7eaa\u57fa\u4e70\u5fd7\u9759\u963f\u8bd7\u72ec"\
  49. "\u590d\u75db\u6d88\u793e\u7b97\u4e49\u7adf\u786e\u9152\u9700\u5355\u6cbb\u5361\u5e78\u5170"\
  50. "\u5ff5\u4e3e\u4ec5\u949f\u6015\u5171\u6bdb\u53e5\u606f\u529f\u5b98\u5f85\u7a76\u8ddf\u7a7f"')
  51. last = tuple('"\u7684\u4e00\u662f\u4e86\u6211\u4e0d\u4eba\u5728\u4ed6\u6709\u8fd9\u4e2a\u4e0a\u4eec\u6765"\
  52. "\u5230\u65f6\u5927\u5730\u4e3a\u5b50\u4e2d\u4f60\u8bf4\u751f\u56fd\u5e74\u7740\u5c31\u90a3"\
  53. "\u548c\u8981\u5979\u51fa\u4e5f\u5f97\u91cc\u540e\u81ea\u4ee5\u4f1a\u5bb6\u53ef\u4e0b\u800c"\
  54. "\u8fc7\u5929\u53bb\u80fd\u5bf9\u5c0f\u591a\u7136\u4e8e\u5fc3\u5b66\u4e48\u4e4b\u90fd\u597d"\
  55. "\u770b\u8d77\u53d1\u5f53\u6ca1\u6210\u53ea\u5982\u4e8b\u628a\u8fd8\u7528\u7b2c\u6837\u9053"\
  56. "\u60f3\u4f5c\u79cd\u5f00\u7f8e\u603b\u4ece\u65e0\u60c5\u5df1\u9762\u6700\u5973\u4f46\u73b0"\
  57. "\u524d\u4e9b\u6240\u540c\u65e5\u624b\u53c8\u884c\u610f\u52a8\u65b9\u671f\u5b83\u5934\u7ecf"\
  58. "\u957f\u513f\u56de\u4f4d\u5206\u7231\u8001\u56e0\u5f88\u7ed9\u540d\u6cd5\u95f4\u65af\u77e5"\
  59. "\u4e16\u4ec0\u4e24\u6b21\u4f7f\u8eab\u8005\u88ab\u9ad8\u5df2\u4eb2\u5176\u8fdb\u6b64\u8bdd"\
  60. "\u5e38\u4e0e\u6d3b\u6b63\u611f\u89c1\u660e\u95ee\u529b\u7406\u5c14\u70b9\u6587\u51e0\u5b9a"\
  61. "\u672c\u516c\u7279\u505a\u5916\u5b69\u76f8\u897f\u679c\u8d70\u5c06\u6708\u5341\u5b9e\u5411"\
  62. "\u58f0\u8f66\u5168\u4fe1\u91cd\u4e09\u673a\u5de5\u7269\u6c14\u6bcf\u5e76\u522b\u771f\u6253"\
  63. "\u592a\u65b0\u6bd4\u624d\u4fbf\u592b\u518d\u4e66\u90e8\u6c34\u50cf\u773c\u7b49\u4f53\u5374"\
  64. "\u52a0\u7535\u4e3b\u754c\u95e8\u5229\u6d77\u53d7\u542c\u8868\u5fb7\u5c11\u514b\u4ee3\u5458"\
  65. "\u8bb8\u7a1c\u5148\u53e3\u7531\u6b7b\u5b89\u5199\u6027\u9a6c\u5149\u767d\u6216\u4f4f\u96be"\
  66. "\u671b\u6559\u547d\u82b1\u7ed3\u4e50\u8272\u66f4\u62c9\u4e1c\u795e\u8bb0\u5904\u8ba9\u6bcd"\
  67. "\u7236\u5e94\u76f4\u5b57\u573a\u5e73\u62a5\u53cb\u5173\u653e\u81f3\u5f20\u8ba4\u63a5\u544a"\
  68. "\u5165\u7b11\u5185\u82f1\u519b\u5019\u6c11\u5c81\u5f80\u4f55\u5ea6\u5c71\u89c9\u8def\u5e26"\
  69. "\u4e07\u7537\u8fb9\u98ce\u89e3\u53eb\u4efb\u91d1\u5feb\u539f\u5403\u5988\u53d8\u901a\u5e08"\
  70. "\u7acb\u8c61\u6570\u56db\u5931\u6ee1\u6218\u8fdc\u683c\u58eb\u97f3\u8f7b\u76ee\u6761\u5462"\
  71. "\u75c5\u59cb\u8fbe\u6df1\u5b8c\u4eca\u63d0\u6c42\u6e05\u738b\u5316\u7a7a\u4e1a\u601d\u5207"\
  72. "\u600e\u975e\u627e\u7247\u7f57\u94b1\u7d36\u5417\u8bed\u5143\u559c\u66fe\u79bb\u98de\u79d1"\
  73. "\u8a00\u5e72\u6d41\u6b22\u7ea6\u5404\u5373\u6307\u5408\u53cd\u9898\u5fc5\u8be5\u8bba\u4ea4"\
  74. "\u7ec8\u6797\u8bf7\u533b\u665a\u5236\u7403\u51b3\u7aa2\u4f20\u753b\u4fdd\u8bfb\u8fd0\u53ca"\
  75. "\u5219\u623f\u65e9\u9662\u91cf\u82e6\u706b\u5e03\u54c1\u8fd1\u5750\u4ea7\u7b54\u661f\u7cbe"\
  76. "\u89c6\u4e94\u8fde\u53f8\u5df4\u5947\u7ba1\u7c7b\u672a\u670b\u4e14\u5a5a\u53f0\u591c\u9752"\
  77. "\u5317\u961f\u4e45\u4e4e\u8d8a\u89c2\u843d\u5c3d\u5f62\u5f71\u7ea2\u7238\u767e\u4ee4\u5468"\
  78. "\u5427\u8bc6\u6b65\u5e0c\u4e9a\u672f\u7559\u5e02\u534a\u70ed\u9001\u5174\u9020\u8c08\u5bb9"\
  79. "\u6781\u968f\u6f14\u6536\u9996\u6839\u8bb2\u6574\u5f0f\u53d6\u7167\u529e\u5f3a\u77f3\u53e4"\
  80. "\u534e\u8ae3\u62ff\u8ba1\u60a8\u88c5\u4f3c\u8db3\u53cc\u59bb\u5c3c\u8f6c\u8bc9\u7c73\u79f0"\
  81. "\u4e3d\u5ba2\u5357\u9886\u8282\u8863\u7ad9\u9ed1\u523b\u7edf\u65ad\u798f\u57ce\u6545\u5386"\
  82. "\u60ca\u8138\u9009\u5305\u7d27\u4e89\u53e6\u5efa\u7ef4\u7edd\u6811\u7cfb\u4f24\u793a\u613f"\
  83. "\u6301\u5343\u53f2\u8c01\u51c6\u8054\u5987\u7eaa\u57fa\u4e70\u5fd7\u9759\u963f\u8bd7\u72ec"\
  84. "\u590d\u75db\u6d88\u793e\u7b97\u4e49\u7adf\u786e\u9152\u9700\u5355\u6cbb\u5361\u5e78\u5170"\
  85. "\u5ff5\u4e3e\u4ec5\u949f\u6015\u5171\u6bdb\u53e5\u606f\u529f\u5b98\u5f85\u7a76\u8ddf\u7a7f"')
  86. # 课程名称
  87. subjects = ('语文', '数学', '英语','化学')
  88. for i in range(2000):
  89. line = []
  90. r = random.randint(1, 100)
  91. name = random.choice(first)
  92. # 按一定概率生成只有两个字的中文名字
  93. if r > 50:
  94. name = name + random.choice(middle)
  95. name = name + random.choice(last)
  96. # 依次生成姓名、课程名称和成绩
  97. line.append(name)
  98. line.append(random.choice(subjects))
  99. line.append(random.randint(0, 100))
  100. sheet.append(line)
  101. # 保存数据,生成excel
  102. wb.save(fileName)
  103. def getMaxScore(oldfileName, newfilrName):
  104. wb = openpyxl.load_workbook(oldfileName)
  105. final_wb = openpyxl.Workbook() # 创建一个新的excel工作簿对象用来存储学生各科目最高成绩
  106. start_sheet = wb.active # 开始自动生成的文件
  107. final_sheet = final_wb.active
  108. final_sheet.title = '学生的各科成绩'
  109. final_sheet.append(['姓名', '课程', '最高分'])
  110. stuGrade = {} # 创建一个记录全校学生成绩的字典
  111. for i in range(2, start_sheet.max_row + 1):
  112. stuName = start_sheet['A' + str(i)].value # 获取学生名字
  113. lesName = start_sheet['B' + str(i)].value # 获取课程名
  114. score = start_sheet['C' + str(i)].value # 获取对应的分数
  115. # 判断stuGrade中是否存有该学生
  116. if stuName in stuGrade:
  117. stuGrade[stuName]
  118. else:
  119. stuGrade[stuName] = {}
  120. # 获取最大分数,先判断该学生下的成绩字典中是否存有这门课程
  121. if lesName in stuGrade[stuName]:
  122. if score > stuGrade[stuName][lesName]:
  123. stuGrade[stuName][lesName] = score
  124. else:
  125. stuGrade[stuName][lesName] = score
  126. for student in stuGrade:
  127. for lesson, score in stuGrade[student].items():
  128. final_sheet.append([student, lesson, score])
  129. final_wb.save(newfilrName)
  130. if __name__ == '__main__':
  131. oldfile = '全校学生成绩.xlsx'
  132. newfile = '学生每门课程的最高成绩.xlsx'
  133. autoGet(oldfile)
  134. getMaxScore(oldfile, newfile)

image.png
image.png

8、Word文件操作
编写程序,读取 Word 文件中的所有段落文本,然后输出其中所有红色的文本和加粗的文本以及同时具有这两种属性的文本

  1. #encoding=gbk
  2. """
  3. 8、Word文件操作
  4. 编写程序,读取 Word 文件中的所有段落文本,然后输出其中所有红色的文本和加粗的文本以及同时具有这两种属性的文本
  5. pip install python-docx -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  6. """
  7. from docx import Document
  8. from docx.shared import RGBColor
  9. boldText = []
  10. redText = []
  11. doc = Document('test.docx')
  12. for p in doc.paragraphs:
  13. for r in p.runs:
  14. # 加粗字体
  15. if r.bold:
  16. boldText.append(r.text)
  17. # 红色字体
  18. if r.font.color.rgb == RGBColor(255,0,0):
  19. redText.append(r.text)
  20. result = {'红色的文本': redText, '加粗的文本': boldText, '红色及加粗的文本': set(redText) & set(boldText)}
  21. # 输出结果
  22. for title in result.keys():
  23. print(title.center(30, '='))
  24. for text in result[title]:
  25. print(text)

image.png
image.png

实验6 Python异常训练

一、实验目的
1、掌握异常的概念,异常使用场景;
2、掌握异常处理的使用步骤;
3、掌握raise、assert语句的使用;

二、实验环境
装有Python运行环境、Pycharm平台的PC电脑一台

三、实验内容
1、输入两个整数,打印它们相除之后的结果。对输入的不是整数或除数为零,进行异常处理。
image.png
2、猜数游戏。
编写程序模拟猜数游戏。程序运行时,系统生成一个随机数,然后提示用户进行猜测,并根据用户输入进行必要的提示(猜对了、太大了、太小了),如果猜对则提前结束程序,如果次数用完仍没有猜对,提示游戏结束并给出正确答案。要求考虑异常处理,比如用户输入aa或者是非数字。

  1. #encoding=gbk
  2. """
  3. 2、猜数游戏。
  4. 编写程序模拟猜数游戏。程序运行时,系统生成一个随机数,然后提示用户进行猜测,并根据用户输入进行必要的提示(猜对了、太大了、太小了),
  5. 如果猜对则提前结束程序,如果次数用完仍没有猜对,提示游戏结束并给出正确答案。要求考虑异常处理,比如用户输入aa或者是非数字。
  6. """
  7. from random import randint
  8. def guessNumber(maxValue, maxTimes):
  9. # 随机生成一个整数
  10. value = randint(1, maxValue)
  11. for i in range(maxTimes):
  12. prompt = '请输入您猜的数字:' if i == 0 else '请再猜一次:'
  13. # 使用异常处理结构,防止输入不是数字的情况
  14. try:
  15. x = int(input(prompt))
  16. except:
  17. print('必须输入整形数,且在数字1和', maxValue, '之间')
  18. else:
  19. if x == value:
  20. # 猜对了
  21. print('恭喜您,猜对了!')
  22. break
  23. elif x > value:
  24. print('太大了!')
  25. else:
  26. print('太小了!')
  27. else:
  28. # 次数用完还没猜对,游戏结束,提示正确答案.
  29. print('游戏结束,您失败了!')
  30. print('正确答案是:', value)
  31. guessNumber(10, 4)
  32. # 控制最大值和次数

image.png
3、磁盘垃圾文件清理器
编写程序,实现磁盘垃圾文件清理功能。要求程序运行时,通过命令行参数指定要清理的文件夹,然后删除该文件夹及其子文件夹中所有扩展名为 tmp、log、obj、txt 以及大小为 0 的文件。要求考虑异常处理,比如用户输入的文件夹不存在;
image.png

image.png

实验7 Python面向对象训练(4学时)

一、实验目的
1、理解类、对象、封装、继承、多态等概念;
2、掌握类的定义、创建步骤;
3、掌握self关键字的使用;
4、掌握运算符重载的使用;

二、实验环境
装有Python运行环境、Pycharm平台的PC电脑一台

三、实验内容
1、完成书中P212页的案例“反恐精英CS”,并运行查看结果;

  1. #encoding=gbk
  2. """
  3. 1、完成书中P212页的案例“反恐精英CS”,并运行查看结果;
  4. """
  5. # 定义表示战士、敌人的类
  6. class Person:
  7. def __init__(self, name):
  8. # 姓名
  9. self.name = name
  10. # 血量
  11. self.blood = 100
  12. self.gun = None
  13. # 给弹夹安装子弹
  14. def install_bullet(self, clip, bullet):
  15. # 弹夹放置子弹
  16. clip.save_bullets(bullet)
  17. # 给枪安装弹夹
  18. def install_clip(self, gun, clip):
  19. # 枪链接弹夹
  20. gun.mounting_clip(clip)
  21. #持枪
  22. def take_gun(self, gun):
  23. self.gun = gun
  24. # 开枪
  25. def fire(self, enemy):
  26. # 射击敌人
  27. self.gun.shoot(enemy)
  28. # 掉血
  29. def lose_blood(self, damage):
  30. self.blood -= damage
  31. def __str__(self):
  32. return "%s剩余血量%d" % (self.name, self.blood)
  33. # 定义表示枪的类
  34. class Gun:
  35. def __init__(self):
  36. # 默认没有弹夹
  37. self.clip = None
  38. # 链接弹夹
  39. def mounting_clip(self, clip):
  40. if not self.clip:
  41. self.clip = clip
  42. def __str__(self):
  43. if self.clip:
  44. return "枪已经装了弹夹"
  45. else:
  46. return "枪无弹夹"
  47. # 射击
  48. def shoot(self, enemy):
  49. # 弹夹出子弹
  50. bullet = self.clip.lunch_bullet()
  51. if bullet:
  52. bullet.hurt(enemy)
  53. else:
  54. print("没有子弹了,放了空枪...")
  55. # 定义表示弹夹的类
  56. class Clip:
  57. def __init__(self, capacity):
  58. # 最大容量
  59. self.capacity = capacity
  60. # 当前子弹数量
  61. self.bullet_list = []
  62. # 安装子弹
  63. def save_bullets(self, bullet):
  64. # 当前子弹数量小于最大容量
  65. if len(self.bullet_list) < self.capacity:
  66. self.bullet_list.append(bullet)
  67. def __str__(self):
  68. return "现在弹夹中子弹数量为:%d" % len(self.bullet_list)
  69. # 出子弹
  70. def lunch_bullet(self):
  71. # 判断当前弹夹中是否还有子弹
  72. if len(self.bullet_list) > 0:
  73. bullet = self.bullet_list[-1]
  74. self.bullet_list.pop()
  75. return bullet
  76. else:
  77. return None
  78. # 定义表示子弹的类
  79. class Bullet:
  80. def __init__(self, damage):
  81. # 伤害力
  82. self.damage = damage
  83. # 伤害敌人
  84. def hurt(self, enemy):
  85. # 让敌人掉血
  86. enemy.lose_blood(self.damage)
  87. if __name__ == '__main__':
  88. soldier = Person("张三")
  89. n = int(input('枪的子弹为: '))
  90. clip = Clip(n)
  91. #print(clip)
  92. i = 0
  93. while i < 60:
  94. # 创建一个子弹
  95. bullet = Bullet(n)
  96. soldier.install_bullet(clip, bullet)
  97. i += 1
  98. print(clip)
  99. # 创建一个枪
  100. gun = Gun()
  101. print(gun)
  102. # 安装弹夹
  103. soldier.install_clip(gun, clip)
  104. print(gun)
  105. soldier.take_gun(gun)
  106. # 创建一个敌人
  107. enemy = Person("敌人")
  108. print(enemy)
  109. # 士兵拿枪
  110. soldier.fire(enemy)
  111. print(enemy)
  112. soldier.fire(enemy)
  113. print(enemy)

image.png

2、定义公民类,实例成员变量有身份证号、姓名、年龄和性别。定义公民类的派生类:学生类和教师类。学生类增加实例成员变量学号、班级和分数;教师类增加实例变量工号、系别和工资。编写主程序, 定义类的对象,设置对象的实例属性,显示对象的信息。

  1. #encoding=gbk
  2. """
  3. 2、定义公民类,实例成员变量有身份证号、姓名、年龄和性别。
  4. 定义公民类的派生类:学生类和教师类。
  5. 学生类增加实例成员变量学号、班级和分数;
  6. 教师类增加实例变量工号、系别和工资。
  7. 编写主程序, 定义类的对象,设置对象的实例属性,显示对象的信息。
  8. """
  9. class citizen():
  10. def __init__(self, ID_number=None, Name=None, Age=None, Sex=None):
  11. self.ID_number=ID_number
  12. self.Name=Name
  13. self.Age=Age
  14. self.Sex=Sex
  15. class student(citizen):
  16. def __init__(self, ID_number=None, Name=None, Age=None, Sex=None, Student_number=None, Class_name=None,
  17. fraction=None):
  18. super(student,self).__init__(ID_number,Name,Age,Sex)
  19. self.Student_number=Student_number
  20. self.Class_name=Class_name
  21. self.fraction=fraction
  22. class teacher(citizen):
  23. def __init__(self, ID_number=None, Name=None, Age=None, Sex=None, Job_number=None, Department=None,
  24. wages=None):
  25. super(teacher,self).__init__(ID_number,Name,Age,Sex)
  26. self.Job_number=Job_number
  27. self.Department=Department
  28. self.wages=wages
  29. kangkang = student("001","1111",18,'男',"11111","11111",52)
  30. kanglaoshi = teacher("002","1111",11,'1',"11","111",11111)
  31. print(kangkang.Name,kangkang.Sex,kangkang.Student_number)
  32. print(kanglaoshi.Name,kanglaoshi.Sex,kanglaoshi.ID_number)
  33. # print(kanglaoshi)

image.png

3、定义一个复数类,包括实部和虚部成员变量、构造方法、以及两个复数的加法、乘法和比较大小运算符定义。

  1. #encoding=gbk
  2. """
  3. 3、定义一个复数类,包括实部和虚部成员变量、构造方法、以及两个复数的加法、乘法和比较大小运算符定义。
  4. """
  5. from math import sqrt
  6. class Complex:
  7. def __init__(self, real, imag):
  8. self.re = real
  9. self.im = imag
  10. def __add__(self, o):
  11. return Complex(self.re + o.re, self.im + o.im)
  12. def __sub__(self, o):
  13. return Complex(self.re - o.re, self.im - o.im)
  14. def __mul__(self, o):
  15. return Complex(self.re * o.re - self.im * o.im, self.re * o.im + self.im * o.re)
  16. def __truediv__(self, o):
  17. m = o.re * o.re + o.im * o.im
  18. return Complex((self.re * o.re + self.im * o.im) / m, (self.im * o.re - self.re * o.im) / m)
  19. def __str__(self):
  20. if self.im == 0:
  21. return '%.2f' % self.re
  22. if self.re == 0:
  23. return '%.2fi' % self.im
  24. if self.im < 0:
  25. return '%.2f - %.2fi' % (self.re, -self.im)
  26. else:
  27. return '%.2f + %.2fi' % (self.re, self.im)
  28. def mod(self):
  29. return sqrt(self.re * self.re + self.im * self.im)
  30. def solve(comp1, comp2):
  31. print('加法:',comp1 + comp2)
  32. print('减法:',comp1 - comp2)
  33. print('乘法:',comp1 * comp2)
  34. print('除法:',comp1 / comp2)
  35. print('模1:%.2f' % comp1.mod())
  36. print('模2:%.2f' % comp2.mod())
  37. comp1 = Complex(2, 3)
  38. comp2 = Complex(5, -2)
  39. solve(comp1, comp2)

image.png
4、自定义类模拟三维向量及其运算。
定义一个三维向量类,并定义相应的特殊方法实现两个该类对象之间的加、减运算(要求支持运算符+、-),实现该类对象与标量的乘、除运算(要求支持运算符*、/),以及向量长度的计算(要求使用属性实现)。

  1. #encoding=gbk
  2. """
  3. 4、自定义类模拟三维向量及其运算。
  4. 定义一个三维向量类,并定义相应的特殊方法实现两个该类对象之间的加、减运算(要求支持运算符+、-),
  5. 实现该类对象与标量的乘、除运算(要求支持运算符*、/),以及向量长度的计算(要求使用属性实现)。
  6. """
  7. class MyArray:
  8. def __init__(self, x, y, z):
  9. self.__x = x
  10. self.__y = y
  11. self.__z = z
  12. def add(self, a):
  13. x = self.__x + a.__x
  14. y = self.__y + a.__y
  15. z = self.__z + a.__z
  16. print("和=({},{},{})".format(x, y, z))
  17. def sub(self, a):
  18. x = self.__x - a.__x
  19. y = self.__y - a.__y
  20. z = self.__z - a.__z
  21. print("差=({},{},{})".format(x, y, z))
  22. def mul(self, a):
  23. x = self.__x * a
  24. y = self.__y * a
  25. z = self.__z * a
  26. print("乘积=({},{},{})".format(x, y, z))
  27. def div(self, a):
  28. x = self.__x / a
  29. y = self.__y / a
  30. z = self.__z / a
  31. print("商=({},{},{})".format(x, y, z))
  32. @property
  33. def length(self):
  34. return round(pow(pow(self.__x, 2) + pow(self.__y, 2) + pow(self.__z, 2), 0.5), 3)
  35. list = input("请输入六个数:").split()
  36. print('N1:', list[0], list[1], list[2])
  37. print('N2:', list[3], list[4], list[5])
  38. n1 = MyArray(int(list[0]), int(list[1]), int(list[2]))
  39. n2 = MyArray(int(list[3]), int(list[4]), int(list[5]))
  40. n1.add(n2)
  41. n1.sub(n2)
  42. n1.mul(2)
  43. n1.div(2)
  44. print(n1.length)

image.png
5、自定义类实现带超时功能队列结构
编写程序,实现自定义类,模拟队列结构。要求实现入队、出队以及修改队列大小和判断队列是否为空、是否为满的功能,同时要求在入队时如果队列已满则等待指定时间、出队时如果队列已空则等待指定时间等辅助功能。