实验二 Python 控制结构与文件操作

实验二Python控制结构与文件操作

一、实验基本原理

运用Anaconda搭建Jupyternotebook平台编写Python实例程序。

二、实验目的

1、理解Python的流程控制、文件操作基本原理。

2、通过实际案例编程,掌握Python的流程控制、文件基本操作。

三、具体要求

1、Python的流程控制:顺序结构、选择结构、循环结构。

2Python流程语句:if语句、for语句、while语句、breakcontinue等。

3、if、for、while等语句相互之间的嵌套程序开发等。

4、Python的文件操作、异常处理。

四、实验环境

1、Windows10电脑一台。

2、Anaconda、Python、Jupyternotebook平台。

五、实验内容

实例1:计算三角形面积。

Python编程实现,接收用户从键盘输入的三角形的三边长,判断任意两边之和能否大于第三边,如果大于,则计算三角形的面积计算半周长,实验一),并输出,否则显示“你所输入的三边长不能构成三角形”。运行程序一次,可以计算多个三角形的面积。

要求:

1)计算三角形面积,在一个自定义函数fun(a,b,c)中完成,该函数名可以改成其它名字。该函数返回面积值。

(2)主调程序中完成功能:三边长数值的输入不能负数)、判断能否构成三角形和面积值的输出。

3)形参abc接收主调程序传递过来的实参:三边的值,要求使用关键字参数传递。

#实例 1:计算三角形面积 import math # 定义计算三角形面积的函数 def fun(a, b, c): # 计算半周长 p = (a + b + c) / 2 # 计算面积(海伦公式) area = math.sqrt(p * (p - a) * (p - b) * (p - c)) return area # 主程序 def main(): # 输入三边长,并进行有效性检查 while True: try: a = float(input("请输入第一边的长度:")) b = float(input("请输入第二边的长度:")) c = float(input("请输入第三边的长度:")) # 判断是否为负数或零 if a <= 0 or b <= 0 or c <= 0: print("边长必须是正数,请重新输入!") continue # 如果输入无效,继续要求输入 else: break # 三边有效,跳出循环 except ValueError: print("输入无效,请输入数字!") # 判断是否能构成三角形并计算面积 if a + b > c and a + c > b and b + c > a: # 三角形不等式 area = fun(a, b, c) print(f"三角形的面积是:{area:.2f}") else: print("无法构成三角形") # 调用主程序 main()

实例2:随机点名

线上上课时,随机点名。以班级人数n为上限,随机生成m个整数(大于0小于班级人数+1)作为学号,要求这m个学生在30秒内在QQ群或腾讯课堂讨论区,回复1,过30秒后未回复1按旷课处理。提示:本题只需产生m个互不相同的随机整数并输出,即可。

#实例 2:随机点名 import random # 主程序 def main(): # 输入班级人数和需要点名的人数 n = int(input("请输入班级人数:")) m = int(input("请输入点名人数:")) # 判断输入是否合法 if m > n: print("点名人数不能大于班级人数!") return # 生成随机学生编号 students = random.sample(range(1, n + 1), m) # 输出随机生成的学生编号 print("随机点名结果:") print(" ".join(map(str, students))) # 调用主程序 main()

实例3:奖金发放

某企业发放的奖金是根据员工给企业创造的利润提成计算的,其规则如下所示。利润

(1)低于或等于10万元时,奖金可提10%

(2)利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%以下皆按照阶梯计算提成。

(3)低于20万元时如上20万到40万之间时,高于20万元的部分,可提成5%

(4)低于40万元时如上,40万到60万之间时高于40万元的部分,可提成3%

(5)低于60万元时如上60万到100万之间时,高于60万元的部分,可提成1.5%

(6)低于100万元时如上,高于100万元时,超过100万元的部分按1%提成

要求:从键盘输入某员工为企业创造的利润值,输入应获得的奖金。实验报告时,要求输入为123的输出结果。

#实例 3:奖金发放 def calculate_bonus(profit): if profit <= 10: # 利润≤10万,提10% return profit * 0.1 elif profit <= 20: # 10万<利润≤20万:前10万提10%,超出部分提7.5% return 10 * 0.1 + (profit - 10) * 0.075 elif profit <= 40: # 20万<利润≤40万:前10万10% + 中间10万7.5% + 超出20万部分5% return 10 * 0.1 + 10 * 0.075 + (profit - 20) * 0.05 elif profit <= 60: # 40万<利润≤60万:前40万按上式 + 超出40万部分3% return 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (profit - 40) * 0.03 elif profit <= 100: # 60万<利润≤100万:前60万按上式 + 超出60万部分1.5% return 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + (profit - 60) * 0.015 else: # 利润>100万:前100万按上式 + 超出100万部分1% return 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015 + (profit - 100) * 0.01 def main(): profit = float(input("请输入利润(万元):")) bonus = calculate_bonus(profit) print(f"应得奖金为:{bonus:.2f} 万元") main()

实例4逢七拍手游戏

要求按水平方向)顺序输出100以内的所有数字,7或能被7整除的数,显示“*表示拍手输出例如:

#实例 4:逢七拍手游戏 # 打印 1 到 100 之间的所有数字 def game(): for i in range(1, 101): # 判断数字是否包含7或能被7整除 if '7' in str(i) or i % 7 == 0: print('*', end=' ') else: print(i, end=' ') # 调用函数开始游戏 game()

实例5:猜数字大小游戏。

猜数游戏是一个益智类小游戏,通常由两人参与,一个人(你所编写的程序)出数字,另一个人(玩家:是你)猜数字,当猜数字的人说出一个数字时,由出数字的人告知是否猜中,知道猜中,游戏结束

import random # 定义猜数字游戏 def guess_game(): # 生成目标数字(1 到 100 之间) target = random.randint(1, 100) # 游戏提示 print("欢迎来到猜数字游戏!") print("游戏开始,猜一个1到100之间的数字。") # 初始化猜测次数 attempts = 0 max_attempts = 5 # 最多猜 5 次 # 游戏主循环 while attempts < max_attempts: # 获取玩家的猜测 guess = int(input(f"请输入一个数字:")) # 增加猜测次数 attempts += 1 # 判断猜测结果 if guess < target: print("您输入的数字小了!") elif guess > target: print("您输入的数字大了!") else: print(f"恭喜,您猜对了!答案是 {target}。") print(f"游戏结束!您总共猜了 {attempts} 次。") break # 猜对了,结束游戏 else: # 超过 5 次后游戏结束 print(f"很遗憾,5次机会已用尽,游戏结束,答案为 {target}。") # 调用游戏函数 guess_game()

实例6:将学生名单存入Excel文件中。

将模块student_XYY.py见附件中的字典dict_stu中的学生名单存入Excel文档student_XYY.xlsx”中。student_XYY.py内容如下(以1班的1号为例):

dict_stu={1:'程小青',3:'石雯雯',4:'苏彤',5:'王欣雨',6:'薄智鑫',7:'陈华超',8:'葛超驰',9:'韩硕',11:'黄昊',12:'焦俊',13:'黎子豪',14:'李博文',15:'李荣伟',16:'李帅奇',18:'李炜',19:'李月仓',20:'刘高伟',21:'路迪飞',22:'宋禹宏',24:'田朕宇',25:'王禹皓',26:'吴琪琛',27:'吴永帅',28:'颜亨太',30:'张珈玮',31:'张家朋',34:'张子傲',35:'赵瑞',36:'赵永旺',37:'赵振',38:'朱苏宁',39:'朱唐喜',40:'庄廷泽',41:'邹超磊'}

存入Excel文档“student_101.xlsx”后,格式如下

提示:

fromstudent_101import*#导入student_101.py文件。使用openpyxl创建workbook

fromopenpyxlimportWorkbook

Workbook()#创建工作簿

wb.create_sheet(title="student")#创建工作表

#实例 6:将学生名单存入 Excel 文件中 from openpyxl import Workbook # 创建一个字典,包含学生的编号和姓名 dict_stu = { 1: '程小青', 3: '石雯雯', 4: '苏彤', 5: '王欣雨', 6: '薄智鑫', 7: '陈华超', 8: '葛超驰', 9: '韩硕', 11: '黄昊', 12: '焦俊', 13: '黎子豪', 14: '李博文', 15: '李荣伟', 16: '李帅奇', 18: '李炜', 19: '李月仓', 20: '刘高伟', 21: '路迪飞', 22: '宋禹宏', 24: '田朕宇', 25: '王禹皓', 26: '吴琪琛', 27: '吴永帅', 28: '颜亨太', 30: '张珈玮', 31: '张家朋', 34: '张子傲', 35: '赵瑞', 36: '赵永旺', 37: '赵振', 38: '朱苏宁', 39: '朱唐喜', 40: '庄廷泽', 41: '邹超磊' } # 创建Excel工作簿 wb = Workbook() # 创建工作表并命名 ws = wb.active ws.title = "学生名单" # 添加表头 ws.append(["学号", "姓名"]) # 将字典中的数据写入Excel for student_id, student_name in dict_stu.items(): ws.append([student_id, student_name]) # 保存文件到指定路径 file_path = r"E:\人工智能与大数据\实验\student_553.xlsx" wb.save(file_path) print(f"数据已成功保存到: {file_path}")

六:思考题

思考1随机点名

要求:对上题生成的学生学号及姓名数据集文件“student_XYY.xlsx”中的学生进行随机抽取点名,抽取到的同学的学号和姓名显示输出,提示被点到名字的同学在QQ群回复1。然后开始正向计时30秒(用sleep()函数完成),以进度条的形式显示。计时结束后显示点名结束。进度条等自己设计,合理即可。

提示:

(1导入文件内容

fromopenpyxlimportload_workbook

load_workbook(student_101.xlsx)#打开已有excel文件

2)随机抽取点名人数列表

fromrandomimport*

fromtimeimport*

fromsysimport*

输出格式例如

(3)计时显示例如:

#思考题 1:随机点名 import random import time from openpyxl import load_workbook import sys # 导入Excel文件 file_path = r"E:\人工智能与大数据\实验\student_553.xlsx" wb = load_workbook(file_path) ws = wb.active # 获取学生名单和学号 students = [] for row in ws.iter_rows(min_row=2, max_row=42, min_col=1, max_col=2): students.append((row[0].value, row[1].value)) # 存储学号和姓名的元组 # 输入点名人数 num_to_call = int(input("请输入需要点名的人数(不大于34,不小于1):")) # 确保输入的点名人数不超过学生总数 if num_to_call > len(students): print("点名人数不能超过学生总数!") else: # 打印提示信息 print("点名人数为:", num_to_call) # 随机抽取并显示学生 selected_students = random.sample(students, num_to_call) # 随机抽取指定人数的学生 print(f"抽取的 {num_to_call} 名学生:") for student in selected_students: student_id, student_name = student print(f"学号:{student_id} 姓名:{student_name}") print(f"请上面 {num_to_call} 个同学30秒钟之内在QQ群回复1!") print('-' * 15 + "计时开始" + '-' * 15) # 显示倒计时进度条 for i in range(30, 0, -1): time.sleep(1) sys.stdout.write(f"\r[{'#' * (30 - i)}{' ' * i}] {i}s") sys.stdout.flush() print("\n" + '-' * 15 + "计时结束" + '-' * 15) print("游戏结束!")

思考2唐诗宋词

一首唐诗宋词字符串写入文本文件(扩展名为.txt),以古诗为例:第一行,诗作者第二行,第三行及以后一行一句诗句要求每行内容居中。然后再从文件整体读取出来并输出;最后再输诗的第一句诗

要求:

1)文本文件的主文件名用自己的学号和名字,假如1号张三,则文件名为:01-张三-思考2.txt

(2)写入上述文件中的字符串要求是一首古诗词,每个同学写入的诗词都不能一样,否则算作雷同,0分记。

(3)使用异常捕获与处理。

4)使用with语句打开和自动关闭打开的文件。

5)写入和读出分两段程序完成,并且读出使用三种方法完成。read()函数、readlines()函数及for循环。

import os # 定义数据 poem_title = "鹿柴" # 诗名 poet = "王维" # 诗人 poem_lines = [ "空山不见人,", "但闻人语响。", "返景入深林,", "复照青苔上。" ] # 生成居中的诗句(获取最长行长度,用于居中对齐) max_length = max(len(poem_title), len(poet), max(len(line) for line in poem_lines)) # 指定文件存放目录 file_directory = r"E:\人工智能与大数据\实验" file_name = "53-吴涛-思考题2.txt" file_path = os.path.join(file_directory, file_name) # 合并路径和文件名 # 确保目录存在 if not os.path.exists(file_directory): os.makedirs(file_directory) # 将诗歌写入文件 print(f"正在写入文件:{file_path} ...") with open(file_path, "w", encoding="utf-8") as f: # 写入诗名,居中 f.write(poem_title.center(max_length) + '\n') # 写入诗人名,居中 f.write(poet.center(max_length) + '\n') # 写入每一行诗句,居中 for line in poem_lines: f.write(line.center(max_length) + '\n') print("写入完成!\n") # 读取文件内容 # 方法一:使用 read() 函数(一次性读取全部) print(" 读取方法一:read() " ) with open(file_path, "r", encoding="utf-8") as f: content = f.read() print(content) # 方法二:使用 readlines() 函数(读取为列表) print(" 读取方法二:readlines() ") with open(file_path, "r", encoding="utf-8") as f: lines = f.readlines() for line in lines: # line中已经包含换行符,所以print时设置end=''避免双重换行 print(line, end='') # 方法三:使用 for 循环遍历文件对象(节省内存,逐行读取) print("\n" " 读取方法三:for 循环 ") with open(file_path, "r", encoding="utf-8") as f: for line in f: print(line, end='') print() # 打印一个空行 # 输出诗的第一句 print("诗的第一句:") print(poem_lines[0]) # 输出第一句诗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1156457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

核心要点:避免USB Serial驱动下载后被系统禁用

一次连接&#xff0c;永久可用&#xff1a;破解USB Serial驱动被系统禁用的底层真相 你有没有遇到过这样的场景&#xff1f; 刚插上开发板&#xff0c;驱动安装成功&#xff0c;PuTTY连上了&#xff0c;日志哗哗地刷出来——一切看起来都那么完美。可第二天重启电脑&#xff…

Opensearch数据迁移:CCR功能数据迁移完整操作指南(上)

#作者&#xff1a;stackofumbrella 文章目录使用CCR功能迁移数据功能概述约束限制在主集群中创建索引从集群中执行启用CCR复制功能在主集群中写入测试数据在从集群中查看同步状态查看从集群中的同步数据关闭CCR功能查看远程集群信息删除远程集群配置信息使用CCR功能迁移数据 功…

计算机毕业设计-课程设计-校园失物招领系统设计与实现-程序-文档-全套资料

摘要学校作为一个人流量非常大的场所&#xff0c;当我们的物品不小心遗失后&#xff0c;之后的找寻过程一定是非常困难的。而为了可以解决这中问题&#xff0c;就出现了校园失物招领网站&#xff0c;通过校园失物招领网站&#xff0c;可以减少我们因为失物而带来的不便和困扰。…

Modbus RTU数据读取异常?ModbusPoll下载抓包辅助诊断

Modbus RTU通信总出问题&#xff1f;别急&#xff0c;用ModbusPoll抓包一招定位你有没有遇到过这样的场景&#xff1a;某台电表明明通着电、接线也没松动&#xff0c;但PLC就是读不到数据&#xff1b;或者HMI上某个温度值频繁跳变、甚至直接报超时&#xff1f;如果这个系统走的…

基于STM32的QSPI通信实战案例详解

STM32上的QSPI实战&#xff1a;从零搭建高速外部存储系统你有没有遇到过这样的困境&#xff1f;项目做到一半&#xff0c;内部Flash快爆了&#xff0c;GUI资源、音频文件、新功能代码全挤在一起&#xff0c;改一行代码都得精打细算&#xff1b;OTA升级时看着进度条一动不动&…

Keil项目迁移时中文注释乱码的预防与处理策略

如何彻底解决 Keil 中文注释乱码问题&#xff1f;一个嵌入式老手的实战经验最近接手了一个遗留项目&#xff0c;从同事手里接过压缩包解压后打开 Keil 工程&#xff0c;第一眼就傻了——满屏“ž„‹Œ–£”、“???”……原本清晰的中文注释全变成了天书。这哪是代码…

深入 Yak 语言高级编程:异步并发与延迟执行实践

深入Yak语言高级编程&#xff1a;异步并发与延迟执行实践 前言 Yak语言作为一款面向网络安全领域的动态编程语言&#xff0c;凭借其轻量、高效的特性&#xff0c;在渗透测试、漏洞挖掘等场景中得到了广泛应用。对于安全从业者而言&#xff0c;编写高性能的自动化脚本往往需要依…

论坛网站信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

&#x1f4a1;实话实说&#xff1a;有自己的项目库存&#xff0c;不需要找别人拿货再加价&#xff0c;所以能给到超低价格。摘要 随着互联网技术的快速发展&#xff0c;论坛网站作为信息交流的重要平台&#xff0c;逐渐成为用户分享观点、获取知识的主要渠道。传统论坛系统在功…

钥匙和房间

本文参考代码随想录 有 N 个房间&#xff0c;开始时你位于 0 号房间。每个房间有不同的号码&#xff1a;0&#xff0c;1&#xff0c;2&#xff0c;…&#xff0c;N-1&#xff0c;并且房间里可能有一些钥匙能使你进入下一个房间。 在形式上&#xff0c;对于每个房间 i 都有一个…

IAR使用教程:优化嵌入式C代码的操作指南

如何用IAR榨干MCU性能&#xff1f;一位嵌入式老手的实战优化笔记最近在调试一个低功耗传感器项目时&#xff0c;客户突然提出“电池寿命必须延长30%”。我看了看当前固件&#xff1a;Flash用了快300KB&#xff0c;SRAM占用接近80%&#xff0c;主循环执行时间也偏长。硬件已经定…

大模型推理过程内存占用(动态)

阿里社区博客(重点在transformer的激活值参数量估计)&#xff1a;https://developer.aliyun.com/article/1496103 推理时显存占用&#xff08;GitHub&#xff09;&#xff1a; https://github.com/Hoper-J/I-Guide-and-Demos-zh_CN/blob/master/Guide/07.%20%E6%8E%A2%E7%A9%…

u8g2字体编码与字符映射关系通俗解释

u8g2字体编码与字符映射&#xff1a;从“乱码”到清晰显示的底层逻辑 你有没有遇到过这样的场景&#xff1f;在STM32或ESP32上驱动一块OLED屏&#xff0c;信心满满地调用 u8g2_DrawStr() 打印一句中文“温度25C”&#xff0c;结果屏幕上却只出现几个方框、问号&#xff0c;甚…

AD23新增元件库资源盘点:与AD20的生态扩展对比

AD23元件库生态跃迁&#xff1a;从“建库”到“治库”的工程革命你有没有经历过这样的场景&#xff1f;深夜赶板&#xff0c;原理图画到一半&#xff0c;发现缺一个关键电源芯片的封装——查遍本地库、论坛、第三方网站&#xff0c;最终找到一个名字像模像样但引脚顺序反了的Pc…

单词接龙问题

本文参考代码随想录 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列&#xff1a; 序列中第一个单词是 beginWord 。 序列中最后一个单词是 endWord 。 每次转换只能改变一个字母。 转换过程中的中间单词必须是字典 wordList 中的单词。…

STM32最小系统板Keil5下载实操从零实现

从零搭建STM32最小系统板&#xff1a;Keil5下载实战全解析 你是否也经历过这样的时刻——电路焊好了&#xff0c;代码写完了&#xff0c;满怀期待地点击“Download”&#xff0c;结果 Keil 弹出一串红字&#xff1a;“No target connected”&#xff1f; 别急&#xff0c;这几…

信息化在线教学平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

&#x1f4a1;实话实说&#xff1a;用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否&#xff0c;咱们都是朋友&#xff0c;能帮的地方我绝不含糊。买卖不成仁义在&#xff0c;这就是我的做人原则。摘要 随着信息技术的快速发展&#xff0c;教育行业正逐…

SpringBoot+Vue 在线宠物用品交易网站平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

&#x1f4a1;实话实说&#xff1a;用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否&#xff0c;咱们都是朋友&#xff0c;能帮的地方我绝不含糊。买卖不成仁义在&#xff0c;这就是我的做人原则。摘要 随着互联网技术的快速发展&#xff0c;电子商务已…

冗余连接问题

本文参考代码随想录 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间&#xff0c;且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges &am…

MOSFET驱动电路设计从零实现:基于IR2110

从零搭建MOSFET驱动电路&#xff1a;IR2110实战全解析你有没有遇到过这样的情况——明明MCU输出了正确的PWM信号&#xff0c;但MOSFET却发热严重、效率低下&#xff0c;甚至莫名其妙烧毁&#xff1f;问题很可能出在驱动电路上。在功率电子系统中&#xff0c;MOSFET是核心开关器…

SpringBoot+Vue 论坛网站平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

&#x1f4a1;实话实说&#xff1a;用最专业的技术、最实惠的价格、最真诚的态度服务大家。无论最终合作与否&#xff0c;咱们都是朋友&#xff0c;能帮的地方我绝不含糊。买卖不成仁义在&#xff0c;这就是我的做人原则。摘要 随着互联网技术的快速发展&#xff0c;在线论坛平…