ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-08-07 10:32:02  阅读:181  来源: 互联网

标签:返回 return Python 第三周 玩家 模块 print data def


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 函数名’–>直接通过函数名调用函数

标签:返回,return,Python,第三周,玩家,模块,print,data,def
来源: https://blog.csdn.net/YYpoor/article/details/119479542

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有