Python教程

第三周——Python中的函数和模块1

本文主要是介绍第三周——Python中的函数和模块1,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Python中的函数和模块

函数是功能相对独立且会重复使用的代码的封装。

1. 标准库中的模块和函数

函数说明
abs返回一个数的绝对值,例如:abs(-1.3)会返回1.3
bin把一个整数转换成以'0b'开头的二进制字符串,例如:bin(123)会返回'0b1111011'
chr将Unicode编码转换成对应的字符,例如:chr(8364)会返回'€'
hex将一个整数转换成以'0x'开头的十六进制字符串,例如:hex(123)会返回'0x7b'
input从输入中读取一行,返回读到的字符串。
len获取字符串、列表等的长度。
max返回多个参数或一个可迭代对象(后面会讲)中的最大值,例如:max(12, 95, 37)会返回95
min返回多个参数或一个可迭代对象(后面会讲)中的最小值,例如:min(12, 95, 37)会返回12
oct把一个整数转换成以'0o'开头的八进制字符串,例如:oct(123)会返回'0o173'
open打开一个文件并返回文件对象(后面会讲)。
ord将字符转换成对应的Unicode编码,例如:ord('€')会返回8364
pow求幂运算,例如:pow(2, 3)会返回8pow(2, 0.5)会返回1.4142135623730951
print打印输出。
range构造一个范围序列,例如:range(100)会产生099的整数序列。
round按照指定的精度对数值进行四舍五入,例如:round(1.23456, 4)会返回1.2346
sum对一个序列中的项从左到右进行求和运算,例如:sum(range(1, 101))会返回5050
type返回对象的类型,例如:type(10)会返回int;而type('hello')会返回str

2. 全局变量和局部变量

全局变量:没有写在任何函数里面的变量
局部变量:定义在函数内的变量

python程序中搜索一个变量是按照 LEGB 顺序进行搜索的:
Local(局部作用域)-->Embeded(嵌套作用域)-->
Global(全局作用域)-->Built-in(内置作用域)

global-->声明使用全局变量或者定义一个局部变量将其放到全局作用域
nonlocal-->声明使用嵌套作用域的变量(不使用局部变量)

3. 例子—骰子游戏

玩家摇两颗色子,如果第一次摇出了7点或11点,玩家胜;如果摇出了2点、3点、12点,庄家胜;如果摇出了其他的点数,游戏继续,玩家重新摇色子;如果玩家摇出了第一次摇的点数,玩家胜;如果玩家摇出了7点,庄家胜;如果玩家摇出其他点数,游戏继续,玩家重新摇色子,直到分出胜负。

游戏开始之前,玩家有1000元的初始资金,玩家可以下注,赢了获得下注的金额,输了就扣除下注的金额,游戏结束的条件是玩家把钱输光。

import random

def roll_dice(num):
    """
    摇骰子

    :param num: 骰子的数量
    :return:摇出的点数
    """
    total=0
    for _ in range(num):
        total+=random.randrange(1,7)

    return total

def win():
    """
    玩家赢
    :return:
    """
    global money
    print('玩家胜利')
    money += zhuma

def lose():
    global money
    print('庄家胜利')
    money -= zhuma

money = 1000
while money > 0:
    print(f'玩家总资产为{money}元.')
    zhuma = 0
    while zhuma <= 0 or zhuma > money:
        try:
            zhuma = int(input('请下注: '))
        except ValueError:
            pass

    first_point=roll_dice(2)
    print(f'玩家摇出了{first_point}点。')
    if first_point in (7, 11):
        win()
    elif first_point in (2, 3, 12):
        lose()
    else:
        while True:
            curr_point=roll_dice(2)
            print(f'玩家摇出了{curr_point}点')
            if curr_point==first_point:
                win()
                break
            elif curr_point==7:
                lose()
                break

print('玩家已破产')

4. 例子—双色球随机选号

红色球01-33,选择不重复的6个球,按从小到大排列
蓝色球01-16,选择一个球,跟在红色球的后面

import random

def generate():
    """
    生成一组彩票号码

    :return:
    """
    red_ball = [i for i in range(1, 34)]
    blue_ball = [i for i in range(1, 17)]
    # 无放回抽样
    select_balls = random.sample(red_ball, 6)
    select_balls.sort()
    select_balls += random.sample(blue_ball, k=1)
    return select_balls


def display(balls):
    """
    显示一组彩票号码

    :param balls: 装彩票号码对应的球的列表
    :return:
    """
    for ball in balls:
        print(f'{ball:0>2d}', end=' ')
    print()

n=int(input('机选几注:'))
for _ in range(n):
    display(generate())

5.例子—随机验证码

写一个实现生成指定长度的随机验证码(有数字和英文字母构成)的函数。
写好了之后,通过调用该函数,生成10组随机验证码

import random
import string
def get_captcha_code(length: int=4) ->str:# : int=4) ->str   类型标注
    """
    生成随机验证码

    :param length: 验证码的长度
    :return: 随机验证码字符串
    """
    selected_chars=random.choices(string.digits+string.ascii_letters,k=length)
    return ''.join(selected_chars)

for _ in range(10):
    print(get_captcha_code())

6. 例子—输出2-100范围内的质数

def is_prime(num):
    """
    判断一个正整数是不是质数

    :param num: 正整数
    :return: 如果是质数返回True,否则返回False
    """
    for i in range(2,int(num**0.5)+1):
        if num % i==0:
            return False
    return num!=1 and True

for n in range(2,100):
    if is_prime(n):
        print(n,end=' ')

7. 例子—求极差、均值、方差、标准差、中位数

def ptp(data):
    """求极差(全距)"""
    return max(data)-min(data)

def average(data):
    """求均值"""
    return sum(data)/len(data)

def variance(data):
    """求方差"""
    x_bar = average(data)
    total=0
    for num in data:
        total+=(num-x_bar)**2
    return total / (len(data)-1)

def standard_deviation(data):
    """求标准差"""
    return variance(data)**0.5

def median(data):
    """求中位数"""
    temp=sorted(data)
    size=len(temp)
    if size % 2 != 0:
        return temp[size//2]
    else:
        return average(temp[size//2-1:size//2+1])

8. 总结

  1. 一般返回布尔值的命名:前面加is

  2. 写程序的终极原则:高内聚,低耦合。—>high cohesion low coupling
    设计函数最重要的原则:单一职责原则(一个函数只做好一件事情)–高度内聚

  3. 函数sort()排序会打乱原来的顺序 ,而sorted()排序不会打乱顺序,返回

  4. 解决命名冲突:

    Python中的from、import、as关键字专门用来处理包和模块导入的操作,as可以用来取别名。
    (1)如果要使用其他模块中的定义函数,可以先通过import导入模块,然后通过“模块名.函数名()”的方式调用函数;
    (2)还有一种做法是直接 从模块中导入函数–>‘from 模块 import 函数名’–>直接通过函数名调用函数

这篇关于第三周——Python中的函数和模块1的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!