Python

第五章

闲着没事干?

一起学Python


微信关注公众号:夜寒信息


为每位用户免费提供技术帮助与资源供给



函数和代码复用


       当我们用Python写程序时常常感觉到一段代码需要反复执行才能达到想要的目的。但却不知道自己通过什么手法如何才能实现,这时我们就需要用到函数,函数能降低程序的耦合性,使程序代码可以复用,大大提高代码整洁性、观赏性!


Python的基本语法元素

1

def<函数名>(非可选,可选):

可选参数,定义函数时可以为某些参数指定默认值,构成可选参数(可有可无),可选参数必须放在必选参数后面,例:

def fact(n,m-1):
    s=1
    for i in range(1,n+1):
      s*=i
    return s//m
>>>fact(10)​
3628800​
>>>fac(10,5)​
725760

2

def<函数名>(<参数>,*b):


可变参数,函数定义时可以设计可变参数,即不确定参数的数量,可变参数必须放在必选参数后面,例:

def fact(n,*b):
    s=1
    for i in range(1,n+1):
      s*=i
    for item in b:
      s*=item
    return s
>>>fact(10,3)
10886400
>>>fac(10,3,5,8)
435456000


3

名=lambda 参数:表达式


函数的紧凑表达形式

例:>>>f=lambda x,y:x+y

  >>>f(10,15)

  25


Pyinstaller库的使用


1

pyinstaller -F <文件名.py>


将Python文件打包成exe文件,注意cmd运行

2-h

查看帮助

3–clean


清理打包过程中的临时文件

3-D,–onedir




默认值,生成dist文件夹

4


-F,–onefile




在dist文件夹中只生成独立的打包文件

5


-i <图标文件名.ico>




指定打包程序使用的图标(icon)文件

例:pyinstaller -i curve.ico -F Test.py


七段数码管绘制实例

用Turtle画一个可显示时间的七段数码管。

import turtle,time
def drawGap():
turtle.penup()
turtle.fd(5)
def drawLine(draw):
drawGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drawGap()
turtle.right(90)
def drawDigit(digit):
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup()
turtle.fd(20)
def drawDate(date):
turtle.pencolor("red")
for i in date:
if i == '-':
turtle.write('年',font=("Arial",18,"normal"))
turtle.pencolor("green")
turtle.fd(40)
elif i == '=':
turtle.write('月',font=("Arial",18,"normal"))
turtle.pencolor("blue")
turtle.fd(40)
elif i== '+':
turtle.write('日',font=("Arial",18,"normal"))
else:
drawDigit(eval(i))
def main():
turtle.setup(800,350,200,200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
main()


汉诺塔问题

函数递归实现汉诺塔游戏。

count = 0
def hanoi(n, src, dst, mid):
global count
if n ==1 :
print("{}:{}->{}".format(1,src,dst))
count +=1
else :
hanoi(n-1, src, mid, dst)
print("{}:{}->{}".format(n,src,dst))
count +=1
hanoi(n-1, mid, dst, src)
hanoi(3, "A", "C", "B")
print(count)


科赫曲线小包裹


Turtle绘制科赫曲线小包裹


import turtle
def koch(size, n):
if n == 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, n-1)
def main():
turtle.setup(600, 600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
level = 3
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.hideturtle()
main()



随机密码生成


补充编程模板中代码,完成如下功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

以整数17为随机数种子,获取用户输入整数N为长度,产生3个长度为N位的密码,密码的每位是一个数字。每个密码单独一行输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

产生密码采用random.randint()函数。

import random


def genpwd(length):
a = 10**(length-1)
b = 10**length - 1
return "{}".format(random.randint(a, b))


length = eval(input())
random.seed(17)
for i in range(3):
print(genpwd(length))


连续质数计算


补充编程模板中代码,完成如下功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

获得用户输入数字N,计算并输出从N开始的5个质数,单行输出,质数间用逗号,分割。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

注意:需要考虑用户输入的数字N可能是浮点数,应对输入取整数;最后一个输出后不用逗号。


def prime(m):
for i in range(2,m):
if m % i == 0:
return False
return True


n = eval(input())
n_ = int(n)
n_ = n_+1 if n_ < n else n_
count = 5


while count > 0:
if prime(n_):
if count > 1:
print(n_, end=",")
else:
print(n_, end="")
count -= 1
n_ += 1



微信关注公众号:

夜寒信息

为每一位用户免费提供

优质技术帮助与资源供给

Python学习:第五章_python

Python学习:第五章_python_02

扫码关注我