实验二 选择结构与循环结构

实验二 选择结构与循环结构

一、实验学时: 2学时

二、实验目的

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

三、实验内容

1、编写程序。如图所示的算法,请用Python程序写出实现该算法相应的代码。 图片描述

2、水仙花数是指一个三位数,它的每个位上的数字的33次方之和就等于它本身,例如:1^{3} + 5^{3} + 3^{3} = 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程序写出实现该算法相应的代码。 图片描述

代码块:

#程序名:test2.1
#功 能:实现选择结构
#作 者:xx
#日 期:2023.3.12
#思 路:利用多个if-else语句即可

a = int(input("Enter the number of a: "))
b = int(input("Enter the number of b: "))
c = int(input("Enter the number of c: "))

if c < a and c > b:
    print(c);
else:
    if b > a:
        print(b)
    else:
        print(a)

运行结果截图:

在这里插入图片描述

2、水仙花数是指一个三位数,它的每个位上的数字的3次方之和就等于它本身,例如:1^{3} + 5^{3} + 3^{3} = 153。这类三位数也被叫做自恋数、自幂数或者阿姆斯特朗数。现通过键盘输入一个数,判断这个数是否是水仙花数,如果是水仙花数,输出YES,否则输出NO。

代码块:

#程序名:test2.2
#功 能:实现判断是否为水仙花数
#作 者:xx
#日 期:2023.3.12
#思 路:利用多个while语句将数的每一位提炼出来即可

num = int(input("请输入数字:"))

x = num
tem = 0
i = 0

while x:
    i = x % 10
    tem += i * i * i
    x //= 10

if tem == num:
    print("YES")
else:
    print("NO")

运行结果截图:

在这里插入图片描述

3、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半再多加一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

代码块:

#程序名:test2.3
#功 能:实现猴子吃桃问题
#作 者:xx
#日 期:2023.3.12
#思 路:利用多个if-else语句即可

tao = 1
i = 0

while i < 9:
    tao = (tao + 1) * 2
    i += 1

print(f"总的桃数为{tao}")

运行结果截图:

在这里插入图片描述

4、一个富翁试图与陌生人做一笔换钱生意,换钱规则为:陌生人每天给富翁10万元钱,直到满一个月(30天);而富翁第一天给陌生人1分钱,第2天给2分钱,第3天给4分钱,…,富翁每天给穷人的钱是前一天的两倍,直到满一个月,分别显示富翁给陌生人的钱和陌生人给富翁的钱各是多少?

代码块:

#程序名:test2.4
#功 能:实现选择结构
#作 者:xx
#日 期:2023.3.12
#思 路:利用for进行计算即可

sum1 = 0
sum2 = 0

i = 10
j = 0.01

for x in range(30):
    sum1 += i;
    sum2 += j 
    j = j * 2

print(f"富翁获得{sum1}万元")
print(f"陌生人获得{sum2}元")

运行结果截图:

在这里插入图片描述

5、一小球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

代码块:

#程序名:test2.5
#功 能:实现判断第十次反弹的高度
#作 者:xx
#日 期:2023.3.12
#思 路:利用while语句即可

i= 0
h = 100
high = 0

while i < 10:
    high += h
    h /= 2
    i += 1

print(f"总共经过{high}m")
print(f"第十次反弹{h}m高")

运行结果截图:

在这里插入图片描述

6、编写程序打印考拉兹序列,输入任意一个正整数,如果为奇数则将其乘3加1,如果为偶数则将其除以2,输出结果值并再次对结果值执行上述操作,如此循环直到结果值为1时结束。

代码块:

#程序名:test2.6
#功 能:实现选择结构
#作 者:xx
#日 期:2023.3.12
#思 路:利用多个if-else语句即可

x = int(input("请输入数字:"))

while x != 1:
    if x % 2 ==1:
        x = x * 3 +1
        print(x)
    else:
        x /= 2
        print(x)

运行结果截图:

在这里插入图片描述

7、编写一个程序输出同时掷出两个骰子所有可能地结果组合(例如1,21,2与2,12,1为同一组合,不应重复输出)。输出应如下所示。1+1, 1+2, 1+3, …

代码块:

#程序名:test2.7
#功 能:实现选择结构
#作 者:xx
#日 期:2023.3.12
#思 路:利用多个if-else语句即可

for i in range(1,7):
    j = i + 1
    for j in range(i,7):
        print(f"{i} + {j}")

运行结果截图:

在这里插入图片描述

8、输入一个日期,计算这一天是当年的第几天(日期输入格式:2023-03-02)

代码块:

#程序名:test2.8
#功 能:实现判断第多少天
#作 者:xx
#日 期:2023.3.12
#思 路:判断闰年,然后相加天数即可

data = [31,28,31,30,31,30,31,31,30,31,30,31]

time = input("Please enter the time xxxx-xx-xx")
time1 = time.split('-')
year = int(time1[0])
mouth = int(time1[1])
day = int(time1[2])

if year % 400 == 0 or (year % 4 == 0 and year % 100 == 0): #判断是否为闰年
    data[1] = 29

sum = 0

for i in range(12):             #相加天数
    if i + 1 < mouth:
        sum += data[i]
    else:
        sum += day
        break

print(f"这是{year}中的第{sum}天!")
        

运行结果截图:

在这里插入图片描述

9、本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。

代码块:

#程序名:test2.9
#功 能:实现判断总钱数
#作 者:xx
#日 期:2023.3.12
#思 路:利用for循环语句即可

total = 10000

for i in range(5):
    total += total * 0.003

print(f"最后总钱数为{total}!!")

运行结果截图:

在这里插入图片描述

10、编写一个程序,它将找到 1000 到 3000之间的所有这些数字(均包括在内),这样数字的每个数字都是偶数。获得的数字应以逗号分隔的顺序打印在一行上。

代码块:

#程序名:test2.10
#功 能:实现输出1000-3000,每个数字位为偶数的数字
#作 者:xx
#日 期:2023.3.12
#思 路:利用多个双重for循环判断每个数字位是否为偶数即可

list = []

for i in range(1000, 3001):
    flag = True
    for digit in str(i):            #将其转换为str类型
        if int(digit) % 2 != 0:     #如果不是偶数推出当前循环
            flag = False
            break
    if flag == True:                #如果符合要求即输出
        list.append(i)

for i in list:
    print(i,end = ',')

运行结果截图:

在这里插入图片描述

五、实验小结

(包括问题和解决办法、心得体会、意见与建议等)

问题和解决方法:

  1. 问题1:在编写循环时老出现死循环的问题。
    解决方法:在循环内部加以个判断条件,让它及时退出循环即可,改正后,程序也可以正常运行。
  2. 问题2:不知如何将字符串分隔开。
    解决方法:上网查询后,利用split()函数,可以将其分隔开,更正后,程序正常运行。
  3. 问题3:在利用双重for循环时,退出第二重循环的变量的条件不知道在哪里添加。
    解决方法:询问同学后,在第二层循环内部添加条件,程序正常运行。

心得体会:

  1. 在编写循环时一定要注意循环条件,否则会出现死循环现象。
  2. 在利用continue和break时,continue是退出当前循环,进行下一次循环,而break是退出循环。
    小结

(包括问题和解决办法、心得体会、意见与建议等)

问题和解决方法:

  1. 问题1:在编写循环时老出现死循环的问题。
    解决方法:在循环内部加以个判断条件,让它及时退出循环即可,改正后,程序也可以正常运行。
  2. 问题2:不知如何将字符串分隔开。
    解决方法:上网查询后,利用split()函数,可以将其分隔开,更正后,程序正常运行。
  3. 问题3:在利用双重for循环时,退出第二重循环的变量的条件不知道在哪里添加。
    解决方法:询问同学后,在第二层循环内部添加条件,程序正常运行。

心得体会:

  1. 在编写循环时一定要注意循环条件,否则会出现死循环现象。
  2. 在利用continue和break时,continue是退出当前循环,进行下一次循环,而break是退出循环。
  3. if-else和while和for循环可以嵌套使用,列表输出是可以更换分隔符。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值