2024年4月15号
(一)、练习安装Python解释器
【实验截图】
点击Customiz installation继续,修改完路径一路继续即可。
如图已经安装完python解释器
打开cmd,输入python 输入print(“hello word”),如图可以显示。
(二)、练习搭建Python+Eclipse+pydev编程环境
【实验截图】
我选择使用Vscode
(三)、练习安装Python扩展库
【实验截图】
- 打开cmd,输入pip install 对应的扩展库名称,就会自动下载,如图
下图为下载完成。
(四)、【Python0002】排列组合序列
【题目描述】
用户输入整数n(1<=n<=26)和整数m(m<=n),然后输入n个不同的字母,请编写程序输出在这n个字母中选择m个字母的所有排列序列和组合序列。
【源代码程序】
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))
【运行测试】
(五)、【Python0003】蒙特·卡罗法计算圆周率
【题目描述】
蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计问题。假设有一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x,y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以4,这个数字会无限逼近圆周率的值。这就是蒙特·卡罗发明的用于计算圆周率近似值的方法。编写程序,模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。
【源代码程序】
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)
【运行测试】
(六)、【Python0004】验证6174猜想
【题目描述】
1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律:对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且这个操作最多不会超过7次。请编写程序验证这个猜想。
【源代码程序】
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))
【运行测试】
(七)、【Python0005】模拟页面调度LRU算法
【题目描述】
所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面。
问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用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])
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)
【运行测试】
(八)、【Python0006】爬楼梯
【题目描述】
假设一段楼梯共n(n>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))
【运行测试】
(九)、【Python0007】杨辉三角形
【题目描述】
输出n(0<n)行杨辉三角形,n由用户输入。
【源代码程序】
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()
【运行测试】
(十)、【Python0008】筛法求素数
【题目描述】
用户输入整数n和m(1<n<m<1000),应用筛法求[n,m]范围内的所有素数。
【源代码程序】
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)
【运行测试】
(十一)、【Python0009】查找鞍点
【题目描述】
对于给定5X5的整数矩阵,设计算法查找出所有的鞍点的信息(包括鞍点的值和行、列坐标,坐标从1开始)。
提示:鞍点的特点:列上最小,行上最大。
【源代码程序】
row = []
low = []
for i in range(0, 5):
a = list(map(int, input().split(' ')))
row.append(a)
for i in range(0, 5):
b = []
for j in range(0, 5):
b.append(row[j][i])
low.append(b)
for i in range(0, 5):
for j in range(0, 5):
if row[i][j] == max(row[i]):
if row[i][j] == min(low[j]):
print("[%d,%d,%d]" % (i+1, j+1, row[i][j]), end='')
【运行测试】
(十二)、【Python0010】正整数的因子展开式
【题目描述】
编写程序,输出一个给定正整数x(x>1)的质因子展开式。
【源代码程序】
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='')
【运行测试】
(十三)、【Python0011】牛顿迭代法
【题目描述】
编写程序,使用牛顿迭代法求方程在x附近的一个实根。
【源代码程序】
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)
【运行测试】
四 实验分析及问题思考
【Python0012】针对Python中的列表、元组、字典、集合、字符串,请以条目形式从各方面对比它们之间的异同。
【答案】
定义方式:
列表:使用方括号 [] 定义,元素之间用逗号分隔。
元组:使用圆括号 () 定义,元素之间用逗号分隔。
字典:使用大括号 {} 定义,键值对之间用冒号分隔,键值对之间用逗号分隔。
集合:使用大括号 {} 定义,元素之间用逗号分隔。
字符串:使用单引号、双引号或三引号定义字符串。
可变性:
列表:可变,可以通过索引来修改、添加、删除元素。
元组:不可变,元组一旦创建,其元素不可更改。
字典:可变,可以通过键来修改、添加、删除键值对。
集合:可变,可以通过方法来添加、删除元素。
字符串:不可变,字符串一旦创建,其内容不可更改。
有序性:
列表:有序,可以通过索引访问元素。
元组:有序,可以通过索引访问元素。
字典:无序,键值对之间没有固定顺序。
集合:无序,元素之间没有固定顺序。
字符串:有序,可以通过索引访问字符。
可重复性:
列表:允许重复元素。
元组:允许重复元素。
字典:不允许重复的键,但允许重复的值。
集合:不允许重复元素。
字符串:允许重复字符。
索引方式:
列表、元组、字符串:支持通过索引访问元素,索引从0开始。
字典、集合:不支持通过索引访问元素,需要通过键来访问值。
总结:列表、元组、字典、集合和字符串在定义方式、可变性、有序性、可重复性和索引方式等方面有所不同,根据具体的需求和场景选择合适的数据类型来存储和操作数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下