python第十二次作业

1.定义一个生成器函数,生成1-10

def func():
    for i in range(1, 11):
        yield i

使用next(generator)方法获取1-10

gen2 = func()
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))
print(next(gen2))

使用for循环获取

gen2 = func()
for i in gen2:
    print(i, end=" ")

结果可得到 1 2 3 4 5 6 7 8 9 10 

2.模拟range的功能,自己建立一个range:MyRange
range(10)
range(1, 10)
range(1, 10, 1) =>
start, stop, step
range(10, 1, -1)
range(10, -1, -1)
range(-10, -1, 1)
range(-1, -10, -1)

class MyRange:

    def __init__(self, *args):

        if len(args) == 0:
            raise TypeError("MyRange expected at least 1 argument")
        elif len(args) == 1:
            self.start = 0
            self.stop = args[0]
            self.step = 1
        elif len(args) == 2:
            self.start, self.stop = args
            self.step = 1
        elif len(args) == 3:
            self.start, self.stop, self.step = args
            if self.step == 0:
                raise ValueError("MyRange() arg 3 must not be zero")
        else:
            raise TypeError("MyRange expected at most 3 arguments")

    def __iter__(self):
        return self

    def __next__(self):
        data = self.start
        if self.step > 0:
            if self.start < self.stop:
                self.start += self.step
                return data
            else:
                raise StopIteration
        if self.step < 0:
            if self.start > self.stop:
                self.start += self.step
                return data
            else:
                raise StopIteration


print(list(MyRange(10)))
print(list(MyRange(1, 10)))
print(list(MyRange(1, 10, 1)))
print(list(MyRange(-10, -1, 1)))
print(list(MyRange(10, 1, -1)))
print(list(MyRange(10, -1, -1)))
print(list(MyRange(-1, -10, -1)))

结果

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[-10, -9, -8, -7, -6, -5, -4, -3, -2]
[10, 9, 8, 7, 6, 5, 4, 3, 2]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[-1, -2, -3, -4, -5, -6, -7, -8, -9]

3. re中函数的使用(自己写用例来使用):
match

import re
pattern = "abc"
string = "abcabcabc"
# 只匹配字符串的开始位置,0或者多个字符匹配到了正则表达式样式,则返回None或者相应的匹配对象
print(re.match(pattern, string))
<re.Match object; span=(0, 3), match='abc'>

fullmatch

pattern = "abcabcabc"
string = "abcabcabc"
# 匹配整个字符串,0或者全部字符匹配到了正则表达式样式,则返回None或者相应的匹配对象
print(re.fullmatch(pattern, string))
<re.Match object; span=(0, 9), match='abcabcabc'>

search

pattern = "bca"
string = "abcabcabc"
# 扫描整个字符串 找到匹配样式的第一个位置,返回相应的 匹配对象。没有匹配则返回 None
print(re.search(pattern, string))
<re.Match object; span=(1, 4), match='bca'>

findall

pattern = "abc"
string = "abcabcabc"
# 返回 pattern 在 string 中的所有非重叠匹配,以字符串列表或字符串元组列表的形式。
# 对 string 的扫描从左至右,匹配结果按照找到的顺序返回。空匹配也包括在结果中。
print(re.findall(pattern, string))
['abc', 'abc', 'abc']

finditer

pattern = "abc"
string = "abcabcabc"
# pattern 在 string 里所有的非重复匹配,返回为一个迭代器 iterator 保存了 匹配对象。
# string 从左到右扫描,匹配按顺序排列。空匹配也包含在结果里。
iterator = re.finditer(pattern, string)
num = iter(iterator)
print(next(num))
print(next(num))
print(next(num))
<re.Match object; span=(0, 3), match='abc'>
<re.Match object; span=(3, 6), match='abc'>
<re.Match object; span=(6, 9), match='abc'>

split

pattern = ","
string = "中国,陕西,西安"
# 用 pattern 分开 string 。
# 如果在 pattern 中捕获到括号,那么所有的组里的文字也会包含在列表里。
print(re.split(pattern, string))
['中国', '陕西', '西安']

sub

print(re.split(pattern, string))
pattern = ","
string = "中国,陕西,西安"
repl = "-"
# 返回通过使用 repl 替换在 string 最左边非重叠出现的 pattern 而获得的字符串。
# 如果样式没有找到,则不加改变地返回 string。
# repl 可以是字符串或函数;如为字符串,则其中任何反斜杠转义序列都会被处理。
print(re.sub(pattern, repl, string))
中国-陕西-西安

subn

pattern = ","
string = "中国,陕西,西安"
repl = "|"
# 行为与 sub() 相同,但是返回一个元组 (字符串, 替换次数).
print(re.subn(pattern, repl, string))
('中国|陕西|西安', 2)

complie

pattern = "abc"
string = "abcabcabc"
prog = re.compile(pattern)
result = prog.match(string)
# 将正则表达式的样式编译为一个 正则表达式对象 (正则对象),
# 可以用于匹配,通过这个对象的方法 match(), search() 以及描述。
print(result)

这等价于

result = re.match(pattern,string)
print(result)

结果相同

<re.Match object; span=(0, 3), match='abc'>
<re.Match object; span=(0, 3), match='abc'>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值