Python实验案例 | 您所在的位置:网站首页 › 集合的表示有几种方法 › Python实验案例 |
Python 运算符、内置函数
实验目的: 1、熟练运用 Python 运算符。 2、熟练运用 Python 内置函数。实验内容: 1、编写程序,输入任意大的自然数,输出各位数字之和。 2、编写程序,输入两个集合 setA 和 setB,分别输出它们的交集、并集和差集 setA-setB。 3、编写程序,输入一个自然数,输出它的二进制、八进制、十六进制表示形式。 num = input("请输入一个自然数:") print(sum(map(int, num))) # sum() 表示求和 # map(int,num) 表示将num的各位转换成整数使用蒙特 · 卡罗方法计算圆周率近似值 实验目的: 1、理解蒙特·卡罗方法原理。 2、理解 for 循环本质与工作原理。 3、了解 random 模块中常用函数。实验内容: 蒙特·卡罗方法是一种通过概率来得到问题近似解的方法,在很多领域都有重要的应用,其中就包括圆周率近似值的计算问题。假设有一块边长为 2 的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x, y)必然在木板上(更多的时候是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以 4,这个数字会无限逼近圆周率的值。这就是蒙特·卡罗发明的用于计算圆周率近似值的方法,如图所示。 编写程序,模拟蒙特·卡罗计算圆周率近似值的方法,输入掷飞镖次数,然后输出圆周率近似值。 # author : "王佳伟" # date : 2019-06-26 # File : 3.py # IDE:PyCharm from random import random times = int(input("请输入您投掷飞镖的次数:")) hit = 0 for i in range(times): x = random() y = random() if x*x+y*yvalue: print("Too big") else: print("Too litter") else: # else 与 for连用,表示for循环结束后运行else # 次数用完还没有猜对,游戏结束,给出提示。 print("Game over , FAIL.") print("The number is ", value) guessNumber() 抓狐狸游戏 实验目的: 1、培养分析问题并对进行建模的能力。 2、熟练使用列表解决实际问题。 3、熟练运用选择结构和循环结构解决实际问题。 4、理解带 else 子句的循环结构执行流程。 5、理解使用异常处理结构约束用户输入的用法。实验内容: 编写程序,模拟抓狐狸小游戏。假设一共有一排 5 个洞口,小狐狸最开始的时候在其中一个洞口,然后玩家随机打开一个洞口,如果里面有狐狸就抓到了。如果洞口里没有狐狸就第二天再来抓,但是第二天狐狸会在玩家来抓之前跳到隔壁洞口里。 # author : "王佳伟" # date : 2019-06-26 # File : 11.py # IDE:PyCharm from random import choice, randrange def catchMe(n=5, maxStep=10): ''' 抓狐狸游戏 :param n: 洞口的个数,默认为5 :param maxStep: 最大抓取次数,默认允许抓10次 :return: null ''' # 共有n个洞口,设有狐狸的为1,没有的为0 positions = [0] * n # 狐狸的随机初始位置 oldPos = randrange(0, n) positions[oldPos] = 1 # 抓maxStep次 while maxStep >= 0: maxStep -= 1 # 这个循环是为了保证用户输入是否是有效的洞口 while True: try: x = input("今天打算打开哪个洞口?(0-{0}):".format(n - 1)) # 如果输入的不是数字,会跳转到except部分 x = int(x) # 如果输入的洞口有效,结束这个循环,否则继续输入 assert 0 m: break #对改位置之后的元素进行过滤 lst[index+1:] = filter(lambda x:x%value!=0,lst[index+1:]) print(lst) # enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。 # filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。汉诺塔问题 实验目的: 1、理解函数默认值参数。 2、理解函数递归。 3、熟练运行列表对象的方法。实验内容: 据说古代有一个梵塔,塔内有三个底座 A、B、C,A 座上有 64 个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这 64 个盘子从 A 座移到 C 座,但每次只能允许移动一个盘子。在移动盘子的过程中可以利用 B 座,但任何时刻 3 个座上的盘子都必须始终保持大盘在下、小盘在上的顺序。如果只有一个盘子,则不需要利用 B 座,直接将盘子从 A 移动到 C 即可。编写函数,接收一个表示盘子数量的参数和分别表示源、目标、临时底座的参数,然后输出详细移动步骤和每次移动后三个底座上的盘子分布情况。 # author : "王佳伟" # date : 2019-06-28 # File : 12.py # IDE:PyCharm def haonoi(num, src, dst, temp=None): # 递归算法 if num < 1: return global times # 声明用来记录移动次数的变量为全局变量 # 递归调用函数自身,先把除最后一个盘子以外的所有盘子移动到临时柱子上 haonoi(num - 1, src, temp, dst) # 移动最有一个盘子 print("the {0} times move:{1} - -> {2}".format(times, src, dst)) towers[dst].append(towers[src].pop()) for tower in "ABC": # 输出三根柱子上的盘子 print(tower, ":", towers[tower]) times += 1 # 把除最后一个盘子之外的其他盘子从临时柱子上移动到目标柱子上 haonoi(num - 1, temp, dst, src) times = 1 # 用来记录移动次数 n = 3 # 盘子数量 towers = {'A': list(range(n, 0, -1)), # 初始状态,所有盘子都在A柱上 'B': [], 'C': [] } # A表示最初防止盘子的柱子,C表示目标柱子,B是临时柱子 haonoi(n, 'A', 'C', 'B')
|
CopyRight 2018-2019 实验室设备网 版权所有 |