【附实验报告格式】
Pyhton环境与基础训练
班级:信2205-1 学号:20224074 姓名:王晨宇
一实验目的
l 使学生熟悉Python环境的安装与配置,熟悉Python解释器的使用。
l 使学生掌握Python控制语句、函数结构等的基本语法知识和使用。
l 使学生掌握Python的基本数据类型、列表、元组、字典和集合等的基本应用。
二实验环境及实验准备
l 所需软件环境为Pyhton 3.x等;
l 掌握Python控制语句和函数结构等基本语法知识;
l 掌握Python的输入输出;
l 掌握Python的基本数据类型、列表、元组、字典和集合等;
三实验内容
(一)、练习安装Python解释器
【实验截图】
(二)、练习搭建Python+Eclipse+pydev编程环境
【实验截图】
<你的安装练习过程截图>
(三)、练习安装Python扩展库
>
(四)、【Python0002】排列组合序列
【题目描述】
用户输入整数n(1<=n<=26)和整数m(m<=n),然后输入n个不同的字母,请编写程序输出在这n个字母中选择m个字母的所有排列序列和组合序列。
【源代码程序】
import itertools
# 输入整数n和整数m
n, m = map(int, input().split())
# 输入n个不同字母
letters = input().split()
# 输出所有排列序列
permutations = itertools.permutations(letters, m)
for perm in permutations:
print(' '.join(perm))
# 输出所有组合序列
combinations = itertools.combinations(letters, m)
for comb in combinations:
print(' '.join(sorted(comb)))
【运行测试】
(五)、【Python0003】蒙特·卡罗法计算圆周率
【题目描述】
蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题。假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x,y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以4,这个数字会无限逼近圆周率的值。这就是蒙特·卡罗发明的用于计算圆周率近似值的方法。编写程序,模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。
【源代码程序】
【运行测试】
(六)、【Python0004】验证6174猜想
【题目描述】
1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律:对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且这个操作最多不会超过7次。请编写程序验证这个猜想。
【源代码程序】
def kaprekar_iteration(num):
num_str = str(num)
while len(num_str) < 4:
num_str = '0' + num_str
count = 0
result_list = [num_str]
while num_str != '6174' and count < 7:
asc_num = int(''.join(sorted(num_str)))
desc_num = int(''.join(sorted(num_str, reverse=True)))
diff = desc_num - asc_num
num_str = str(diff)
while len(num_str) < 4:
num_str = '0' + num_str
result_list.append(num_str)
count += 1
return result_list
def verify_kaprekar_conjecture(input_num):
if len(set(input_num)) != 4:
return "Input number must have exactly 4 different digits."
result = kaprekar_iteration(int(input_num))
return ' '.join(result)
# 读取输入
input_num = input().strip()
# 执行验证
output_result = verify_kaprekar_conjecture(input_num)
print(output_result)
【运行测试】
(七)、【Python0005】模拟页面调度LRU算法
【题目描述】
所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。
问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输出发生的缺页次数。
【源代码程序】
from collections import deque
def lru(page_sequence, n):
cache = deque(maxlen=n)
page_faults = 0
for page in page_sequence:
if page not in cache:
page_faults += 1
if len(cache) == n:
cache.popleft()
cache.append(page)
else:
cache.remove(page)
cache.append(page)
return page_faults
# 读取输入
n = int(input())
page_sequence = list(map(int, input().split()))
# 计算缺页次数
page_faults = lru(page_sequence, n)
# 输出结果
print(page_faults)
【运行测试】
(八)、【Python0006】爬楼梯
【题目描述】
假设一段楼梯共n(n>1)个台阶,小朋友一步最多能上3个台阶,那么小朋友上这段楼梯一共有多少种方法。
【源代码程序】
def count_ways(n):
if n == 1:
return 1
elif n == 2:
return 2
elif n == 3:
return 4
else:
# 初始化台阶数为1、2、3时的方法数
a, b, c = 1, 2, 4
ways = 0
for _ in range(4, n + 1):
ways = a + b + c
a, b, c = b, c, ways
return ways
# 读取输入
n = int(input())
# 计算小朋友上n个台阶的方法数
ways = count_ways(n)
# 输出结果
print(ways)
【运行测试】
(九)、【Python0007】杨辉三角形
【题目描述】
输出n(0<n)行杨辉三角形,n由用户输入。
【源代码程序】
def generate_pascal_triangle(n):
triangle = []
for i in range(n):
row = [1] * (i + 1)
if i > 1:
for j in range(1, i):
row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j]
triangle.append(row)
return triangle
def print_pascal_triangle(triangle):
for row in triangle:
for num in row:
print(f"{num:5}", end="")
print()
# 读取输入
n = int(input())
# 生成n行杨辉三角形
pascal_triangle = generate_pascal_triangle(n)
# 输出结果
print_pascal_triangle(pascal_triangle)
【运行测试】
(十)、【Python0008】筛法求素数
【题目描述】
用户输入整数n和m(1<n<m<1000),应用筛法求[n,m]范围内的所有素数。
【源代码程序】
def sieve_of_eratosthenes(n, m):
# 初始化标记数组,True表示素数,False表示非素数
is_prime = [True] * (m + 1)
is_prime[0] = is_prime[1] = False
# 使用筛法找出素数
for i in range(2, int(m ** 0.5) + 1):
if is_prime[i]:
for j in range(i * i, m + 1, i):
is_prime[j] = False
# 输出范围[n, m]内的所有素数
primes = [i for i in range(n, m + 1) if is_prime[i]]
return primes
# 读取输入
n, m = map(int, input().split())
# 应用筛法求解范围[n, m]内的所有素数
result = sieve_of_eratosthenes(n, m)
# 输出结果
for prime in result:
print(prime, end=" ")
【运行测试】
(十一)、【Python0009】查找鞍点
【题目描述】
对于给定5X5的整数矩阵,设计算法查找出所有的鞍点的信息(包括鞍点的值和行、列坐标,坐标从1开始)。
提示:鞍点的特点:列上最小,行上最大。
【源代码程序】
def find_saddle_points(matrix):
saddle_points = []
for i in range(5):
for j in range(5):
# 检查是否为鞍点
if matrix[i][j] == max(matrix[i]) and matrix[i][j] == min(matrix[row][j] for row in range(5)):
saddle_points.append([i+1, j+1, matrix[i][j]]) # 添加鞍点的行坐标、列坐标和值到列表中
return saddle_points
# 读取输入矩阵
matrix = []
for _ in range(5):
row = list(map(int, input().split()))
matrix.append(row)
# 查找鞍点
result = find_saddle_points(matrix)
# 格式化输出结果
output = "[" + "][".join([f"{point[0]},{point[1]},{point[2]}" for point in result]) + "]"
print(output)
【运行测试】
>
(十二)、【Python0010】正整数的因子展开式
【题目描述】
编写程序,输出一个给定正整数x(x>1)的质因子展开式。
【源代码程序】
def prime_factors(n):
factors = []
i = 2
while i * i <= n:
if n % i:
i += 1
else:
n //= i
factors.append(str(i))
if n > 1:
factors.append(str(n))
return factors
# 读取输入的整数x
x = int(input())
# 计算x的质因子
factors = prime_factors(x)
# 格式化输出质因子展开式
output = f"{x}=" + "*".join(factors)
print(output)
【运行测试】
(十三)、【Python0011】牛顿迭代法
【题目描述】
编写程序,使用牛顿迭代法求方程在x附近的一个实根。
【源代码程序】
def f(x, a, b, c, d):
return a*x**3 + b*x**2 + c*x + d
def f_prime(x, a, b, c):
return 3*a*x**2 + 2*b*x + c
def newton_method(a, b, c, d, x0, tolerance=1e-6, max_iterations=1000):
x = x0
for _ in range(max_iterations):
fx = f(x, a, b, c, d)
if abs(fx) < tolerance:
return round(x, 2)
fpx = f_prime(x, a, b, c)
if fpx == 0:
break
x = x - fx / fpx
return None
# 读取输入的方程系数和实数x
a, b, c, d, x0 = map(float, input().split())
# 使用牛顿迭代法求解实根
root = newton_method(a, b, c, d, x0)
# 输出实根
print(root)
【运行测试】
四实验分析及问题思考
【Python0012】针对Python中的列表、元组、字典、集合、字符串,请以条目形式从各方面对比它们之间的异同。
【答案】
- 列表(List):有序的可变序列,可存储任意类型的元素,支持索引访问和修改,提供丰富的操作方法。
- 元组(Tuple):有序的不可变序列,可存储任意类型的元素,用于存储不可变的数据集合。
- 字典(Dictionary):无序的键值对集合,键必须是不可变类型,值可以是任意类型,提供丰富的操作方法。
- 集合(Set):无序且不重复的元素集合,可用于集合运算和去重。
- 字符串(String):不可变的字符序列,提供丰富的字符串操作方法和格式化操作
Pyhton环境与基础训练
班级: 信2205-1学号:20224074 姓名:王晨宇
实验自评
实验内容 |
自评结果(在对应格内打ü) |
|||
不熟练 |
一般 |
比较熟练 |
熟练 |
|
Pyhton环境安装与配置 |
|
|
|
ü |
Pyhton扩展库的安装 |
|
|
|
ü |
Python基本控制结构的应用 |
|
|
|
ü |
Python序列的基本应用 |
|
|
|
ü |
Python函数的应用 |
|
|
|
ü |
实验体会
总的来说,学习和实验这些Python的应用,让我更深入地理解了它们的特点和用途,也提升了我对Python编程的熟练度。我会根据实际需求灵活选择合适的数据类型来处理数据,以提高编程效率和代码质量。
标签:return,Python,num,str,5.15,input,page From: https://www.cnblogs.com/wcy1111/p/18232263