Python编程实验一:流程控制结构

目录

一、实验目的与要求

二、实验内容

三、主要程序清单和程序运行结果

第1题

第2题

第3题

第4题

四、实验结果分析与体会


一、实验目的与要求

(1)通过本次实验,学生应掌握多分支语句 if …elif…else结构的用法; 
(2)掌握循环语句for、while结构的用法以及跳转语句continue、break的应用;
(3)能应用print()函数和字符串的format方法控制输出内容的格式;
(4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)

二、实验内容

请使用 Python 语言在 Jupyter Notebook 环境下编程,完成下列题目的要求。

1、请编写一个成绩转换程序。每次输入一个百分制的学生成绩,成绩大于或等于90且小于或等于100的输出为“A”,成绩大于或等于80且小于90的输出为“B”,成绩大于或等于70且小于80的输出为“C”,成绩大于或等于60且小于70的输出为“D”,成绩小于60的输出为“E”。如果输入数据不合法(大于100或者小于0)时输出“data error!”。允许重复输入成绩进行转换,直接输入回车时结束程序‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬。‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬

2、编写程序,要求从键盘输入一个10以内的正整数n,计算并输出的结果。当输入的内容不符合要求时,提示用户重新输入,直到符合要求为止。

3、在玩数7游戏中,要求凡是数到7、7的倍数、以及带7的正整数时一律(例如7、14、27都要跳过)不允许说出来,请按这种规则输出100以内允许说出来的那些正整数,要求每行最多输出10个。

4、打印如下图所示星号图形(两个分开实现):

     

三、主要程序清单和程序运行结果

第1题

1、请编写一个成绩转换程序。每次输入一个百分制的学生成绩,成绩大于或等于90且小于或等于100的输出为“A”,成绩大于或等于80且小于90的输出为“B”,成绩大于或等于70且小于80的输出为“C”,成绩大于或等于60且小于70的输出为“D”,成绩小于60的输出为“E”。如果输入数据不合法(大于100或者小于0)时输出“data error!”。允许重复输入成绩进行转换,直接输入回车时结束程序‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬。‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬

while True:
    score = input("请输入成绩:")
    if score=="":    #输入时直接回车会结束
        print("程序结束")
        break
    else:            #输入不是直接回车时,需要把输入的数字字符串转换成数值
        score=int(score)
        
    if 90<=score<=100:
        print("A")
    elif 80<=score<90:
        print("B")
    elif 70<=score<80:
        print("C")
    elif 60<=score<70:
        print("D")
    elif 0<=score<60:
        print("E")
    else:
        print("Data Error!")

第2题

2、编写程序,要求从键盘输入一个10以内的正整数n,计算并输出的结果。当输入的内容不符合要求时,提示用户重新输入,直到符合要求为止。

法1:单层循环

while True:
    n=int(input("请输入一个正整数n(0<n<10):"))
    if 0<n<10:
        break
    else:
        print("输入不符合要求,请重新输入")
sum=0
item=1   #item用于保存各项的阶乘,初始化时1!=1

for i in range(1,n+1):
    item*=i   #当前项的阶乘=前项的阶乘*i
    sum+=item    
    print("{}!={}".format(i,item))

print("前{}个正整数的阶乘之和={}".format(n,sum))

 

法2:两层循环

while True:
    n=int(input("请输入一个正整数n(0<n<10):"))
    if 0<n<10:
        break
    else:
        print("输入不符合要求,请重新输入")
sum=0
for i in range(1,n+1):         #外层循环求阶乘的和
    item=1
    for j in range(1,i+1):     #内层循环求阶乘
        item*=j
    sum+=item
    print("{}!={}".format(i,item))

print("前{}个正整数的阶乘之和={}".format(n,sum))  

第3题

3、在玩数7游戏中,要求凡是数到7、7的倍数、以及带7的正整数时一律(例如7、14、27都要跳过)不允许说出来,请按这种规则输出100以内允许说出来的那些正整数,要求每行最多输出10个。

法1:使用求余数(%)和求商运算(//)表达判断条件

num=0  #num用于控制每行输出的数字个数,num等于10的倍数就需要换行显示
for i in range (1,101):
    #下面语句中i%7==0表示能整除7的数,i%10==7表示个位是7的数,i//10==7表示十位是7的数    
    if i%7==0 or i%10==7 or i//10==7:  
        continue
    else:
        print(i,end=" ")
        num+=1
        if num%10==0:
            print()
print("满足要求的数字共有{}个".format(num))

 

法2:使用求余数(%)和字符串类型转换以及成员运算(in)表达判断条件

num=0  #num用于控制每行输出的数字个数,num等于10的倍数就需要换行显示
for i in range (1,101):
    #下面语句中i%7==0表示能整除7的数, "7" in str(i)判断字符"7"是否包含在数值i转换产生的字符串中   
    if i%7==0 or "7" in str(i):  
        continue
    else:
        print(i,end=" ")
        num+=1
        if num%10==0:
            print()
print("满足要求的数字共有{}个".format(num))

 

第4题

 4、打印如下图所示星号图形(两个分开实现):

     

法1:巧妙利用居中对齐进行显示 

#显示菱形,使用字符串的format方法进行居中
for i in range(0,4):
    print("{: ^7}".format("*"*(2*i+1)))
for i in range(0,3):
    print("{: ^7}".format("*"*(5-2*i)))

print()
#显示菱形,使用字符串的center方法进行居中,该方法的原型是:str.center(width[, fillchar])
for i in range(0,4):
    print(("*"*(2*i+1)).center(7," "))
for i in range(0,3):
    print(("*"*(5-2*i)).center(7," "))

 

#显示三角形,使用字符串的format方法进行居中
for i in range(1,9):
    if i==8:    #输出最后一行的多个星号
        print('*'*(2*i-1))
    elif i==1:  #居中输出第一行的1个星号
        print('{:^15}'.format('*'))
    else:        #居中输出中间行的多个星号
        print('{:^15}'.format('*'+' '*(2*i-3)+'*'))

 

法2:使用空格字符填充最左侧星号出现的左侧空白区域

#显示菱形
#先输出菱形的上4行:
for i in range(1,5):
    space_num=4-i   #发现上部的规律:每行左侧的空格数(space_num)=4减去每行的星数(star_num),
    star_num=2*i-1      #发现上部的规律:每行的星数(star_num)=循环控制变量i的值乘以2再减去1
    for j in range(1,space_num+1):
        print(' ',end='')
    for k in range(1,star_num+1):
        print('*',end='')
    print()
#再输出菱形的下3行:
for i in range(1,4):
    space_num=i  #发现下部的规律:每行左侧的空格数(space_num)=循环控制变量i的值减去1,
    star_num=7-i-space_num  #发现下部的规律:每行的星数(star_num)+每行左侧的空格数(space_num)+循环控制变量i的值=常数7   
    for j in range(1,space_num+1):
        print(' ',end='')
    for k in range(1,star_num+1):
        print('*',end='')
    print()

提示:菱形中每行左侧的空格、每行星号个数与行号的关系如下

上面4行的行号i每行左侧的空格数space_num每行的星号数star_numi与space_num的关系i与star_num的关系
131i+space_num=4star_num=2*i-1
223
315
407
下面3行的行号i每行左侧的空格数space_num每行的星号数star_numi与space_num的关系i与star_num的关系
115space_num=ii+space_num+star_num=7
223
331
for i in range(1,9):    
    left_space=8-i       #left_space表示每行最左边的星号左侧的空格数
    left_star=1          #left_star表示每行最左侧的星号个数
    #mid_num表示每行最左侧星号和最右侧星号之间的字符个数
    mid_num=(i-1)*2-1 if i>1 else 0   #注意:三目运算中表达式只能作为左值,右值不能出现赋值表达式
    #right_star表示每行最右侧的星号个数
    right_star=1 if i>1 else 0
    
    #mid_char表示每行最左侧星号和最右侧星号之间的字符种类,除第8行是星号填充外,其他行都是空格填充
    mid_char=' 'if i!=8 else '*'
    
    #每行由左侧空格、最左边星号、中间字符和最右边星号四部分构成
    line=" "*left_space+"*"*left_star+mid_char*mid_num+"*"*right_star    
    print(line)
   

提示:三角形中的每行可看成由左侧空格、最左边星号、中间字符和最右边星号四部分构成

每行的行号i每行最左侧的星号左边的空格数left_space每行最左侧的星号个数left_star每行最左侧星号和最右侧星号之间的字符个数mid_num每行最右侧的星号个数right_star
17100
26111
35131
44151
第i行8-i1(i-1)*2-11
801131

可见:
除了第1行的mid_num和right_star外,上述4个变量都具有统一的规律;
另外,除了第8行的最左侧星号和最右侧星号中间的字符是用星号填充外,其他行的中间字符都是空格;
这些例外情况都可以通过两分支的三目运算符来简洁的表达。

四、实验结果分析与体会

        通过本次流程控制结构实验,掌握了多分支语句 if…elif…else结构的用法,分支条件嵌套语句的使用,并了解了循环语句for、while结构的用法和跳转语句continue、break的应用,能应用print()函数和字符串的format方法控制输出字符图形。For循环用来遍历集合,通过不使用下标的方式来实现对集合中每一个元素的访问,此外,在while循环中,代码块的程序会一直执行,直到循环条件为0或False。但这里需要注意的是,若是循环条件一直为True,则程序无法跳出循环,称为死循环,必要时需要break跳出循环。使用continue语句,我们可以停止循环当前迭代,并继续下一个;使用break语句,即使while条件为真,我们也可以停止循环。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

丰富福利等你来拿!第七届世界智能大会·中国华录杯数据湖算法大赛开启招募!

由天津市委网信办、天津市工业和信息化局、天津市津南区人民政府主办&#xff0c;北京易华录信息技术股份有限公司、天津华易智诚科技发展有限公司承办的“第七届世界智能大会中国华录杯数据湖算法大赛”开启招募。 本次大赛紧紧围绕数据“收、存、治、用、易”为理念&#xf…

低码大前端 - 混合云集群部署 PagePlug

前情提要 老师之前布置了什么作业&#xff0c;完全忘了&#xff0c;本来觉得写作业可能也就一两个小时的事情&#xff0c;结果搞了半天&#xff0c;有一半的作业题目都没找到&#xff0c;mmp, 之前拖延症&#xff0c;搞到心态都炸了&#xff0c;今天不管怎么说都要搞定&#x…

Redis核心技术与实战【学习笔记】 - 9.如何避免单线程模型的阻塞

概述 Redis 被广泛应用的原因是因为它支持高性能访问。所以&#xff0c;我们要重视所有可能影响 Redis 性能的因素&#xff08;如命令操作、系统配置、关键机制、硬件配置等&#xff09;。 影响 Redis 性能的 5 大方面的潜在因素分别是&#xff1a; Redis 内部的阻塞式操作C…

测试大佬是怎么看待测试用例设计的

前言 最近干的最多的事情就是设计测试用例、评审测试用例了&#xff0c;于是我不禁又想到了一个经典的问题&#xff1a;如何设计出优秀的测试用例&#xff1f; 可能有些童鞋看到这个问题会有些不以为然&#xff0c;这有什么好想的&#xff1f;干个测试谁还不会设计测试用例&…

41、WEB攻防——通用漏洞XMLXXE无回显DTD实体伪协议代码审计

文章目录 XXE原理&探针&利用XXE读取文件XXE带外测试XXE实体引用XXE挖掘XXE修复 参考资料&#xff1a;CTF XXE XXE原理&探针&利用 XXE用到的重点知识是XML&#xff0c;XML被设计为传输和存储数据&#xff0c;XML文档结构包括XML声明、DTD文档类型定义&#xf…

XVC767AE102 3BHB007209R0102

XVC767AE102 3BHB007209R0102 XVC767AE102 3BHB007209R0102 GPS99808模块在汽车防盗系统中的应用 ... 详细介绍了 leadtek公司最新款oem模块gps9808在新型智能防盗系统中的 ... 定位模块、cpu控制模块、gps通信模块、传感器检测模块、声光报警模块、电源管理模块 ... 功能…

k8s之基础组件说明

前言 K8S&#xff0c;全称 Kubernetes&#xff0c;是一个用于管理容器的开源平台。它可以让用户更加方便地部署、扩展和管理容器化应用程序&#xff0c;并通过自动化的方式实现负载均衡、服务发现和自动弹性伸缩等功能。 具体来说&#xff0c;Kubernetes 可以将应用程序打包成…

sqli-labs-master靶场训练笔记(1-22|新手村)

2024.1.21 level-1 &#xff08;单引号装饰&#xff09; 先根据提示建立一个get请求 在尝试使用单个单引号测试&#xff0c;成功发现语句未闭合报错 然后反手一个 order by 得到数据库共3列&#xff0c;-- 后面加字母防止浏览器吃掉 -- 操作&#xff08;有些会&#xff09…

全链路压测的关键点是什么?

全链路压测是一种重要的性能测试方法&#xff0c;用于评估应用程序或系统在真实生产环境下的性能表现。通过模拟真实用户行为和流量&#xff0c;全链路压测能够全面评估系统在不同负载下的稳定性和性能表现。本文将介绍全链路压测的关键点&#xff0c;以帮助企业更好地理解和应…

IT行业证书大揭秘:哪些证书含金量最高?

文章目录 &#x1f4d6; 介绍 &#x1f4d6;&#x1f4d2; 证书 &#x1f4d2; &#x1f4d6; 介绍 &#x1f4d6; 在IT行业&#xff0c;有许多证书被认为是含金量高的&#xff0c;可以帮助个人在职业发展中取得重要的竞争优势。以下是一些IT行业中被认为含金量高的证书&#x…

Docker基础知识

1、什么是Docker&#xff1f;Docker解决了什么问题 一个项目中&#xff0c;部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等&#xff0c;这些服务部署时所需要的函数库、依赖项各不相同&#xff0c;甚至会有冲突。给部署带来了极大的困难。 所以引入了Docker Docker为了…

系统架构设计师-21年-下午答案

系统架构设计师-21年-下午答案 更多软考知识请访问 https://ruankao.blog.csdn.net/ 试题一必答&#xff0c;二、三、四、五题中任选两题作答 试题一 (25分) 说明 某公司拟开发一套机器学习应用开发平台&#xff0c;支持用户使用浏览器在线进行基于机器学习的智能应用开发…

ThreadX系列note-前言

什么是 Azure RTOS ThreadX Azure RTOS ThreadX 是 Microsoft 提供的高级工业级实时操作系统 (RTOS)。它是专门为深度嵌入式实时 IoT 应用程序设计的。 Azure RTOS ThreadX 的特性 Azure RTOS ThreadX 提供高级计划、通信、同步、计时器、内存管理和中断管理功能。此外&#…

【SpringBoot】SpringBoot的自动配置原理

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;SpringBoot ⛺️稳重求进&#xff0c;晒太阳 自动配置 啥叫自动配置呢&#xff1f;简单说就是springboot根据我们开发者的行为猜测你要做什么事情&#xff0c;然后把你要用的bean都给你准备…

tcpdump 抓包无法落盘

文章目录 问题背景解决办法 问题背景 在嵌入式设备中(Linux系统)&#xff0c;为了分析两个网络节点的通讯问题&#xff0c;往往需要用到tcpdump&#xff0c;抓一个.pcap的包在PC端进行分析。博主在实际操作中发现&#xff0c;抓包无法实时落盘。 解决办法 # 下面的命令是写在…

集线器、交换机、路由器工作原理区别

集线器、交换机、路由器这三种设备是相似的&#xff0c;但是他们处理数据的方式有所不同。 1 集线器 集线器的目的是将内部网络上所有网络设备连接在一起。它具有多个端口&#xff0c;可以接受来自网络设备的以太网连接。集线器不过滤任何数据、也不知道该将数据发到什么地方…

友思特应用 | 微观指尖世界:OCT成像应用之3D指纹提取与识别

欢迎访问官网&#xff0c;探索丰富案例&#xff1a; OCT成像系统 | 光学相干断层扫描 | 谱域OCT | 扫频OCT | 广州友思特科技有限公司 关注“友思特机器视觉与光电”公众号、加入行业交流群或直接联系我们&#xff0c;轻松收获更多技术干货 导读 数字化生活已离不开指纹识别认…

Python学习从0到1 day11 Python数据容器.2.元组

世界安静的时候&#xff0c;我只能听到自己的声音 —— 24.2.1 为什么需要元组&#xff1f; 元组同列表一样&#xff0c;都是可以封装多个&#xff0c;不同类型的元素在内&#xff0c;最大的不同点在于&#xff1a; 列表是可以修改的 元组一旦定义完成&#xff0c;就不可修改 所…

测试C#调用OpenCvSharp和IronOcr从摄像头中识别文字

学习了基于OpenCvSharp获取摄像头数据&#xff0c;同时学习了基于IronOcr的文字识别用法&#xff0c;将这两者结合即是从摄像头中识别文字。本文测试C#调用OpenCvSharp和IronOcr从摄像头中识别文字的基本用法、。   新版Winform项目&#xff0c;在Nuget包管理器中添加以下程序…

检测头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…