Python 3 编程第一步 (end关键字、递归函数、斐波纳契数列的迭代实现)

在学习了一些Python3的基本语法知识后,下面尝试写一个斐波纳契数列。

# Fibonacci series: 斐波纳契数列
# 两个元素的总和确定了下一个数
a, b = 0, 1
while b < 10:
    print(b)
    a, b = b, a+b

其中代码 a, b = b, a+b 的计算方式为先计算右边表达式,然后同时赋值给左边(多变量赋值)

执行以上程序,输出结果为:

1
1
2
3
5
8

第一行包含了一个复合赋值:变量 a 和 b 同时得到新值 0 和 1。最后一行再次使用了同样的方法,可以看到,右边的表达式会在赋值变动之前执行。右边表达式的执行顺序是从左往右的。

end 关键字

键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下:

# Fibonacci series: 斐波纳契数列
# 两个元素的总和确定了下一个数
a, b = 0, 1
while b < 1000:
    print(b, end=',')
    a, b = b, a+b

执行以上程序,输出结果为:

1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

用递归函数求阶乘(例如:5!=5*4*3*2*1).代码如下:

def factorial(n):
     if n==1:
          return 1
     else:
          return n *factorial(n-1)

factorial(5)

执行以上程序,输出结果为:

120

使用递归函数需要注意防止栈溢出。函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会增加一层栈帧,每当函数返回,栈就会减少一层栈帧。由于栈的大小是无限的,所以递归用的次数过多,就会导致栈溢出。

汉罗塔的移动也可以看做递归函数。

递归应用

利用递归知识,遍历文件夹,打开每个文件夹,打印普通文件

import os
def func(filepath,n):
    # 1.打开这个文件夹F:/untitled
    files=os.listdir(filepath)
    # 2.拿到untitled文件夹下的每个文件名
    for file in files:  #文件名
        #3.获取路径
        f_d=os.path.join(filepath,file)  #F:/untitled/文件名  绝对路径
        #4.判断是否是文件夹
        if os.path.isdir(f_d):
            #5.如果是文件夹 ,继续打开文件夹
            print("\t"*n,file,":") #打印文件名
            func(f_d,n+1)
        else:#不是文件夹,普通文件
            print("\t"*n,file)


func("F:/untitled",0)

打印结果:

.idea :
	 misc.xml
	 modules.xml
	 untitled.iml
	 workspace.xml
 venv :
	 Include :
	 Lib :
		 site-packages :
			 easy-install.pth
			 pip-9.0.1-py3.7.egg :
				 EGG-INFO :
					 dependency_links.txt
					 entry_points.txt
				 pip :
					 basecommand.py
					 baseparser.py
					 cmdoptions.py
					 commands :
						 check.py
						 __init__.py
					 compat :
						 dictconfig.py
						 __init__.py
					 download.py
					 exceptions.py
					 ...

斐波拉契数列的迭代实现

例:我们都知道兔子的繁殖能力是惊人的,如下图:

Python 3 编程第一步 (end关键字、递归函数、斐波纳契数列的迭代实现)_第1张图片

编写代码,打印出20个月后兔子的总对数?

#斐波拉契数列
def fab(n):
     if n<1:
          print('输入有误')
          return -1
     if n==1 or n==2:
          return 1
     else:
          return fab(n-1)+fab(n-2)
result=fab(20)
if result !=-1:
     print('共有%d对小兔子诞生!' % result)

执行以上程序,输出结果为:

共有6765对小兔子诞生!

 

你可能感兴趣的:(Python3基础知识)