本篇文章给大家谈谈python程序设计实验报告实验步骤,以及python实验报告范文及模板,希望对各位有所帮助,不要忘了收藏本站喔。
Source code download: 本文相关源码
4.【Python0002】排列组合序列(写到实验报告中)
【题目描述】
用户输入整数 n(1<=n<=26)和整数 m(m<=n),然后输入 n 个不同的字母,请编写
程序输出在这 n 个字母中选择 m 个字母的所有排列序列和组合序列。
【练习要求】
请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释python的turtle画老虎。
【输入格式】
在第一行中输入整数 n 和整数 m 的值,数据之间以空格为间隔。
在第二行中输入 n 个不同字母,数据之间以空格为间隔
【输出格式】
首先输出所有的排列数列,每种情况一行,字母间以空格为间隔;
再者首先输出所有的组合数列,每种情况一行,在同一行中以字母增序顺序显示,字母
间以空格为间隔。
【输入样例】
3 2
a s d
【输出样例】
Permutation:
a d
d a
a s
s a
d s
s d
Combination:
a d
a s
d s
分析
看输出样例,感觉输出的规则是先把字符串排序好,然后combinations全组合,即ad as ds,然后permutation就是将这三个的顺序进行改变,没有用到permutations函数(一开始我也是用了那个函数,但是输出序列不知道怎么实现变成案例里面的顺序)
代码参考
import itertools
n, m = map(int, input().split()) # 这样可以实现一行里面输入两个数字
s = input().split(' ') # 将输入的字符串拆开
s.sort()
print('Permutation')
# 可以知道i是一个元组类型的数据
for i in itertools.combinations(s, 2):
print(' '.join(i))
print(i[1], end=' ')
print(i[0])
print('Combination')
for i in itertools.combinations(s, 2):
print(' '.join(i))
5.【Python0003】蒙特·卡罗法计算圆周率(写到实验报告中)
【题目描述】
蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,
其中就包括圆周率近似值的计问题。假设有一块边长为 2 的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x,y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以 4,这个数字会无限逼近圆周率的值。这就是蒙特·卡罗发明的用于计算圆周率近似值的方法,如下图所示。编写程序,模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。
【练习要求】
请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】
在一行中输入掷飞镖的次数。
【输出格式】
输出采用蒙特·卡罗法模拟计算出的圆周率的值。
【输入样例】
100000
【输出样例】
3.13056
分析
一开始我考虑的一整个圆圈,但是其实只考虑四分之一即可,因为这4部分都是相同的,这样子随机函数也比较好调用,直接使用random()即可,生成[0,1)之间的随机数
代码参考
import random
n = int(input())
num = 0
for i in range(n):
x = random.random()
y = random.random()
if pow(x * x + y * y, 0.5) < 1:
num += 1
print(num*4/n)
6. 【Python0004】验证 6174 猜想(写到实验报告中)
【题目描述】
1955 年,卡普耶卡(D.R.Kaprekar)对 4 位数字进行了研究,发现一个规律:对任意各位数字不相同的 4 位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到 6174 这个数字,并且这个操作最多不会超过 7 次。请编写程序验证这个猜想。
【练习要求】
请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】
在一行中输入一个任意各位数字不相同的 4 位数。
【输出格式】
验证 6174 猜想,输出过程中计算得到的各数,数据间以空格为间隔。
【输入样例】
2694
【输出样例】
2694 7173 6354 3087 8352 6174
分析
可以使用递归,注意join的使用,还有转list列表的使用。
代码参考
n = input()
print(n, end=' ')
n = list(n)
mmax, mmin = 0, 0
while (mmax - mmin) != 6174:
mmin = int(''.join(sorted(n)))
mmax = int(''.join(sorted(n, reverse=True)))
print(mmax - mmin, end=' ')
n = list(str(mmax - mmin)) # 要先转为字符串,才能转list,不能直接数字转list
7.【Python0005】模拟页面调度 LRU 算法(写到实验报告中)
【题目描述】
所谓 LRU 算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。
问题描述:一进程获得 n 个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU 算法时,输出发生的缺页次数。
【练习要求】
请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】
在第一行中输入进程获得使用权的主存块数量 n。
在第二行中输入进程访问页面的次序,各数据之间以空格为间隔。
【输出格式】
输出对于给定的 n 和进程访问页面的次序,输出采用 LRU 算法时的缺页次数。
【输入样例】
3
1 2 3 4 1 2 5 1 2 3 4 5
【输出样例】
7
分析
理解什么是页面调度LRU算法
https://www.cnblogs.com/linxiyue/p/10926944.html
参考代码
"""关键在于理解什么是页面调度LRU"""
my_list = []
n = int(input())
count = 0
process = input().split(' ')
my_list.append(process[0])
my_list.append(process[1])
my_list.append(process[2]) # my_list['1', '2', '3']
for i in range(3, len(process)):
if my_list[0] != process[i]:
count += 1
my_list.pop(0)
my_list.append(process[i])
print(count)
8.【Python0006】爬楼梯(写到实验报告中)
【题目描述】
假设一段楼梯共 n(n>1)个台阶,小朋友一步最多能上 3 个台阶,那么小朋友上这段楼梯一共有多少种方法。
【练习要求】
请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】
在一行中输入楼梯台阶的数目 n。
【输出格式】
输出小朋友上这段楼梯的方法数。
【输入样例】
15
【输出样例】
5768
分析
假如在第10阶,他只有4种可能性:
1.7阶+3步
2.8阶+2步
3.9阶+1步
-->f(10)=f(7)+f(8)+f(9)
f(1)=1(走1阶1种情况:1)
f(2)=2(走2阶2种情况:1+1,2)
****f(3)=4(走3阶4种情况:1+1+1,1+2,2+1,3)
参考代码
"""
假如在第10阶,他只有4种可能性:
1.7阶+3步
2.8阶+2步
3.9阶+1步
-->f(10)=f(7)+f(8)+f(9)
f(1)=1(走1阶1种情况:1)
f(2)=2(走2阶2种情况:1+1,2)
****f(3)=4(走3阶4种情况:1+1+1,1+2,2+1,3)
"""
def f(n):
my_dict = {1:1, 2:2, 3:4}
if 3 >= n >= 1:
return my_dict[n]
else:
return f(n - 1) + f(n - 2) + f(n - 3)
num = int(input())
print(f(num))
9.【Python0007】杨辉三角形(写到实验报告中)
【题目描述】
输出 n(0<n)行杨辉三角形,n 由用户输入。
【练习要求】
请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】
一行中输入 1 个整数 n。
【输出格式】
输出 n 行杨辉三角形,每个数的显示格式:占 5 位,右对齐。
【输入样例】
3
【输出样例】
1 1
1 2 1
1 3 3 1
分析
规律:每一行前后都是1
第i行中间有i个(i+1),i是从0开始的。
如:第0行中间有0个1,第1行中间有1个2,第2行中间有2个3
参考代码
"""
规律:每一行前后都是1
第i行中间有i个(i+1),i是从0开始的。
如:第0行中间有0个1,第1行中间有1个2,第2行中间有2个3
"""
n = int(input())
for i in range(0, n):
print("%5.d" % 1, end='')
for j in range(0, i):
print("%5.d" % (i + 1), end='')
print("%5.d" % 1, end='')
print()
10.【Python0008】筛法求素数(写到实验报告中)
【题目描述】
用户输入整数 n 和 m(1<n<m<1000),应用筛法求[n,m]范围内的所有素数。
【练习要求】
请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】
在一行中输入整数 n 和 m,数据间以空格为间隔。
【输出格式】
按照一行 5 个的格式输出[n,m]范围内的所有素数,其中每个素数的显示格式为:占 5位,右对齐。
【输入样例】
50 100
【输出样例】
53 59 61 67 71
73 79 83 89 97
分析
代码参考
def IsS(num):
for i in range(2, int(pow(num, 0.5)) + 1):
if num % i == 0:
return False
return True
n, m = map(int, input().split())
num = 0 # 用于判断是否该换行了
for i in range(n, m + 1):
if IsS(i):
num += 1
if num % 5 != 0:
print("%5.d" % i, end='')
else:
print("%5.d" % i)
11.【Python0009】查找鞍点(写到实验报告中)
【题目描述】
对于给定 5X5 的整数矩阵,设计算法查找出所有的鞍点的信息(包括鞍点的值和行、
列坐标,坐标从 1 开始)。
提示:鞍点的特点:列上最小,行上最大。
【练习要求】
请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】
输入 5 行 5 列整数,同行数据间以空格为间隔。
【输出格式】
在一行中以以下格式输出矩阵中的所有鞍点,每个鞍点的显示格式为:
[<鞍点的行坐标>,<鞍点的列坐标>,<鞍点的值>]
【输入样例】
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 8
15 10 11 20 25
【输出样例】
[4,1,8][4,5,8]
分析
问题是这么处理行和列最大值和最小值多个的问题,一开始这里我是直接用max找行最大值,但是如果一行中有多个最大值的话,这个输出结果肯定是错的
代码参考
"""规定是五行五列的矩阵"""
row = [] # 行
low = [] # 列
for i in range(0, 5):
a = list(map(int, input().split(' ')))
row.append(a) # 这里是按照一行一行录入到row,列表里面存5个列表(5行)
for i in range(0, 5):
b = []
for j in range(0, 5):
b.append(row[j][i])
low.append(b) # 这里是按照一列录入到low中,列表里面存的是5个列表(5列)
for i in range(0, 5):
# 问题是这么处理行和列最大值和最小值多个的问题,一开始这里我是直接用max找行最大值,但是如果一行中有多个最大值的话,这个输出结果肯定是错的
for j in range(0, 5):
if row[i][j] == max(row[i]): # 如果行: 5 1 2 3 4 5,这样子写,两个5都会被遍历到
if row[i][j] == min(low[j]):
print("[%d,%d,%d]" % (i+1, j+1, row[i][j]), end='')
12.【Python0010】正整数的因子展开式
【题目描述】
编写程序,输出一个给定正整数 x(x>1)的质因子展开式。
【输入格式】
请在一行中输入整数 x 的值。
【输出格式】
对每一组输入的 x,按以下格式输出 x 的质因子展开式(假如 x 的质因子分别为 a、b、
c):x=abc
【输入样例 1】
72
【输出样例 1】
72=22233
分析
代码参考
n = int(input())
num = n
my_list = []
i = 2
while i <= n:
if n % i == 0:
n = n / i
my_list.append(i)
else:
i += 1
print("%d=%d" % (num, my_list[0]), end='')
for i in range(1, len(my_list)):
print("*%d" % my_list[i], end='')
13.【Python0011】牛顿迭代法(写到实验报告中)
【题目描述】
编写程序,使用牛顿迭代法求方程 ax3 + bx2 + cx + d = 0 在 x 附近的一个实根。
【练习要求】
请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。
【输入格式】
请在一行中输入方程系数 a、b、c、d 和实数 x,数据中间以空格为间隔。
【输出格式】
对每一组输入的数据,输出牛顿迭代法求出的实根(格式为保留小数点后 2 位,四舍五入)。
【输入样例】
1.0 2.0 3.0 4.0 1.0
【输出样例】
-1.65
分析
这题我对牛顿迭代法不是很懂…输出的next,还有条件f(x)-f(next)。
代码参考
"""
牛顿迭代法的公式:
xn+1 = xn - f(xn)/f`(xn)
**终止条件:f(xn) - f(xn+1)足够小,参考范围:1e-6
"""
def f(xx):
return n[0] * pow(xx, 3) + n[1] * pow(xx, 2) + n[2] * xx + n[3]
def fd(xx):
return 3 * n[0] * pow(xx, 2) + 2 * n[1] * pow(xx, 1) + n[2]
a, b, c, d, x = map(float, input().split(' '))
n = [a, b, c, d]
next = x - f(x) / fd(x)
while f(x) - f(next) > 1e-6:
x = next
next = x - f(x) / fd(x)
print("%5.2f" % next)