Python学习笔记之汉诺塔游戏


aihuafeng66t
克里斯蒂亚诺诺 2024-01-10 16:03:47 51511 赞同 0 反对 0
分类: 资源
Python学习笔记之汉诺塔游戏

一、系列缘由

  作为一名运维工程师,也一直有一个学习开发的想法,值此之际,不知道博客的下一期目标在哪里,在这思考和犹豫的间隙想着学习和充实一下自己,学习一下python语言,python随着大数据和人工智能的兴起而日益火爆。边学习边实践的原则学习python,希望自己更上一层楼。我的目标是创建一个自己的网站——太阳站点(sun-site.com),一个自娱自乐的自由空间。

二、学习笔记

1、函数的定义和规则

  函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数,函数规则如下:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号 : 起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。

def 函数名(参数列表):
  函数体

2、函数参数

  • 必需参数
    必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样,你必须传入一个参数,不然会出现语法错误:

def printme( str ):

  • 关键字参数
    关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

printme(str=“hello”)

  • 默认参数
    调用函数时,如果没有传递参数,则会使用默认参数。以下实例中如果没有传入 age 参数,则使用默认值:

def printinfo( name, age = 35 ):

  • 不定长参数
    你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。基本语法如下:

def functionname([formal_args,] *var_args_tuple ):

  • 关键字参数的**运算
    加了两个星号 ** 的参数会以字典的形式导入。

def printinfo( arg1, **vardict ):
调用的时候需要使用关键字参数形式
printinfo(1, a=2,b=3)

3、递归函数

函数调用是指函数定义完成后,在函数外可以被别的语句执行。在特殊情况下我们在定义中的语句执行函数本身,这就是递归函数。递归函数我们需要指定结束递归的判定条件。

4、匿名函数

python 使用 lambda 来创建匿名函数。所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

lambda 函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,…argn]]:expression

三、实践练习

1、游戏代码

(base) [root@s186 python]# cat hnt.py 
#!/root/anaconda3/bin/python
# This is a python program.
'''
这是一个汉诺塔游戏,一共有三根金刚石柱子
A柱子上有N个黄金圆盘,需要全部移动到C柱子
小盘只能放到大盘上面,一次只能移动一个圆盘
'''
count=0

def move(n,a,b,c):
        global count
        if (n == 1):
                print(a,"柱->最上层圆盘移动到->",c,"柱")
                count+=1
                return
        move(n-1,a,c,b) #把n-1个圆盘从a移动到b
        move(1,a,b,c)   #把最后一个圆盘从a移动c
        move(n-1,b,a,c) #把n-1个圆盘从b移动到c

x=int(input('您想玩几层汉诺塔?请如下对应数字:'))
move(x,'a','b','c')
print("一共需要执行",count,"步才可以移动完成!")
 

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
克里斯蒂亚诺诺L1
粉丝 0 资源 831 + 关注 私信
最近热门资源
银河麒麟桌面操作系统备份用户数据  130
统信桌面专业版【全盘安装UOS系统】介绍  129
银河麒麟桌面操作系统安装佳能打印机驱动方法  120
银河麒麟桌面操作系统 V10-SP1用户密码修改  108
麒麟系统连接打印机常见问题及解决方法  30
最近下载排行榜
银河麒麟桌面操作系统备份用户数据 0
统信桌面专业版【全盘安装UOS系统】介绍 0
银河麒麟桌面操作系统安装佳能打印机驱动方法 0
银河麒麟桌面操作系统 V10-SP1用户密码修改 0
麒麟系统连接打印机常见问题及解决方法 0
作者收入月榜
1

prtyaa 收益393.62元

2

zlj141319 收益218元

3

1843880570 收益214.2元

4

IT-feng 收益210.13元

5

风晓 收益208.24元

6

777 收益172.71元

7

Fhawking 收益106.6元

8

信创来了 收益105.84元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!