Python语言代码练习

Python函数练习

案例1:使用函数生成指定长度的验证码

# 第四步:引入random随机模块
import random
# 1、封装一个函数,生成指定长度的随机验证码
def func(length):
    # 第一步:定义一个字符串,用于生成验证码
    str1 = '23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'
    # 第二步:定义一个空字符串,专门用于接收一定长度的验证码
    code = ''
    # 第三步:生成几位长度的验证码其实就是循环几次,每次循环时要做两件事
    # 第一件事:从str1中随机获取一个字符
    # 第二件事:把获取到的随机字符,追加到code空字符串中
    for i in range(length):
        # 第五步:如何从str1中抽取一个随机字符?答:使用索引随机
        randnum = random.randint(0, len(str1) - 1)
        # 第六步:把每次得到的随机字符拼接到code变量中
        code += str1[randnum]
    # 第七步:把得到的结果作为函数的返回值
    return code

# 2、调用func函数
print(func(6))

range()用法:
语法格式
range(start,end,step)

参数介绍:
start:用于指定计数的起始值,可以省略不写,默认值为0。
end:用于指定计数的结束值(不包括该值)。如果该值设置为,5那么循环数值为0、1、2、3、4。
step:步长,就是两个数字之间的间隔,可以省略(默认步长为1)。

例:
range(1,5),此处表示默认步长为1,那么循环数值为1、2、3、4;
range(1,7,2),此处表示步长为2,即此处取值为1,3,5(此处注意左闭右开,即此处7是取不到的)

案例2:Python中的不定长参数

不定长参数也叫可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。
此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。
①*args :不定长位置参数(不定长元组参数),*args代表固定格式,args代表变量的名称,主要用于接收不定长位置参数
②**kwargs :不定长关键词参数(不定长字典参数),**kwargs代表固定格式,kwargs代表变量名称,主要用于接收不定长关键词参数

# 定义func函数时,参数应该如何编写呢? 不定长位置参数(不定长元组参数)
def func1(*args):
    print(args)

# 调用一个函数时,可以有多重调用方法
func1()
func1(1)
func1(1, 2)
func1(1, 2, 3)
#  不定长关键词参数(不定长字典参数)
def func2(**kwargs):
    print(kwargs)

func2()
func2(a=1)
func2(a=1, b=2)
func2(a=1, b=2, c=3)

python中不定长参数应用场景1

在实际Python开发工作中,*args与**kwargs还可以结合在一起使用!
注意事项:*args必须放在左边,**kwargs必须放在右边。

def func(*args, **kwargs):
    print(args)
    print(kwargs)

# 当我们调用func函数时为其传递参数,*args用于接收位置参数,**kwargs用于接收关键词参数
func(1, 2, 3,a = 4,b = 5 )

结果:
(1, 2, 3)
{‘a’: 4, ‘b’: 5}

Python中不定长参数应用场景2

需求:请封装一个函数,用于接收list1与dict1的值,然后对其进行求和操作,函数最终返回结果为1+2+3+4+5
解析:在Python中,*args还可以专门用于接收列表类型或者元组类型的数据 , **kwargs还可以专门用于接收字典类型的数据

def func(*args, **kwargs):
    sum = 0
    for i in args:
        sum += i
    for value in kwargs.values():
        sum += value
    print(sum)

list1 = [1, 2, 3]
dict1 = {'a':4, 'b':5}
# 此处注意要加*
func(*list1, **dict1)

注意:
在Python代码中,函数定义时的参数一共有3种类别
① 普通参数,如def func(name, age, mobile)
② 缺省参数(默认值参数),如def func(name, age, gender=‘male’)
③ 不定长参数,如def func(*args, **kwargs)
在函数中,以上三种参数还可以混合在一起使用,
特别注意:顺序很重要
def func(① 普通参数 ② *args ③ 缺省参数 ④ **kwargs):
pass

def func(a, b, *args, c=4, **kwargs):
    print(a, b)
    print(args)
    print(c)
    print(kwargs)

# 如何传递参数
func(1, 2, 3, c=100, d=5, e=6)

案例3:Python中文件读取的3种方法

文件读取要分为三步走:
① 打开文件 f = open()
② 读取文件
③ 关闭文件 f.close()
在Python代码中,文件读取一共有3种方法:
①read() : 读取文件的所有内容,可以添加一个参数size,代表读取字符长度
②readlines() : 一次性读取文件的所有内容,返回结果是一个列表,列表中的每一个元素都是文件中的一行
③readline() : 一次读取文件的一行,读取一次向后移动一次,直到文件读取完毕,很少自己使用,通常要配合while True

# 1.打开文件
f = open('python.txt', 'a', encoding = 'utf-8')
# 2.读写文件
f.write('人生苦短,我学Python。')
# 3.关闭文件
f.close()
# 1、第一种方法
f = open('python.txt', 'r', encoding='utf-8')
# content = f.read()  # 读取文件所有内容
content = f.read(1)   # 代表只读取文件中的一个字符
print(content)
f.close()

# 2、第二种方法
f = open('python.txt', 'r', encoding='utf-8')
content = f.readlines()
print(content)
f.close()

# 3、第三种方法
f = open('python.txt', 'r', encoding='utf-8')
while True:
    content = f.readline()
    if not content:
        break
    else:
        print(content, end='')
f.close()

案例4:Python中文件操作之文件的备份

需求:用户输入当前目录下任意文件名,完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:(test[备份].txt)。
题目分析:
① 命名变化:test.txt => 备份 => test[备份].txt
② 内容变化:需要把旧文件中的内容完全拷贝到新文件中
分析:命名变化如何实现
test.txt => test[备份].txt?
☆ 提示用户输入要备份的文件名称
☆ 分别获取文件的名称以及文件的后缀 => (文件名 => test 后缀 => .txt)
☆ 重新拼接新文件 test + [备份] + .txt
新方法:rfind()方法,从左向右查找,返回这个关键词在最后一次出现的位置
test.abc.txt
分析:文件内容变化
旧文件 => 读取操作
新文件 => 写入操作
把旧文件的内容全部读取出来写入到新文件中,但是文件如果比较大,考虑使用read或readline

oldname = input('请输入您要备份的文件名称:')
# oldname = 'test.txt',拆解文件名与文件的后缀
index = oldname.rfind('.') # 4
# 获取文件名称
filename = oldname[:index]  # [0:4:1]即为test
postfix = oldname[index:]  # [4:8:1]即为.txt
# 拼接新文件名称
newname = filename + '[备份]' + postfix
# 创建old_f文件句柄与new_f文件句柄
old_f = open(oldname, 'rb')
new_f = open(newname, 'wb')
while True:
    content = old_f.read(1024)  # r模式size代表字符长度,rb模式size代表字节大小 => 1KB
    if not content:
        break
    else:
        new_f.write(content)
# 操作完成,关闭文件
new_f.close()
old_f.close()

案例5:Python中的os模块

(1)os模块实现对文件的操作

os.rename(旧文件名称, 新文件名称)
os.remove(‘要删除的文件名称’)
案例:把Python项目目录下的python.txt文件,更名为linux.txt,查看效果后,对文件进行删除操作。

# 1.导入os模块
import os
# 2.对Python.txt重命名为linux.txt
if os.path.exists('python.txt'):
    os.rename('python.txt','linux.txt')

# 3.删除linux.txt
os.remove('linux.txt')

(2)os模块实现对文件夹的操作

import os模块
os.mkdir() 创建一个文件夹
os.getcwd() 获取当前程序工作目录
os.chdir() => change directory,切换目录
os.listdir() => list directory,以列表形式展现一个目录下的所有文件信息
os.rmdir() => remove directory,移除目录(删除文件夹,缺点:只能删除空文件夹)
案例:准备一个static文件夹以及file1.txt、file2.txt、file3.txt三个文件
① 在程序中,将当前目录切换到static文件夹
② 创建一个新images文件夹以及test文件夹
③ 获取目录下的所有文件
④ 移除test文件夹

import os
# 1、我目前在什么位置
print(os.getcwd())
# 2、把当前工作目录切换到static文件夹
os.chdir('static')
print(os.getcwd())
# 3、创建images和test文件夹
if not os.path.exists('images'):
    os.mkdir('images')
if not os.path.exists('test'):
    os.mkdir('test')
# 4、获取一个目录下的所有文件
files = os.listdir()
print(files)
# 5、删除目录
if os.path.exists('test'):
    os.rmdir('test')
print(files)

案例6:Python中与文件相关的路径问题

在文件操作过程中,经常涉及到路径问题,那Python代码中,路径有哪些表示方式呢?
①绝对路径从盘符(C盘、D盘、E盘)一级一级向下访问,直到访问到我们的文件 => 绝对路径
C:/Python/readme.txt
因为在字符串中,\右斜杠代表转义字符
缺点:不方便后期代码的迁移,把代码上传到Linux服务器上

② 相对路径,参考点 => 相对路径参考点就是代码文件本身
其他文件与这个代码文件一般有三种关系:
☆ 同级关系(平行关系):同级的访问直接使用./文件名称或者直接使用文件名称即可访问
☆ 上级关系(比如我们把代码切换到static目录下,我们在static目录中,与外部的python[备份].txt就是上级关系,可以使用…/来访问上级文件,…/…/上级的上级
☆ 下级关系:就是我们要访问的文件,在同级目录的下面,这种就称之为下级关系 => 同级文件夹名称/

案例7:Python中异常捕获

try:
    f = open('python.txt', 'r')
except Exception as e:
    print(f'-- 日志: {e} --')
    print('找到错误的同时,执行B方案!')

try:
可能出现异常的代码
except Exception as e:
如果出现异常,则执行的代码
else:
如果try语句中的代码没有出现异常,则执行else中的代码
finally:
特别适合实现一些收尾的工作,因为它是无论是否异常都会执行的代码 => f.close()

try:
    f = open('python.txt', 'r')
except:
    f = open('python[备份].txt', 'w')
else:
    content = f.read()
    print(content)
finally:
    f.close()

案例8:Python中导入模块

①使用import导入
import os
调用方式 => 模块名称.函数名称()
os.mkdir(‘static’)
②使用from导入
导入方式:
from 模块名称 import * 代表导入这个模块中所有函数
from 模块名称 import 函数1, 函数2, 函数3 代表仅导入函数123

调用方式:不需要模块名称,直接使用函数名称即可
mkdir()

# from os import *
from os import mkdir, rmdir

rmdir('static')

③别名的使用

'''
基本语法:
import 模块名称 as 别名

调用过程中:
别名.方法()
'''
import random as rd

print(rd.randint(0, 2))

案例9:Python中time模块的使用

time模块是一个与日期时间相关的模块,主要拥有这样两个方法
①time.sleep(秒数) :休眠
②time.time() :获取当前时间,返回的是一个数字,我们经常使用time.time()获取程序执行时间

# 1、导入time模块
import time

# 2、程序开始前,获取一个时间点
start = time.time()
# 定义一个列表
list1 = []
for i in range(10000000):
    list1.append(i)
# 3、当程序执行结束,获取一个时间点
end = time.time()

print(f'以上程序执行一共消耗了{end - start}s时间!')

案例10:Python中测试代码

自定义模块测试需求:
①必须在自定义模块所在的文件中进行测试 ----> my_module2
②当其它Python文件导入my_module2的时候,测试代码还要立即失效
(main+回车 —> if _ _name _==’ _main _ _':)

# 1、定义一个func1()函数
def func1():
    return 1
# 2、定义一个func2()函数
def func2():
    return 2
# 3、定义一个func3()函数
def func3():
    return 3
# 测试代码(代码测试完毕后,当导入到其他文件时,测试代码要自动消失。)
# print(func1())
# print(func2())
# print(func3())
# 测试代码(其文件只可在当前代码中执行,当导入到其它文件时,则此下方的代码不执行,失效了)
if __name__ == '__main__':  # mian+'回车'
    print(func1())
    print(func2())
    print(func3())

在Python中,以_ _ name_ 这样命名的变量都属于魔术变量,拥有特殊的含义!
_ _ name
_ :是一个特殊的变量,随着运行环境的不同(随着所运行位置的不同,返回结果也是不同的)
_ name _ _ 返回的结果是一个字符串
① 如果在本页面直接输出__name
_,然后把这个页面导入到其他文件时,则__name__返回结果就是本页面的文件名称,不等于__main__

print(__name__)
print(type(__name__))
if __name__ == '__main__':
    print('如果以上条件成立,代表我们正在当前页面中执行此代码')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值