“Python 语言程序设计实验2023春季”实验报告

实验报告二 选择结构与循环结构 (3月17日23:00截止)

Python 语言程序设计实验2023春季

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

姓名:刘佰哲 班级:22-8 发布于:2023-03-12 23:37:00 得分:

一、实验学时: 2学时

二、实验目的

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

三、实验内容

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

2、水仙花数是指一个三位数,它的每个位上的数字的3次方之和就等于它本身,例如: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,21与22,1为同一组合,不应重复输出)。输出应如下所示。1+1,1+2,1+3,...

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

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

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

四、实验结果

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

a = int(input("请输入a:"))
b = int(input("请输入b:"))
c = int(input("请输入c:"))
if c > a and c > b:
    print(c)
elif b > a:
    print(b)
else:
    print(a)
copy

结果 图片描述

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

alist = []
x = int(input("请输入你要判断的三位数:"))
if x not in range(100, 1000):
    print("三位数啊大哥!")
if x in range(100, 1000):
    t = x
    while x > 0:
        y = x % 10
        alist.append(y)
        x = x//10
    #print(alist)
    if alist[0]**3 + alist[1]**3 + alist[2]**3 == t:
        print("YES")
    else:
        print("NO")
copy

结果 图片描述

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

x = 1
for i in range(10, 0, -1):
    print("第%d天有桃子%d个" % (i, x))
    x = 2 * (x + 1)
copy

结果

图片描述

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

print('富翁--》陌生人:')
sum1 = 0
for i in range(0, 30):
    sum1 = sum1 + 0.01 * 2**i
print(sum1, "元")
print("陌生人--》负翁:")
sum2 = 100000 * 30
print(sum2, "元")
copy

结果

图片描述

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

sum = 100.0
h1 = float(100)
h2 = float(100)
for i in range(0, 10):
    h1 = h1/2
    print("第%d次反弹%f" % (i+1, h1),"米")
for j in range(0, 9):
    h2 = h2/2
    sum = sum + 2 * h2
print("第十次落地时共经过%f" % (sum),"米")
copy

结果

图片描述

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

alist = []
a = int(input("请输入任意正整数:"))
while a != 1:
    if a % 2 == 1:
        a = a * 3 + 1
        alist.append(int(a))
    if a % 2 == 0:
        a = a / 2
        alist.append(int(a))
print(alist)
copy

结果

图片描述

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

for i in range(1, 7):
    for j in range(i, 7):
        print("%d+%d" % (i, j))
copy

结果

图片描述

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

alist = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
blist = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
s = str(input("请输入:(格式如2022-02-23)"))
l = s.split("-")
num = 0
sum = 0
year = int(l[0])
month = int(l[1])
day = int(l[2])
print(year, "年为")
flag = 0
if year % 4 != 0:
    print("平年")
elif year % 100 != 0:
    print("闰年")
    flag = 1
elif year % 400 != 0:
    print("平年")
else:
    print("闰年")
    flag = 1
if flag == 0:
   if month == 1:
       sum = day
   else:
       for i in range(1, month):
           num = num + alist[i]
       sum = num + day
if flag == 1:
   if month == 1:
       sum = day
   else:
       for i in range(1, month):
           num = num + blist[i]
       sum = num + day
print("该日为当年第%d天" % sum)
copy

结果

图片描述

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

money = 10000
for i in range(0, 5):
    money = money * (1 + 0.03)
print(money, "元")
copy

结果

图片描述

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

for i in range(1000, 3001):
    if i%2 == 0:
        print(i, end=",")
copy

结果

图片描述

图片描述

五、实验小结

问题与解决办法:

1.对python掌握不够熟练,部分语法多次发生错误。

2.对for 循环和 if 语句的使用不够熟悉,部分语句发生错误,通过阅读课本更改代码问题结决。

3.# 报错:SyntaxError: invalid syntax 检查过后发现忘记加英文冒号。

4.# 报错:IndexError: list index out of range检查后发现引用超过list最大索引。

5.#报错:TabError: inconsistent use of tabs and spaces in indentation 从网上查找资料发现Tab空格混用。

6.对平年与闰年的判断的算法不够了解,询问学长后熟悉了相关的算法,问题解决。

实验心得: 1.多码代码,多看书。

2.了解相关的算法知识。

3.如果实在码不出来,出去走走,换换思路。

4.对语言的掌握一定要熟练。

最新评论

本次实验解题逻辑清晰,内容丰富,格式整洁。

2023-03-28 17:49:24
回复