函数是功能相对独立且会重复使用的代码的封装。
函数 | 说明 |
---|---|
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) 会返回8 ;pow(2, 0.5) 会返回1.4142135623730951 。 |
print | 打印输出。 |
range | 构造一个范围序列,例如:range(100) 会产生0 到99 的整数序列。 |
round | 按照指定的精度对数值进行四舍五入,例如:round(1.23456, 4) 会返回1.2346 。 |
sum | 对一个序列中的项从左到右进行求和运算,例如:sum(range(1, 101)) 会返回5050 。 |
type | 返回对象的类型,例如:type(10) 会返回int ;而type('hello') 会返回str 。 |
全局变量:没有写在任何函数里面的变量 局部变量:定义在函数内的变量 python程序中搜索一个变量是按照 LEGB 顺序进行搜索的: Local(局部作用域)-->Embeded(嵌套作用域)--> Global(全局作用域)-->Built-in(内置作用域) global-->声明使用全局变量或者定义一个局部变量将其放到全局作用域 nonlocal-->声明使用嵌套作用域的变量(不使用局部变量)
玩家摇两颗色子,如果第一次摇出了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('玩家已破产')
红色球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())
写一个实现生成指定长度的随机验证码(有数字和英文字母构成)的函数。
写好了之后,通过调用该函数,生成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())
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=' ')
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])
一般返回布尔值的命名:前面加is
写程序的终极原则:高内聚,低耦合。—>high cohesion low coupling
设计函数最重要的原则:单一职责原则(一个函数只做好一件事情)–高度内聚
函数sort()排序会打乱原来的顺序 ,而sorted()排序不会打乱顺序,返回
解决命名冲突:
Python中的from、import、as关键字专门用来处理包和模块导入的操作,as可以用来取别名。
(1)如果要使用其他模块中的定义函数,可以先通过import导入模块,然后通过“模块名.函数名()”的方式调用函数;
(2)还有一种做法是直接 从模块中导入函数–>‘from 模块 import 函数名’–>直接通过函数名调用函数