从零学习python - 06函数实例补充

# 方法-函数 主要作用就是将重复的代码片段进行封装以便于后期调用使用
# 格式: def 函数名([参数1...]):    调用方法 函数名()

# 定义一个登录login()函数输入用户名密码进行登录并进行判断

def login():
    username = input('请输入用户名:')
    password = input('请输入密码')
    if username == 'admin' and password == '123456':
        print('登录成功!')
    else:
        print('账号或密码错误,登录失败!')


login()
# 定义一个随机生成6位验证码的函数
def get_generate():
    char_list = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
    generate_list = ''
    for i in range(6):
        temp_list = random.choice(char_list)
        generate_list += temp_list
    print(generate_list)


get_generate()
# 参数可以在调用函数时对函数内的变量进行控制
# 定义一个函数求1到n的和
def get_sum(n):
    count = 0
    for i in range(n+1):
        count += i
    print(count)


get_sum(100)
# isinstance(变量, 类型) ---> 返回bool 判断该变量是否为此类型
# 多个参数与默认值参数 修改登录功能代码
# 这里的is_remember参数就成为默认参数,在函数调用时可以不修改,默认值为False
def is_login(username, password, is_remember=False):
    if username == 'admin' and password == 'admin':
        print('登录成功!')
    else:
        print('登录失败!')


is_login('admin', 'admin')
# 为了解决多个默认值参数在调用函数时不匹配的问题,可以使用关键字参数,就是在函数调用时将默认值参数的参数名加上
def print_info(name, age, sex='男', hobby='读书'):
    print(f'姓名:{name},年龄:{age},性别:{sex},爱好:{hobby}')

# 姓名:令狐冲,年龄:22,性别:男,爱好:喝酒
print_info('令狐冲', 22, hobby='喝酒')
# 出租车打车程序,参数手机号码,乘车时间和里程数,2公里内起步价10块,超出2公里每公里5元,乘车时间每分钟0.5元
def taxi_count(tel, time, mile):
    if mile <= 2:
        price = time * 0.5 + 10
        print(f'用户<{tel}>乘车{time}分钟,总里程{mile}英里,此次订单总金额为{price}元')
    else:
        price = ((mile - 2) * 5 + 10) + time * 0.5
        print(f'用户<{tel}>乘车{time}分钟,总里程{mile}英里,此次订单总金额为{price}元')
# 当函数的参数为列表时该怎么办捏?
list_test = [12, 15, 20, 25, 30]


def remove_list(list_1):
    for i in list_1[::]:
        if i < 20:
            list_1.remove(i)
    print(list_1)
# 装包与拆包操作
# 装包:*加变量,如果等号后赋值超过前面定义的变量,则会将分配后的剩余数据用list包装,赋值给[*变量]
a, b, *c = 1, 2, 3, 4, 5
print(a)  # 1
print(b)  # 2
print(c)  # [3, 4, 5]
# 拆包:如果定义的变量可以接收后面列表或元组内的内容,则会进行拆包操作,分给每一个变量
d, e, f = [1, 2, 3]
print(d)  # 1
print(e)  # 2
print(f)  # 3
# 先拆包再装包操作
g, h, *i = [1, 2, 3, 4, 5]
print(g)  # 1
print(h)  # 2
print(i)  # [3, 4, 5]
# 可变参数 *args **kwargs
# 如果在一个函数定义时固定了参数个数,在以后的调用中就不能灵活地传参了,所以使用了可变参数*args与**kwargs
# *args->表示函数传来的参数会自动装包以元组的形式接收 装包操作
#       如果在函数调用时传来的参数时list,tuple,set,那么需要在前面加上* - *list*tuple*set表示拆包
#       (先拆包再装包,传来的list通过加*号 - *list拆包后再通过*args装包)拆包在实参前 装包在函数定义的形参前
# 定义一个可变参数,能计算多个参数的和
def get_sum(*args):
    count = 0
    for i in args:
        count += i
    print(count)

get_sum(1, 2, 3)  # 6
# 如果传来的参数时list,tuple,set则需要先拆包再装包计算
list_1 = [1, 2, 3]
get_sum(*list_1)    # 6
# **kwargs-> key word args 使用关键字参数的形式传参,装包->将其转换为key:value形式后以字典形式表示
#       其中的拆包与装包与上面*args类似 只不过是加**
#       在函数传参时,不带关键字的是传给*args装包,带关键字的参数是传给**kwargs装包的
books = {
    'name': '三国演义'
}


def show_book(**kwargs):
    print(kwargs)
    for k, v in kwargs.items():
        print(k, v)


show_book(name='西游记')  # name 西游记
show_book(**books)  # name 三国演义
# 函数的返回值:return 返回值 特色:如果有多个返回值则以元组形式进行返回
# 多个返回值函数
def get_max_min_num(nums):
    max_num = max(nums)
    min_num = min(nums)
    return max_num, min_num


num_list = [12, 55, 22, 64, 78]
num1, num2 = get_max_min_num(num_list)
print(num1, num2)   # 78 12
# 自定义判断用户是否登录功能 # 如果成功登录,就可以借书
def is_login(username, password):
    if username == 'admin' and password == 'admin':
        return True
    else:
        return False


result = is_login('admin', 'admin')
print(result)   # True


def borrow_book(book_name):
    username = input('请输入用户名:')
    password = input('请输入密码:')
    if is_login(username, password):
        print(f'借书成功{book_name}')
    else:
        print('登录失败,借书失败')


borrow_book('西游记')
# 声明在函数外的变量为全局变量,在函数内部的为局部变量,全局变量只能使用不能修改,如果想要修改需要关键字 -> global 全局变量名
# 只有不可变的类型才需要添加global关键字,如果是可变类型则不需要添加global关键字 可变类型:list set dict
# 停车场计时收费 15分钟1块,超过15分钟则一小时4块 数据结构[{车牌号:[进入时间,出去时间]}]
# 停车场用列表表示
car_park = []


# 车辆进场
def enter():
    car_number = input('请输入车牌号:')
    car = {car_number: [0]}
    car_park.append(car)
    print(f'车辆{car_number} - 欢迎光临!')


# 显示停车场内车辆 返回停车车牌列表
def show_car():
    car_number = []
    for car in car_park:
        # 通过遍历字典获得车牌号
        for car_name in car:
            car_number.append(car_name)
    return car_number


# 车辆出场
def go_out():
    car_number = input('请输入车牌号:')
    for car in car_park:
        if car_number in car:
            # 如果循环找到了停车场内该车牌 则添加停车时间
            park_time = random.randint(0, 24)
            car.get(car_number).append(park_time)
            # 计算车费
            money_count = park_time * 4
            print(f'车辆:{car_number}停车时长为:{park_time}小时,停车费总计:{money_count}元')
            del car[car_number]
        else:
            print('输入车辆未找到,请检查输入是否正确!')

 

你可能感兴趣的:(python学习,学习,python,pycharm,经验分享)