首页 > 编程语言 >Python - 习题练习(1-3)

Python - 习题练习(1-3)

时间:2022-12-17 21:44:22浏览次数:46  
标签:Python 练习 列表 re range 字符串 print 习题 findall

一、前言

  接下来通过一些习题练习下代码感,以及熟悉解题思路和基本函数使用,参考博客:https://www.cnblogs.com/poloyy/p/15255670.html

二、习题实战

1、open函数、字典.items()、with open() as f 、f格式化字符串

题目1:

有一个数据list of dict如下
lists = [

    {"test1": "1111"},

    {"test2": "2222"},
]

写入到本地一个txt文件,内容格式如下:
test1,1111
test2,2222

答案:

'''
解题思路:
打开文件
循环列表,提取字典
提取key,value
写入文件
'''

lists = [
    {"test1": "1111"},
    {"test2": "2222"},
]

with open("test.txt","w+",encoding="utf-8") as f:
    for i in lists:
        for key,value in i.items():
            # python的字符串前面加f表示格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式
            f.write(f"{key},{value}\n")

1)open() 函数的语法为:

f = open(file, mode, encoding)
file:表示要保存或要打开的文件的路径,可以是相对路径,也可以是绝对路径。
mode:表示数据以何种方式打开、写入文本。
encoding:指定了文件的编码方式。

2)字典 items() 函数

该函数是以列表返回可遍历的(键, 值) 元组数组,可以用于 for 来循环遍历;items() 方法把字典中每对 key 和 value 组成一个元组,并把这些元组放在列表中返回。

--使用语法:dict.items()

--返回值:返回列表

3)with open() as f

在操作文件完成之后,需要调用close()方法关闭文件。因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。由于文件读写时有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally通过捕捉异常、处理异常来实现。如果能保证文件打开没有异常的情况下,我们每次都这么写,实在太繁琐。所以,Python引入了with语句来自动帮我们调用close()方法。也就是说:文件读取的这个操作,只有在with语句内部才会生效,不会离开。

语法:

with open(文件名, 模式) as 文件对象:

文件对象.方法() 由此可见:with自带回收机制,代码更加简洁、优美,不必调用close()方法。

 4)f格式化字符串: 

python的字符串前面加f表示格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式

2、列表index()、列表append()、len()函数、range()函数

题目2:

a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
如何得出c = ["a1", "b2", "c3", "d4", "e5"]

答案:

'''
解题思路:
a、b两个列表长度一致,获取长度
一个for循环,每次获取同下标值
字符串拼接,添加到c列表
'''

a = [1,2,3,4,5]
b = ["a","b","c","d","e"]
c = []
# 方案一
for i in a: # 循环a列表,1-5
    inx = a.index(i) # a.index(1),用index函数获取值1在a列表的位置:0,即inx=0
    # 循环后inx输出结果为:0 1 2 3 4
    d = b[inx] # 直接用下标获取b列表值,比如b[0]即等于"a"
    # 循环后d输出的结果为:a b c d e
    if d != -1: # d != -1 判断是起到什么作用?如果b[inx]不存在,那么d=-1
        c.append(f"{d}{i}")
print(c)

# 方案二
e = []
for i in range(0,len(a)): # a的len=5,range(0,5) 输出结果为[0,1,2,3,4] ,i从range范围循环,即i从0-4循环
    a1 = a[i] # a[0]=1
    b1 = b[i] # b[0]=a
    e.append(f"{b1}{a1}")
print(e)

1)列表index()

index()方法搜索列表中的元素并返回其索引值,注意: Python中的索引从0开始,而不是1。还有 index() 方法仅返回值的首次出现

fruits = ['apple', 'banana', 'cherry']

x = fruits.index("cherry")

值 "cherry" 的位置是:2

2)列表append()

append() 函数可以向列表末尾添加元素。语法:list.append(element),

  • element:任何类型的元素,比如普通类型:数值、字符串,集合类型:元组(1,2,3)、列表[a,c,b]
  • 使用 append() 函数添加列表时,是添加列表的「引用地址」而不是添加列表内容,当被添加的列表发生变化时,添加后的列表也会同步发生变化。

3)len()函数

1:作用:返回字符串、列表、字典、元组等长度

2:语法:len(str)

3:参数:
str:要计算的字符串、列表、字典、元组等

4:返回值:字符串、列表、字典、元组等元素的长度

4)range()函数

range()函数:用于生成一个整数序列,打印时 print(list(a))

range()的三种创建方式:

第一种:只有一个参数(小括号中只给了一个数)即range(stop) ,比如range(10),指的是默认从0开始,步长为1,不包括10,则输出[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

第二种:range(start,stop) (给了两个参数,即小括号中给了两个数),比如range(1,10),则输出[1, 2, 3, 4, 5, 6, 7, 8, 9]

第三种:range(start,stop,step):创建一个在[start,stop)之间,步长为step; 比如range(1,10,2),则输出[1, 3, 5, 7, 9]

range()函数中可以使用in 和not in 判断整数序列中是否存在(不存在)指定的整数,例如:

在上面第三种的基础上 print(10 in r) 运行结果为False; print(9 in r)运行结果为True ;print(10 not in r)运行结果为True;print(9 not in r)的运行结果为False;

range类型的优点:不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为仅仅需要储存start,stop,step,只有当用到range对象时,才会去计算序列中的相关元素

3、split()函数、正则表达式re模式re.findall()函数

题目3:

写一个小程序:控制台输入邮箱地址(格式为 [email protected]), 程序识别用户名和公司名后,将用户名和公司名输出到控制台。 
要求: 
1. 校验输入内容是否符合规范([email protected]), 如是进入下一步,如否则抛出提 示"incorrect email format"。注意必须以.com 结尾 
2. 可以循环“输入--输出判断结果”这整个过程 
3. 按字母 Q(不区分大小写)退出循环,结束程序 

答案:

'''
解题思路:
固定以.com结尾,用正则匹配
以 @ 和 . 分割字符串
提取username和companyname
'''
import re

while True:
    email = input("请输入邮箱:")
    if email.upper() == "Q": # upper() 方法将字符串中的小写字母转为大写字母
        break # 若用户输入字母Q或q,则中断退出

    # findall(pattern, string, flags=0),返回string中所有与pattern匹配的全部字串,返回形式为数组
    # 用$符号表示以.com结尾的字符串返回,判断是否字符串结束的字符串
    res = re.findall(".com$", email) # 输出结果为:['.com']
    if not res:
        print("incorrect email format")
    else:
        temp = email.split("@") # 若用户输入[email protected],则输出结果为['11', 'qq.com']
        name = temp[0] 
        com = temp[1].split(".")[0]
        print(f"username:{name} , companyName:{com}") # 输出结果为 username:11 , companyName:qq

1)split()函数

split() 通过指定分隔符对字符串进行切片。返回值:返回分割后的字符串列表。

2)re.findall()函数

findall(pattern,string,flags=0)返回string中所有与pattern匹配的全部字符串,返回形式为数组。

re.search()返回的是匹配的字符串,只匹配第一个;re.findall()匹配上几个就返回几个,用数组形式返回。

import re

str = 'aabbabaabbaa'

# 一个"."就是匹配除 \n (换行符)以外的任意一个字符
print(re.findall(r'a.b', str))  # ['aab', 'aab']

# *前面的字符出现0次或以上
print(re.findall(r'a*b', str))  # ['aab', 'b', 'ab', 'aab', 'b']

# 贪婪,匹配从.*前面为开始到后面为结束的所有内容
print(re.findall(r'a.*b', str))  # ['aabbabaabb']

# 非贪婪,遇到开始和结束就进行截取,因此截取多次符合的结果,中间没有字符也会被截取
print(re.findall(r'a.*?b', str))  # ['aab', 'ab', 'aab']

# 非贪婪,与上面一样,只是与上面的相比多了一个括号,只保留括号的内容
print(re.findall(r'a(.*?)b', str))  # ['a', '', 'a']

str = '''aabbab
         aabbaa
         bb'''  # 后面多加了2个b

# 没有把最后一个换行的aab算进来
print(re.findall(r'a.*?b', str))  # ['aab', 'ab', 'aab']

# re.S不会对\n进行中断
print(re.findall(r'a.*?b', str, re.S))  # ['aab', 'ab', 'aab', 'aa\n         b']

标签:Python,练习,列表,re,range,字符串,print,习题,findall
From: https://www.cnblogs.com/Chilam007/p/16988961.html

相关文章

  • 【Python自动化框架pytest(三)--数据驱动(参数化)】
    参数化,就是把测试过程中的数据提取出来,通过参数传递不同的数据来驱动用例运行。其实也就是数据驱动的概念。在Unittest中,我们讲过使用ddt库配合unittest实现数据驱动......
  • 【Python自动化框架pytest(四)--其他】
    一、pytest中的skip和xfailskip跳过测试函数skip意味着您希望只有在满足某些条件时测试才能通过,否则pytest应该跳过运行测试。常见的例子是跳过非Windows平台上的仅限Wind......
  • [oeasy]python0030_设置路径_export_PATH_zsh_系统路径设置_export
    ​ 放入路径回忆上次内容我们要在任意路径下直接执行sleep.py把sleep.py放在/usr/bin/下面最终可以在任意位置执行程序sleep.py但是/usr/bin里面放......
  • [python] 基于matplotlib实现雷达图的绘制
    雷达图(也称为蜘蛛图或星形图)是一种可视化视图,用于使用一致的比例尺显示三个或更多维度上的多元数据。并非每个人都是雷达图的忠实拥护者,但我认为雷达图能够以视觉上吸引人的......
  • [编程基础] Python对象的浅拷贝与深拷贝笔记
    Python中的赋值语句不创建对象的副本,它们只将名称绑定到对象。对于不可变的对象,这通常没有什么区别。但是对于处理可变对象或可变对象的集合,您可能需要寻找一种方法来创建这......
  • [编程基础] Python中的绝对导入与相对导入
    如果您从事的Python项目有多个文件,那么您以前可能不得不使用import语句。即使对于拥有多个项目的Python重度使用者(比如我),import也可能会造成混淆!您可能正在阅读本文,因为您想......
  • [编程基础] Python模块和包使用笔记
    本文探讨Python模块和Python包,这两种机制有助于模块化编程。模块化编程是指将大型笨拙的编程任务分解为单独的,较小的,更易于管理的子任务或模块的过程。然后可以像构建模块......
  • [编程基础] Python列表解析总结
    在本教程中,我们将学习使用Python列表解析(listcomprehensions)相关知识文章目录​​1使用介绍​​​​1.1Python列表解析转换列表​​​​1.2从摄氏度计算华氏温度​​......
  • [编程基础] Python装饰器入门总结
    Python装饰器教程展示了如何在Python中使用装饰器基本功能。文章目录​​1使用教程​​​​1.1Python装饰器简单示例​​​​1.2带@符号的Python装饰器​​​​1.3用参......
  • [编程基础] Python随机数生成模块总结
    Python随机数生成模块教程演示如何在Python中生成伪随机数。文章目录​​1介绍​​​​1.1随机数字生成器​​​​1.2Pythonrandom模块​​​​1.3随机种子​​​​2......