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的各位转换成整数
setA = eval(input("请输入一个集合:"))
setB = eval(input("请输入一个集合:"))
print("交集:", setA | setB)
print("并集:", setA & setB)
print("setA-setB:", setA - setB)
num = int(input("请输入一个自然数:"))
print("二进制:",bin(num))
print("十进制:",oct(num))
print("十六进制:",hex(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*y<=1:
hit=hit+1
print(4.0*hit/times) #如果 x*x+y*y<=1 则说明生成的随机数(投掷的飞镖)落在了圆中。
#即投掷飞镖的点距离圆心的距离小于1
小明爬楼梯
实验目的:
1、理解并熟练使用序列解包。
2、理解递归函数工作原理。
3、能够编写递归函数代码解决实际问题。
4、理解 Python 字典的用法。
实验内容:
假设一段楼梯共 15 个台阶,小明一步最多能上 3 个台阶。编写程序计算小明上这段楼梯一共有多少种方法。要求给出递推法和递归法两种代码。
# author : "王佳伟"
# date : 2019-06-26
# File : 7.py
# IDE:PyCharm '''
递推法:
从第15个台阶上往回看,有3种方法可以上来(从第14个台阶上一步迈1个台阶上来,
从第13个台阶上一步迈2个台阶上来,从第12个台阶上一步迈3个台阶上来),
同理,第14个、13个、12个台阶都可以这样推算,从而得到公式f(n) = f(n-1) + f(n-2) + f(n-3),
其中n=15、14、13、...、5、4。
然后就是确定这个递归公式的结束条件了,
第一个台阶只有1种上法,第二个台阶有2种上法(一步迈2个台阶上去、一步迈1个台阶分两步上去),
第三个台阶有4种上法。
'''
def climbStairs1(n):
# 递推法
a = 1 # 上一个台阶只有一种方法
b = 2 # 上两个台阶有两种方法
c = 4 # 上三个台阶有四种方法
for i in range(n - 3):
c, b, a = a + b + c, c, b
return c def climbStairs2(n):
# 递归法
first3 = {1:1,2:2,3:4}
if n in first3.keys():
return first3[n]
else:
return climbStairs2(n-1)+climbStairs2(n-2)+climbStairs2(n-3) print(climbStairs1(15))
print(climbStairs2(15))
蒙蒂霍尔悖论游戏
实验目的:
1、了解蒙蒂霍尔悖论内容。
2、了解游戏规则。
3、熟练运用字典方法和集合运算。
4、了解断言语句 assert 的用法。
5、熟练运用循环结构。
实验内容:
假设你正参加一个有奖游戏节目,并且有 3 道门可选:其中一个后面是汽车,另外两个后面是山羊。你选择一个门,比如说 1 号门,主持人当然知道每个门后面是什么并且打开了另一个门,比如说 3 号门,后面是一只山羊。这时,主持人会问你"你想改选 2 号门吗?",然后根据你的选择确定最终要打开的门,并确定你获得山羊(输)或者汽车(赢)。
编写程序,模拟上面的游戏。
# author : "王佳伟"
# date : 2019-06-26
# File : 9.py
# IDE:PyCharm from random import randrange def init():
'''
初始化三个门以及后面门的物品
:return: 返回三个门后对应的物品
'''
result = {i: 'goat' for i in range(3)} # {0:goat,1:goat,2:goat}
r = randrange(3) # 随机生成0~2之间的一个整数
result[r] = 'car' # 将随机索引位置的goat改为car
return result # 初始化门完成,返回门的集合 def StartGame():
'''
开始游戏
:return: 返回游戏结果
'''
doors = init() # 初始化门
# 获取玩家选择的门号
while True:
try:
firstDoorNum = int(input("Choose a door to open:"))
# assert —— Python的断言就是检测一个条件,如果条件为真,它什么都不做;反之它触发一个带可选错误信息的AssertionError
assert 0<= firstDoorNum <=2
break
except:
print("Door number must be between {} and {} :".format(0,2))
# 主持人查看另外两个门后边的物品情况
# 从所有的门(三个门—— 0,1,2)的索引中删除玩家选中的们的所引
for door in doors.keys() - {firstDoorNum}:
# 打开其中一个门后为羊的门
if doors[door] == 'goat':
print("goat behind the door",door)
# 获取第三个门号,让玩家纠结
# S.pop() 随机返回集合S中的一个元素,如果S为空,产生异常
thirDoor = (doors.keys()-{door,firstDoorNum}).pop()
change = input("Switch to {} y/n:".format(thirDoor))
# 如果change='y'则finalDoorNum = thirDoor,否则finalDoorNum = firstDoorNum
finalDoorNum = thirDoor if change=='y' else firstDoorNum
if doors[finalDoorNum] == 'goat':
return "I Win !"
else:
return "You Win !" while True:
print("="*30)
print(StartGame())
r = input("Do you want to try once more (y/n) :")
if r == n:
break
猜数游戏
实验目的:
1、熟练运用选择结构与循环结构解决实际问题。
2、注意选择结构嵌套时代码的缩进与对齐。
3、理解带 else 子句的循环结构执行流程。
4、理解条件表达式 value1 if condition else value2 的用法。
5、理解使用异常处理结构约束用户输入的用法。
6、理解带 else 子句的异常处理结构的执行流程。
实验内容:
编写程序模拟猜数游戏。程序运行时,系统生成一个随机数,然后提示用户进行猜测并根据用户输入进行必要的提示(猜对了、太大了、太小了),如果猜对则提前结束程序,如果次数用完仍没有猜对,提示游戏结束并给出正确答案。
# author : "王佳伟"
# date : 2019-06-26
# File : 10.py
# IDE:PyCharm from random import randint def guessNumber(maxValue=10,maxTimes=3):
'''
猜数字
:param maxValue:随机生成最大的数字
:param maxTimes:猜数字的次数
:return:null
'''
# 随机生成一个整数 —— 1到 maxValue
value = randint(1,maxValue)
for i in range(maxTimes):
# 如果i=1则输出Start to GUESS:提示,否则输出GUESS again:提示。
prompt = 'Start to GUESS:' if i==0 else 'GUESS again:'
# 使用异常处理结构,防止输入的不是数字。
try:
x = int(input(prompt)) # 获取到玩家输入的值
except:
print("Must input an interger between 1 and",maxValue)
else:
if x == value:
# 猜对了
print("Congratulations!")
break
elif x>value:
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 <= x < n, "要按套路来啊,再给你一次机会哈!"
break
except:
# 如果输入的不是数字,就执行这里的代码
print("你要按套路来啊!再给你一次机会!")
if positions[x] == 1:
print("成功!我抓到狐狸了!")
break
else:
print("今天没有抓到狐狸。") # 如果这次没抓到,则狐狸就会跳到隔壁的洞口
# 分三种情况:如果在最左边,则只能往右边洞口跳
# 如果在最右边,则只能往左边洞口跳
# 如果在中间三个洞头则随机向左右两边洞口跳
if oldPos == n-1: # 在最右边
newPos = oldPos -1
elif oldPos ==0: # 在最左边
newPos = oldPos + 1
else:
newPos = oldPos + choice((-1,1))
positions[oldPos],positions[newPos] = 0,1
oldPos = newPos
else:
print("十天了!放弃吧!你这样瞎鸡巴抓是没有希望的!") # 启动游戏
catchMe()
凯撒加密
实验目的:
1、了解 Python 标准库 string。
2、理解凯撒加密算法原理。
3、理解切片操作。
4、熟练运用字符串对象的方法。
实验内容:
编写程序,要求输入一个字符串,然后输入一个整数作为凯撒加密算法的密钥,然后输出该字符串加密后的结果。
# author : "王佳伟"
# date : 2019-06-26
# File : 1.py
# IDE:PyCharm import string def kaisa(s, k):
lower = string.ascii_lowercase
upper = string.ascii_uppercase
before = string.ascii_letters
after = lower[k:] + lower[:k] + upper[k:] + upper[:k]
table = ''.maketrans(before, after)
return s.translate(table) s = input("请输入一个字符串:")
k = int(input("请输入一个整数密钥:"))
print(kaisa(s, k)) #ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
#ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
#ascii_letters = ascii_lowercase + ascii_uppercase
使用列表实现筛选法求素数
实验目的:
1、理解筛选法求解素数的原理。
2、理解列表切片操作。
3、熟练运用内置函数 enumerate()。
4、熟练运用内置函数 filer()。
5、理解序列解包工作原理。
6、初步了解选择结构和循环结构。
实验内容:
编写程序,输入一个大于 2 的自然数,然后输出小于该数字的所有素数组成的列表。
# author : "王佳伟"
# date : 2019-06-28
# File : 4.py
# IDE:PyCharm maxNumber = int(input("请输入一个大于2的自然数:"))
lst = list(range(2,maxNumber))
# 最大的整数平方根
m = int(maxNumber**0.5)
for index,value in enumerate(lst):
# 如果当前数字已经大于做大整数平方根,结束判断
if value > 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')
Python实验案例的更多相关文章
- ArcGIS Python编程案例-电子资料链接
ArcGIS Python编程案例(1)-Python语言基础 https://www.jianshu.com/p/dd90816d019b ArcGIS Python编程案例(2)-使用ArcPy编 ...
- python 实验环境
python 实验环境的搭建 刚开始在windows环境下尝试过komodo ,eclispse pydev,swing,spyder甚至limodou的编辑器,之后ipython,安装很多科学计算包 ...
- Java 实验案例(多态)
实验任务 任务一:图形面积周长计算小程序 任务二:饲养员喂养动物程序 实验内容: 任务一: 图形面积周长计算 任务目的: 掌握多态的含义及应用场合 掌握上转型对象和多态的实现 掌握abstract关键 ...
- Python入门(案例)
Python入门(案例) #一.上课案例: #输出hello wordprint('hello word') #python注释有两种#1.单行注释#这是单行注释#2.多行注释'''这是多行注释''' ...
- Python 小案例实战 —— 简易银行存取款查询系统
Python 小案例实战 -- 简易银行存取款查询系统 涉及知识点 包的调用 字典.列表的混合运用 列表元素索引.追加 基本的循环与分支结构 源码 import sys import time ban ...
- Oracle 0至6级锁的通俗解释及实验案例_ITPUB博客 http://blog.itpub.net/30126024/viewspace-2156232/
Oracle 0至6级锁的通俗解释及实验案例_ITPUB博客 http://blog.itpub.net/30126024/viewspace-2156232/
- python项目案例
python项目案例1:----此学习案例用python3编写,摘自明日科技,感谢! 学生管理系统: 功能描述:具有增删改查,排序,保存并显示学生的全部信息. 1.主界面---函数menu(),显示功 ...
- 【菜鸟学Python】案例一:汇率换算
汇率换算V1.0 案例描述: 设计一个汇率换算器程序,其功能是将外币换算成人民币,或者相反 案例分析: 分析问题:分析问题的计算部分: 确定问题:将问题划分为输入.处理及输出部分: 设计算法:计算部分 ...
- Frenetic Python实验(三)
实验5 repeater 这个实验在HelloSDNWorld里面做的实验是一样的.HelloSDNWorld 目的:模拟一个有多个端口的中继器. This application implement ...
随机推荐
- 使用ajax向后台发送数据
第一种最原始的方式就是手动拼接json数组: var name="text"; $.ajax({ url:"". data:{'name':name} succ ...
- 题解 洛谷 P4145 【上帝造题的七分钟2 / 花神游历各国】
题目 上帝造题的七分钟2 / 花神游历各国 题目背景 XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. 题目描述 "第一分钟,X说,要有数列,于是便给定了一个正整数数列. ...
- [BJOI2012]连连看
Description Luogu4134 Solution \(l,r \le 1000\),暴力枚举是否能匹配.这是一个选匹配的问题,所以直接网络流,原图不一定是二分图咋办?拆点啊!然后直接做就行 ...
- centost redhat 卸载rpm以及yum install 的正确姿势
先看yum install 的卸载: 第一列为我们要的包名: 那么要移除必须使用 yum list |grep collectd | awk '{print $1}' |xargs yum r ...
- MFC对话框常用操作文章收藏
1.改变控件文本 参考链接:https://blog.csdn.net/active2489595970/article/details/88856235 所有控件的文本都可以用这种方式动态改变. 2 ...
- Electron – 项目报错整理(打包~1): WARNING: Make sure that .NET Framework 4.5 or later and Powershell 3 or later are installed, otherwise extracting the Electron zip file will hang.
WARNING: Make sure that .NET Framework 4.5 or later and Powershell 3 or later are installed, otherwi ...
- Ubuntu16.04配置
一.将源更换为国内的源,这样下载和更新软件的速度会快很多.将/etc/apt/sources.list文件的内容更换为如下: #默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消 ...
- 最大/最小de K个数/第K个数
题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 思路 堆排序 收获 用优先队列实现最大最小堆 注意下列代码中优先队列 ...
- jumpserver 常见错误解决
官方链接:https://jumpserver.readthedocs.io/zh/master/faq_install.html 重启jumpserver后台 #cd /opt#python3.6 ...
- fdssd
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #in ...