Python 语言程序设计实验2023春季”实验报告二 选择结构与循环结构

本文详细描述了Python实验中的选择结构与循环结构,涉及水仙花数判断、猴子吃桃问题、金融换钱问题、小球运动模拟、考拉兹序列生成、骰子组合输出、日期计算以及本金增值等案例,通过实际编程展示了相关语法的应用及解决常见问题的方法。
摘要由CSDN通过智能技术生成

#实验报告二 选择结构与循环结构

##一、实验学时: 2学时

##二、实验目的

  1. 熟练掌握 Python 选择结构与循环结构语法,理解缩进的作用。
  2. 熟练运用 for 循环和 while 循环,理解带有 else 子句的循环语句执行流程。
  3. 理解 break 语句和 continue 语句在循环中的作用。
  4. 理解并能够熟练设计条件表达式。

##三、实验内容

  1. 编写程序。如图所示的算法,请用Python程序写出实现该算法相应的代码。
    图片描述
  2. 水仙花数是指一个三位数,它的每个位上的数字的3次方之和就等于它本身,例如:13 +53 +33=153。这类三位数也被叫做自恋数、自幂数或者阿姆斯特朗数。现通过键盘输入一个数,判断这个数是否是水仙花数,如果是水仙花数,输出YES,否则输出NO。
  3. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半再多加一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
  4. 一个富翁试图与陌生人做一笔换钱生意,换钱规则为:陌生人每天给富翁
    10万元钱,直到满一个月(30天);而富翁第一天给陌生人1分钱,第2天给2分钱,第3天给4分钱,…,富翁每天给穷人的钱是前一天的两倍,直到满一个月,分别显示富翁给陌生人的钱和陌生人给富翁的钱各是多少?
  5. 一小球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
  6. 编写程序打印考拉兹序列,输入任意一个正整数,如果为奇数则将其乘3加
    1,如果为偶数则将其除以2,输出结果值并再次对结果值执行上述操作,如此循环直到结果值为1时结束。
  7. 编写一个程序输出同时掷出两个骰子所有可能地结果组合(例如1,2与
    2,1为同一组合,不应重复输出)。输出应如下所示。
    1+1,1+2,1+3,…
  8. 输入一个日期,计算这一天是当年的第几天(日期输入格式:2023-03-02)
  9. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。
  10. 编写一个程序,它将找到 1000 到 3000 之间的所有这些数字(均包括在内),这样数字的每个数字都是偶数。获得的数字应以逗号分隔的顺序打印在一行上。

##四、实验结果

  1. 编写程序。如图所示的算法,请用Python程序写出实现该算法相应的代码。
    图片描述
#程序名:1.cpp
#功 能:输出三个数中的最大值
#作 者:**************
#学 号:**************
#日 期:2022.03.13
#思 路:input()输入三个数a,b,c,然后用if elif else语句判断出最大值并输出
a,b,c=map(int,input("请输入三个数").split())#输入三个数
print("这三者中最大的数为:",end='')
if a>=b and a>=c:#判断并输出最大值
    print(a)
elif b>=a and b>=c:
    print(b)
elif c>=b and c>=a:
    print(c)

运行截图:
图片描述

  1. 水仙花数是指一个三位数,它的每个位上的数字的3次方之和就等于它本身,例如:13 +53 +33=153。这类三位数也被叫做自恋数、自幂数或者阿姆斯特朗数。现通过键盘输入一个数,判断这个数是否是水仙花数,如果是水仙花数,输出YES,否则输出NO。
#程序名:2.cpp
#功 能:判断一个三位数是否是水仙花数
#作 者:**************
#学 号:**************
#日 期:2022.03.13
#思 路:输入一个三位数,然后取出百位,十位,个位上的数作为a,b,c,最后判断
#    a**3+b**3+c**3是否等于输入的
x=input("判断一个三维数是否是水仙花数,请输入一个三位数:")
a,b,c=map(int,x)#取出百位,十位,个位
if a**3+b**3+c**3==int(x):#判断是否是水仙花数
    print('YES')
else :
    print('NO')

运行截图:

图片描述

  1. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半再多加一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
#程序名:3.cpp
#功 能:求出猴子吃桃问题中第一天猴子摘了多少个桃子
#作 者:**************
#学 号:**************
#日 期:2022.03.13
#思 路:for循环求出第一天的桃子数,然后输出
x=1
for i in range(9):#计算第一天猴子摘的桃子数
    x=(x+1)*2
print('第一天共摘了{}个桃子'.format(x))

运行截图:

图片描述

  1. 一个富翁试图与陌生人做一笔换钱生意,换钱规则为:陌生人每天给富翁10万元钱,直到满一个月(30天);而富翁第一天给陌生人1分钱,第2天给2分钱,第3天给4分钱,…,富翁每天给穷人的钱是前一天的两倍,直到满一个月,分别显示富翁给陌生人的钱和陌生人给富翁的钱各是多少?
#程序名:4.cpp
#功 能:求出富翁给陌生人的钱和陌生人给富翁的钱
#作 者:**************
#学 号:**************
#日 期:2022.03.13
#思 路:for语句模拟出一个月中每天要相互给的钱,分别求和后输出
x=y=0
u=0.01
for i in range(30):#模拟整个过程
    x+=100000
    y += u
    u = u * 2
print('陌生人给富翁的钱为:',x,'\n','富翁给陌生人钱为:',y,sep='')

运行截图:

图片描述

  1. 一小球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#程序名:5.cpp
#功 能:求出小球共经过的路程和第十次反弹的高度
#作 者:**************
#学 号:**************
#日 期:2022.03.13
#思 路:for语句模拟出小球的运动,用x记下总路程,用s记下每次反弹后可弹到的高度
s=x=100
for i in range(1,11):
    x+=s#移动路程求和
    s=s/2#能够反弹的高度是上一次的一半
print('共经过{0}米,第10次反弹{1}'.format(x,s))

运行截图:

图片描述

  1. 编写程序打印考拉兹序列,输入任意一个正整数,如果为奇数则将其乘3加1,如果为偶数则将其除以2,输出结果值并再次对结果值执行上述操作,如此循环直到结果值为1时结束。
#程序名:6.cpp
#功 能:打印考拉兹序列
#作 者:**************
#学 号:**************
#日 期:2022.03.13
#思 路:输入任意一个正整数如果为奇数则将其乘3加
#1,如果为偶数则将其除以2,循环直到为1为止
x=int(input('请输入一个正整数:'))
while True:#模拟考拉兹序列
    if x%2==0:
        x/=2
    else :
        x=x*3+1
    if x==1:
        break
    print(x)
print(x)

运行截图:

图片描述

  1. 编写一个程序输出同时掷出两个骰子所有可能地结果组合(例如1,2与2,1为同一组合,不应重复输出)。输出应如下所示。
    1+1,1+2,1+3,…
#程序名:7.cpp
#功 能:输出同时掷出两个骰子所有可能地结果组合
#作 者:**************
#学 号:**************
#日 期:2022.03.13
#思 路:for语句嵌套结合format语句实现输出同时掷出两个骰子所有可能地结果组合
for i in range(1,7):#模拟整个过程
    for j in range(i,7):
        print('{0}+{1}'.format(i,j))

运行截图:

图片描述

  1. 输入一个日期,计算这一天是当年的第几天(日期输入格式:2023-03-02)
#程序名:8.cpp
#功 能:输入一个日期计算,这一天是当年的第几天
#作 者:**************
#学 号:**************
#日 期:2022.03.13
#思 路:输入一个日期,取出年月日,判断是否是闰年,如果是闰年将二月改为29,计算这一天是当年的第几天
print('请输入一个日期:')
x,y,z=map(int,input().split('-'))#取出年月日
def demo(year,month,day):
    day_month=[31,28,31,30,31,30,31,31,30,31,30,31]
    if year%400==0 or (year%4==0 and year%100!=0):#判断是否是闰年
        day_month[1]=29#是闰年则将二月改为29天
    if month==1:
        return day
    else:
        return sum(day_month[:month-1])+day
print('这一天是当年的第{}天'.format(demo(x,y,z)))

运行截图:

图片描述

  1. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。
#程序名:9.cpp
#功 能:本金10000元存入银行,年利率是千分之三,计算5年后,获得的本金是多少
#作 者:**************
#学 号:**************
#日 期:2022.03.13
#思 路:for语句模拟每年的本金
for i in range(1,6):
    money = 10000*((1+0.003)**i)
#模拟整个过程
print('五年后本金为:',money)

运行截图:

图片描述

  1. 编写一个程序,它将找到 1000 到 3000 之间的所有这些数字(均包括在内),这样数字的每个数字都是偶数。获得的数字应以逗号分隔的顺序打印在一行上。
#程序名:10.cpp
#功 能:输出1000到3000之间的偶数
#作 者:**************
#学 号:**************
#日 期:2022.03.13
#思 路:利用列表表达式得到满足条件的列表,再将列表解包输出。
print(*[i for i in range(1000,3001) if i%2==0],sep=',')#输出1000到3000之间的偶数

运行截图:

图片描述

##五、实验小结
###问题与解决办法:

  1. 问题:编译出错,提示:SyntaxError: invalid syntax。

解决办法:判断语句的嵌套不能使用else if只能使用elif。

  1. 问题:不知道如何将获得的数字应以逗号分隔的顺序打印在一行上。

解决办法:可以对列表进行解包操作。

  1. 问题:对map()函数作用掌握不到位。

解决办法:查找资料后得知,map将传入的函数依次作用到序列的每一个元素。

  1. 问题:不理解 break 语句和 continue 语句在循环中的作用。

解决办法:查阅相关书籍解决了问题。

###心得体会:

  1. 多翻阅Python书籍有利于对语法的进一步掌握。

  2. 我们应当养成自主学习的习惯,提高自己搜索信息的能力,利用好网络带给我们的便利。

  3. 有自己难以解决的问题,要积极向老师同学请教。

  4. Python学习需要不仅需要扎实的语法基础,还需要充足的实践。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值