# day2

- Link: https://xingheye.icu/day2/
- Published: 2026-10-29T20:49:34+08:00
- Author: 星和夜

本来想写个鸡尾酒排序法的，但是没有考虑左右边界的收缩，目前懒得改了

# 循环嵌套             想要写好嵌套循环重点在于搞清楚外部循环了多少轮，内部多少轮，
一个对应行数，一个对应列数

for i in range(1,10):

    for j in range(1,i+1):

        print(f”{j}*{i}={i*j}”,end=”  “)

    print()

def self_sort(lst):

    data = lst[:]      # 如果直接将列表list赋值给data它们两会等价

    for i in range(len(data)-1):

        counter = 0

        for j in range(len(data)-1-i):

            if data[j]>data[j+1]:

                data[j],data[j+1] = data[j+1],data[j]

                counter = True

        if not counter:

            return data

list=[1,5,6,8,5,9,9,5,2,3,4]

print(self_sort(list))

def self_sorted(ls):

    data = ls[:]

    for i in range(len(data)-1):

        counter=False

        if i%2 != 0:

            for j in range(len(data)-1-i):

                if data[j]>data[j+1]:

                    data[j],data[j+1]=data[j+1],data[j]

                    counter = True

        else:

            for j in range(len(data)-i-2,-1,-1):

                if data[j]>data[j+1]:

                    data[j],data[j+1]=data[j+1],data[j]

                    counter = True

        if not counter:

            return data

ls=[9,5,6,8,4,5,41,11,2,2,5,8,5,7,4,7,4,4,1]

print(self_sorted(ls))

# 装饰器及语法糖

# 装饰器就是用来给函数提供额外功能的函数，就比如下面例子中的download函数，其本身
是不需要计时功能的，所以用装饰器来加

# 装饰器的返回值是一个函数，这个函数不仅包含被装饰函数的全部功能，还包含其他额外
功能

import time

import random

def record_time(func):

    def wrapped(*args,**kwargs):      # *args是用来接收普通变量的，**kwargs是用来
接收键值对的，虽然本题中并不需要，这是模版写法

        start = time.time()     # 记录开始时间

        ret_value=func(*args,**kwargs)         # 调用原函数并记录返回值（如果有的话）

        end = time.time()       # 记录结束时间

        print(f”{end-start:.3f}”)       # :.3f表示保留三位小数

        return ret_value       # 返回返回值，这道题中的download并没有返回值，所以
在这道题中这个功能可以去掉

    return wrapped    # 写函数先写返回值

def download():

    print(“开始下载文件一”)

    time.sleep(random.random()*3+2)      # random.random()生成一个0到1的随机小数

    print(“文件一下载完成！”)

b=record_time(download)

b()

# 语法糖

@record_time     # 相当于upload=record_time(upload)

def upload():

    print(“开始上传文件2”)

    time.sleep(random.random()*3+2)      # random.random()生成一个0到1的随机小数

    print(“文件2上传完成！”)
