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()