PYTHON第三次实验

编程入门 行业动态 更新时间:2024-10-19 03:27:26

<a href=https://www.elefans.com/category/jswz/34/1770869.html style=PYTHON第三次实验"/>

PYTHON第三次实验

PYTHON第三次实验

实验3.1 设计和实现尼姆游戏(人机对战)

一、实验目的
  • 理解尼姆游戏规则
  • 了解多个函数的定义与调用
  • 理解并熟练运行while循环
  • 理解带else子句的循环结构执行流程
  • 理解循环语句的break语句的作用
  • 了解使用循环和异常处理结构对用户输入进行约束的用法
  • 养成时刻注意各级代码缩进级别的习惯
二、实验内容

​ 尼姆游戏是一个著名的游戏,有很多变种玩法。两个玩家轮流从一堆物品中拿走一部分。在每一步中,玩家可以自由选择拿走多少物品,但是必须至少拿走一个并且最多只能拿走一半物品,然后轮到下一个玩家。拿走最后一个物品的玩家输掉游戏。

​ 在聪明模式中,计算机每次拿走一定数量的物品使得堆的大小是2的幂次方减1—也就是2,7,15,31,63等。如果有一定数量的剩余物品,计算就随机拿走一些。

​ 编写程序,模拟聪明版及非聪明版的尼姆游戏。并进行两种的比较及分析。给出聪明版比非聪明版的胜算结论。

三、实验步骤
(1)需要知道的函数以及用法

计算对数函数:math库中的log2(), log()函数等

python中的while else 语句的详细用法:

(45条消息) python中while。。。。else的用法_慕云-CSDN博客_python中while和else

以及try except语句的用法:

(45条消息) Python之异常(try的用法)_蓝七star的博客-CSDN博客_python try

assert断言函数的使用:

(45条消息) Python assert 断言函数_hunyxv的博客-CSDN博客_assert函数python

(2)代码设计思路

首先是先选择游戏模式,1为普通模式,2为聪明模式

普通模式和聪明模式的过程差不多,只是在电脑取数时会有不同

普通模式下,电脑随机选择处于[1, n//2]之间的数

def computer_getnormal(n):a = random.randint(1, int(n / 2))return a

聪明模式下,电脑尽可能选择能使剩下的数为2的幂次减1的数,也就是尽可能地使剩下的数为2,7,15,31,63等

def getnum(n):a = int(math.log2(n))target = pow(2, a) - 1get = n - targetreturn get
def computer_getsmart(n):a=getnum(n)if a>int(n/2):a=random.randint(1,int(n/2))return a
(3)总代码
import math
import randomdef getnum(n):a = int(math.log2(n))target = pow(2, a) - 1get = n - targetreturn getdef computer_getsmart(n):a=getnum(n)if a>int(n/2):a=random.randint(1,int(n/2))return adef computer_getnormal(n):a = random.randint(1, int(n / 2))return adef compusmart():n = random.randint(1, 100)while n>1:print('现在有{}个物品'.format(n))#from herewhile True:try:person=int(input("请你输入你要拿走的物件个数:"))assert 1<=person<=n//2breakexcept:print("请输入1到{}的数".format(n//2))#till heren = n - personif n==1:print('你赢啦!')breakelse:computernum=computer_getsmart(n)print('电脑取走{}个物品'.format(computernum))n=n-computernumprint('现在还有{}个物品'.format(n))else:print('你输啦!')def compunormal():n = random.randint(1, 100)while n>1:print('现在有{}个物品'.format(n))# from herewhile True:try:person = int(input("请你输入你要拿走的物件个数:"))assert 1 <= person <= n // 2breakexcept:print("请输入1到{}的数".format(n // 2))# till heren = n - personif n==1:print('你赢啦!')breakelse:computernum=computer_getnormal(n)print('电脑取走{}个物品'.format(computernum))n=n-computernumprint('现在还有{}个物品'.format(n))else:print('你输啦!')choice = int(input('1是普通模式,2是聪明模式,请选择游戏模式:'))
if choice == 1:print('-------------------普通模式---------------------')compunormal()
else:print('-------------------聪明模式---------------------')compusmart()

实验3.2 计算小明爬楼梯的爬法数量

一、 实验目的
  • 理解并熟练使用序列解包
  • 理解递归函数的工作原理
  • 能够编写递归函数代码解决实际问题
  • 理解Python字典的用法
  • 养成检查和测试循环结构边界条件的习惯
  • 养成时刻注意各级代码缩进级别的习惯
二、 实验内容

假设15个台阶,小明一步最多能上3个台阶。编写程序计算小明上这段楼梯一共有多少种方法。要求给出递推法和递归法两种实现代码。

F(n) = F(n-1) + F(n-2) + F(n-3)

F(1) = 1

F(2) = 2

F(3) = 4

三、实验步骤

递推:数学上的概念,主要指递推式、递推数列或递推函数。一个数列的下一项由它前面几项的一种运算(或函数)构成,如 a [ n ] = a [ n − 1 ] + a [ n − 2 ] a[n]=a[n-1]+a[n-2]a[n]=a[n−1]+a[n−2]。
递归:计算机中的概念,主要指计算机上的递归函数,(计算机中的‘函数’不同于数学上的‘函数’,这里指一段代码),即指会调用自己的函数。

def ditui(n):a,b,c=1,2,4#预先设置好前三个台阶的走法for i in range(n-3):temp1,temp2,temp3=a,b,ca=temp2b=temp3c=temp1+temp2+temp3return cdef digui(n):if n==1:return 1elif n==2:return 2elif n==3:return 4else:return digui(n-1)+digui(n-2)+digui(n-3)n=int(input('请输入一个数:'))
result1=ditui(n)
result2=digui(n)print('递推的结果为:{}'.format(result1))
print('递归的结果为:{}'.format(result2))

更多推荐

PYTHON第三次实验

本文发布于:2024-03-05 13:48:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1712455.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:PYTHON

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!