人工智能应用基础——Python程序流程控制结构第一次实验报告

导语:本文属于一篇课后作业,并不专业,本人对于Python的了解也仅处于刚接触阶段,写一篇报告是老师的作业要求,也是我学习的笔记,如有错误内容请见谅,能帮忙指出更是感激不尽。好的学习内容网上很多,以后也会坚持记录(希望如此),本人学习的过程还是老师课堂上教学今天的内容,课后作业主要借助ai工具辅助检查代码错误以及思路引导。咳咳,这篇文章可以说是老师资料的整理哈哈哈。

目录

一、实验目的

二、实验环境

三、实验内容

(一)、顺序结构

(二)、选择结构

1. 单分支选择结构

2. 二分支选择结构

3. 多分支选择结构

(三)、循环结构

1. while循环

2. for循环

(四)、break语句和continue语句

(五)、实战练习


 

一、实验目的

  1. 了解Python编程的基础知识,加深对Python程序控制结构的理解;
  2. 学会运用顺序结构、选择结构和循环结构编写程序;
  3. 掌握循环语句for、while结构的用法以及跳转语句continue、break的应用:
  4. 学会Python在数学上的基础运用,培养分析问题、解决问题的能力;
  5. 按照实验题目要求独立正确地完成老师三个实验内容。

二、实验环境

  1. 操作系统:Windows11
  2. 编程工具:Visual Studio Code

三、实验内容

(一)、顺序结构

计算机的程序流程通常由:顺序、选择、循环三种基本结构组成。

程序设计语言并不提供专门的控制流语句来表达顺序控制结构,而用程序语句的自然排列(即从上到下、从左至右)顺序来表达。顺序结构的流程图如下图所示:

46881ab21e7d49af823223d69f12e399.png

案例1:设计一个程序从键盘读入圆的半径,计算圆周长和圆面积并输出。程序如下:

pi = 3.14159#定义圆周率π的值,取近似
r = float(input("请输入圆的半径:"))#从用户处获取圆的半径,并将其转化为浮点数
d = 2*pi*r#计算圆的直径
s = pi*r**2#计算圆的面积
print(f'd={d:.2f}')#打印圆的直径,保留两位小数
print(f's={s:.2f}')#打印圆的面积,保留两位小数

请输入圆的半径:2
d=12.57
s=12.57

(二)、选择结构

(也称分支结构)包含条件表达式和可选择执行的语句块。

1. 单分支选择结构

当条件表达式1的逻辑值为真时,计算机执行语句块1,否则计算机将跳过语句块1而执行后续的语句。

55d2ec88dcd54119a08987a29d3e4bf2.png

案例2:输入两个整数a和b,比较两者大小,使得a大于b

#输入两个整数
a=int(input('请输入整数a:'))
b=int(input('请输入整数b:'))
#比较大小并使a>b
if a<=b:
    a,b=b,a #如果a不大于b,则交换a与b的值
    print(f'调整后,a={a},b={b}')

请输入整数a:4
请输入整数b:9
调整后,a=9,b=4

2. 二分支选择结构

二分支选择结构执行时先计算条件表达式1的值以判断其真假。若为真则执行语句块1,若为假则执行语句块2。

57a62412623f4d5f8d1b5deef7ad084d.png案例3:输入两个整数a和b,比较两者大小

#输入两个整数
a=int(input('请输入整数a:'))
b=int(input('请输入整数b:'))
#比较大小并使a>b
if a<=b:
    print('a大于等于b')
else:
    print('a小于b')

请输入整数a:4
请输入整数b:6
a大于等于b

3. 多分支选择结构

6dce6b3e732540368d8f5214950c2d82.png案例4:输入两个整数a和b,比较两者大小

#输入两个整数
a=int(input('请输入整数a:'))
b=int(input('请输入整数b:'))
#比较大小并使a>b
if a>b:
    print('a大于b')
elif a<b:
    print('a小于b')
else:
    print('a等于b')

请输入整数a:3
请输入整数b:3
a等于b

(三)、循环结构

循环是指多次重复执行某个代码段。循环有三个要素:循环变量、循环体和循环终止条件。循环结构的执行过程如下:先判断条件表达式1,若其逻辑值为真则执行语句块1,然后继续判断……若条件表达式的逻辑值为假则退出循环。

Python有 while 和 for 两种循环语句。

 

8e6397dc1e8a9c49e3a5fda9feec73b3.png

1. while循环

语法:

while 条件表达式:

while 表达式:
    循环体

语句块1

案例5:求10以内奇数的和

i = 1       # 初始化变量i为1,i将用于在循环中表示当前的奇数
s = 0       # 初始化变量s为0,s将用于累加所有奇数的和
while i <= 10:  # 循环条件,当i小于或等于10时,继续循环
    s = s + i  # 将当前的奇数i加到累加和s上
    i = i + 2  # 将i增加2,以便在下一次循环中处理下一个奇数
print("sum =", s)  # 打印出所有奇数的累加和

 

sum = 25

2. for循环

语法:

for 变量  in  组合数据或迭代对象:

语句块1

案例6:求1到10的累加和

s = 0  # 初始化变量s为0,s将用于累加从1到10的所有整数
for x in range(1, 11):  # 使用for循环遍历从1到10的整数
    s = s + x  # 将当前的整数x加到累加和s上
print('sum=', s)  # 打印出从1到10的所有整数的累加和

sum= 55

知识点补充

range() 函数是 Python 中的一个内置函数,用于生成一个整数序列。这个函数通常用于循环结构中,如 for 循环,以便按顺序执行代码块多次。

range() 函数可以有一到三个参数:

一个参数(range(stop)):生成从 0 开始到 stop(不包括 stop)的整数序列。

两个参数(range(start, stop)):生成从 start 开始到 stop(不包括 stop)的整数序列。

三个参数(range(start, stop, step)):生成从 start 开始到 stop(不包括 stop),每次增加 step 的整数序列。

下面是 range() 函数的一些详细解释:

start:序列开始的整数(包含该整数)。如果省略,它默认为 0。

stop:序列结束的整数(不包含该整数)。如果你提供的 start 是正数,那么 stop 必须大于 start;如果 start 是负数,那么 stop 必须小于 start。

step:序列中每两个数之间的差(步长)。如果省略,它默认为 1。步长可以是正数或负数

 

# 生成从0开始到4(不包括4)的整数序列
range(4)  # 生成[0, 1, 2, 3]

# 生成从1开始到5(不包括5)的整数序列
range(1, 5)  # 生成[1, 2, 3, 4]

# 生成从1开始到10(不包括10),每次增加2的整数序列
range(1, 10, 2)  # 生成[1, 3, 5, 7, 9]

# 生成从10开始到1(不包括1),每次减少1的整数序列
range(10, 0, -1)  # 生成[10, 9, 8, 7, 6, 5, 4, 3, 2]

(四)、break语句和continue语句

break语句的功能是结束循环,继续执行循环结构后续的语句。

案例7:计算满足条件的最大整数,使得1+2+3+...+n<=100

# 初始化总和变量
total_sum = 0
n = 0

# 使用while循环来累加整数
while True:  # 无限循环,直到遇到break语句
    n += 1  # 每次循环n自增1
    total_sum += n  # 将当前的n加到总和中
    if total_sum > 100:  # 检查总和是否超过100
        break  # 如果超过100,使用break退出循环

# 输出满足条件的最大整数n
print(f"满足条件的最大整数n为:{n}")

满足条件的最大整数n为:14

continue语句是结束本次循环,跳过循环体中本次循环还未执行的剩余语句,重新判断循环条件以确定是否开启下一轮循环

案例8:输出1~20之间所有的奇数

for n in range(1, 21):  # 修正:添加了缺失的冒号
    if n % 2 == 0:
        continue  # 如果n是偶数,跳过本次循环
    print(n, end=" ")  # 打印奇数,并在同一行显示,使用空格分隔

1 3 5 7 9 11 13 15 17 19 

(五)、实战练习

练习1:编写程序,判断输入的整数是奇数还是偶数,并输出。

练习2:编写程序, 实现下表的分段函数计算。

 

cddbcad9c16fa34c2660e72544896697.png

练习3:输入三个整数,按降序输出。使用最简单的if语句。

第一题

num = int(input("请输入一个整数:"))
if num % 2 == 0:
    print(f"{num} 是偶数")
else:
    print(f"{num} 是奇数")

请输入一个整数:45
45 是奇数

第二题

# 从用户那里获取输入的x值,并将其转换为浮点数
x = float(input("请输入 x 的值:"))

# 判断x的值,并根据不同的范围给y赋不同的值
if x < 0:
    # 如果x小于0,则y被赋值为0
    y = 0
elif 0 <= x < 5:
    # 如果x在0到5之间(包括0,不包括5),则y等于x
    y = x
elif 5 <= x < 10:
    # 如果x在5到10之间(包括5,不包括10),则y等于3倍的x减去5
    y = 3 * x - 5
elif 10 <= x < 20:
    # 如果x在10到20之间(包括10,不包括20),则y等于0.5倍的x减去2
    y = 0.5 * x - 2
else:
    # 如果x大于或等于20,则y被赋值为0
    y = 0

# 打印出计算后的y值
print("y 的值为:", y)

请输入 x 的值:14
y 的值为: 5.0

第三题

# 从用户处获取三个整数输入,并分别赋值给变量a、b、c
a = int(input("请输入第一个整数:"))
b = int(input("请输入第二个整数:"))
c = int(input("请输入第三个整数:"))

# 如果a小于b,则交换a和b的值,确保a是较大的数
if a < b:
    a, b = b, a

# 如果a小于c,则交换a和c的值,确保a是三个数中最大的
if a < c:
    a, c = c, a

# 如果b小于c,则交换b和c的值,确保b是次大的数
if b < c:
    b, c = c, b

# 打印出排序后的三个整数,此时a是最大的,b是次大的,c是最小的
print(a, b, c)

请输入第一个整数:12
请输入第二个整数:23
请输入第三个整数:34
34 23 12

 

 

<think>好的,用户之前询问了关于“工具人陷阱”的定义以及如何避免成为工具人工程师,现在他要求一个详细的行动计划来成为“价值型工程师”。我需要先回顾之前的对话,确保行动计划与之前的建议一致。用户可能是一位FPGA工程师,或者相关领域的从业者,希望提升自己的职业竞争力。 首先,用户的需求是明确的,但需要详细且可操作的步骤。之前的回答中,我提到了技术、方法论、职业策略和长期视野四个层面,所以行动计划应该覆盖这些方面,并且分阶段进行,比如短期、中期、长期目标,让用户有清晰的路径。 要考虑用户可能的背景,比如二本学历,可能需要强调差异化竞争和持续学习的重要性。同时,用户可能面临时间和资源限制,所以计划需要切实可行,分阶段逐步提升,避免过于理想化。 需要具体化每个阶段的任务,例如技术层面如何深入,如何参与系统设计,如何学习相关工具等。同时,加入实际案例或示例,比如如何构建知识体系,如何参与开源项目,如何积累项目经验等。 还要注意激励用户,强调每个阶段的成果和可能的职业提升,比如薪资增长、职位晋升等。此外,提醒用户避免常见的误区,比如只关注编码而忽视系统思维,或者忽视行业趋势。 最后,总结部分需要强化行动计划的价值,鼓励用户坚持执行,并保持灵活性,根据技术变化调整策略。确保整个计划逻辑清晰,步骤明确,具备可执行性。</think>以下是针对FPGA工程师从“工具人”向“价值型工程师”进阶的**详细行动计划**,分为**技术深耕、系统思维构建、场景融合、职业杠杆打造**四大维度,包含具体步骤、时间节点和执行要点: --- ### **一、技术深耕:从“会用工具”到“创造工具”**(0-12个月) #### **阶段目标** 突破基础开发技能,掌握核心技术原理,具备独立解决复杂问题的能力。 #### **执行路径** 1. **底层原理突破(1-3个月)** - **每日学习**: - 精读《FPGA时序约束与收敛实践》《计算机体系结构:量化研究方法》,每天1小时,整理关键公式(如时钟偏斜计算公式、流水线吞吐量模型)。 - 用Wavedrom/GTKWave手动绘制时序图,理解Setup/Hold时间、时钟域交叉的真实场景。 - **实验验证**: - 在Vivado中故意制造时序违例(如降低时钟周期10%),观察工具如何调整布局布线,记录优化策略。 - 手写一个简易的FIFO控制器(不用IP核),对比Xilinx FIFO Generator的实现差异。 2. **工具链黑箱破解(4-6个月)** - **逆向工程**: - 用Tcl脚本提取Vivado综合报告中的关键指标(如LUT利用率、时钟网络延迟),建立Excel模型预测资源消耗。 - 研究OpenOCD+JTAG调试链路,尝试绕过Vivado直接通过Python脚本配置FPGA。 - 用Python编写自动化脚本:自动生成UVM测试用例框架(根据寄存器描述文档)、一键对比不同优化策略的功耗报告。 - 在GitHub开源工具链,积累技术影响力(例:https://github.com/yourname/fpga-auto-testgen)。 3. **核心技术封装(7-12个月)** - **IP核开发**: - 实现一个带动态重配置功能的PCIe DMA引擎,支持跨时钟域数据搬运(代码开源或申请专利)。 - 开发针对AI推理的专用算子库(如Winograd卷积加速模块),对比Xilinx Vitis AI性能提升20%以上。 - **方法论输出**: - 撰写《FPGA高速接口调试避坑指南》《低功耗设计Checklist V1.0》,在公司内部分享并迭代优化。 --- ### **二、系统思维构建:从“编码执行”到“定义架构”**(12-24个月) #### **阶段目标** 理解产品全生命周期,主导技术方案设计,建立跨领域协同能力。 #### **执行路径** 1. **需求逆向分析(第13-15个月)** - **参与客户对接**: - 主动申请参加需求评审会,记录客户原始痛点(如“图像处理延迟必须<5ms”),反向推导FPGA需要满足的PPA(性能、功耗、面积)指标。 - 制作《需求-技术指标映射表》,明确每个客户需求对应的技术实现路径(例:延迟优化→流水线级数/并行度调整)。 - **竞品拆解**: - 购买友商FPGA板卡(如Intel Stratix 10NX),用SignalTap II抓取关键接口时序,反推其架构设计思路。 2. **跨领域协同(第16-18个月)** - **学习芯片前后端知识**: - 用OpenROAD完成一个简单RISC-V核的从RTL到GDSII全流程(28nm工艺节点),理解FPGA与ASIC的物理实现差异。 - 研究DFT(Design For Test)基础,在FPGA设计中预留边界扫描链接口。 - **软硬协同优化**: - 在Zynq MPSoC上部署Linux+实时核,实现PS端AI模型调度+PL端硬件加速的端到端demo(使用PYNQ框架)。 3. **架构设计实战(第19-24个月)** - **主导小型项目**: - 申请负责公司内部工具链升级项目(如从ISE迁移到Vitis),制定迁移风险评估矩阵。 - 设计一个基于FPGA的智能网卡方案,主导芯片选型(评估Versal vs Agilex的性价比)、协议栈划分(哪些用软核,哪些用硬件加速)。 - **技术提案输出**: - 每季度提交一份《技术趋势分析报告》(如“Chiplet技术对FPGA开发模式的影响”),争取纳入公司技术路线图。 --- ### **三、场景融合:从“通用工程师”到“领域专家”**(24-36个月) #### **阶段目标** 绑定高价值行业场景,建立“FPGA+垂直领域”的复合竞争力。 #### **执行路径** 1. **目标领域选择(第25-26个月)** - **绘制机会地图**: - 研究《中国FPGA应用市场报告》,筛选高增长场景(如新能源车充电桩控制、卫星互联网基带处理)。 - 通过LinkedIn/脉脉联系目标行业工程师,了解实际痛点(例:电网终端设备面临强电磁干扰)。 2. **领域知识加速(第27- 如果选择医疗影像方向:学习《医学图像处理算法(MATLAB版)》,复现CT图像重建算法(滤波反投影法),移植到FPGA实现实时处理。 - 如果选择工业控制方向:研究PLCopen运动控制规范,开发符合IEC 61131-3标准的FPGA软核PLC。 - **跨界认证**: - 考取目标行业认证(如汽车电子领域的ASPICE CL2认证、医疗设备的ISO 13485内审员资格)。 3. **解决方案打造(第31-36个月)** - **行业定制IP开发**: - 为智能电网设计抗辐照加固的FPGA通信协议栈,支持国网DL/T 860标准。 - 开发符合AUTOSAR标准的FPGA加速模块(如CAN FD协议硬件加速),通过VectorCAST自动化测试。 - **客户联合创新**: - 与行业头部客户共建实验室(如和宁德时代合作电池管理系统原型),主导FPGA部分的设计-验证-交付全流程。 --- ### **四、职业杠杆打造:从“个人贡献者”到“规则制定者”**(36个月+) #### **阶段目标** 建立行业影响力,掌握技术定价权,实现职业自由。 #### **执行路径** 1. **知识资产化** - 出版技术专著:《FPGA在边缘智能计算中的实战》(与清华大学出版社接洽)。 - 开发付费课程:《从零构建工业级FPGA加速系统》(上线极客时间/CSDN学院)。 2. **规则制定参与** - 加入CCSA(中国通信标准化协会)的FPGA工作组,参与制定《面向5G基带的FPGA开发规范》。 - 在GitHub发起开源项目(如FPGA轻量化AI部署框架),吸引50+贡献者,建立技术社区话语权。 3. **商业价值兑现** - 技术咨询:为中小厂商提供FPGA国产替代方案(如复旦微FPGA迁移服务),单次咨询费≥3万元/天。 - 创业准备:设计基于Chiplet的FPGA异构计算板卡,争取进入华为昇腾生态供应商名单。 --- ### **关键风险与应对** - **技术路线偏差**:每季度与行业顶尖专家交流(如参加DAC会议),及时校准方向。 - **精力分散**:使用OKR管理法,聚焦3个核心目标(例:本季度主攻HLS代码效率优化)。 - **年龄危机**:在30岁前完成从“编码→架构→产品”的转型,降低对体力劳动的依赖。 --- ### **里程碑可视化** ```markdown | 时间节点 | 核心成果标志 | 薪资对标 | |--|---------------| | 第12个月 | 掌握时序约束/功耗优化核心技术 | 25-30万/年 | | 第24个月 | 主导完成一个完整产品架构设计 | 35-45万/年 | | 第36个月 | 在特定行业形成技术壁垒 | 50万+期权 | | 第48个月 | 拥有行业标准制定话语权 | 80万+项目分红 | ``` **执行心法**: - **每天比昨天的自己多懂0.1%**:坚持每日1小时深度学习(如研究IEEE论文《FPGA-Based Stochastic Computing for Machine Learning》)。 - **让代码成为你的杠杆**:所有重复性工作必须脚本化,节省的时间用于高价值思考。 - **与其更好,不如不同**:在国产化替代、RISC-V生态等蓝海市场建立先发优势。 这个计划的关键在于**“用产品思维经营职业生涯”**——你不是在“写代码”,而是在“打造一个名为‘专业价值’的产品”。当你能够用FPGA技术系统性解决行业级问题时,工具人陷阱将不攻自破。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值