第七天 第六章 函数

# 创建一个函数

# def functionname([parameterlist]): 定义 函数名([可选参数]): 可选参数可以为空或者多个
#     ['''comments'''] ['''注释''']如果写了这个内容,调用时会显示帮助信息,即这里定义的内容
#     [functionbody] [函数体] 函数被调用后要执行的功能代码。如果有返回值,可以用return语句返回。
#     pass 如果定义一个什么都不做的函数,可以用pass语句作为点位符。

# 创建一个过滤危险字符的函数:
def filterchar(string):
    '''
    功能:过滤危险字符(如黑客),并将过滤后的结果输出
    about:要过滤的字符串
    没有返回值
    '''
    import re
    pattern = r'(黑客)|(抓包)|(监听)|(Trojan)'
    sub = re.sub(pattern, '@_@', string)
    print(sub)
# 运行此代码,将不显示任何内容,因为这个函数还没有被调用

# 调用函数:functionname([parametersvalue])
about = '我是一名程序员,喜欢看黑客方面的图书,想研究一下Trojan'
filterchar(about) # 我是一名程序员,喜欢看@_@方面的图书,想研究一下@_@

# 参数传递:形参和实参
# 1 在定义函数时,函数名后括号内的参数为‘形式参数’,简称‘形参’
# 2 调用一个函数时,函数名后括号内的参数为‘实际参数’,简称‘实参’
# 传递参数时,当实参为不可变对象时,进行值传递,为可变对象时,进行引用传递
# 区别:进行值传递时,形参改变,实参不变,进行引用传递时,实参同形参一起改变

# 位置参数:也称必备参数,按照正确的顺序传到函数中,即调用时的数量和位置必须和定义时是一样的。
# 1、数量一致;2、位置必须与定义时一致;
# 为参数设置默认值
# def functionname(...,[parameter1=defaultvalue1])
#     [functionbody]

# 可变参数有两种形式,一种是*parameter,另一种是**parameter。
# *parameter:接收任意多个实际参数并将其放到一个元组中。
def printcoffee(*coffeename):
    print('\n我喜欢的咖啡有:')
    for item in coffeename:
        print(item)

printcoffee('蓝山')
printcoffee('蓝山','卡布其诺','哥伦比亚')
printcoffee('蓝山','卡布其诺','摩卡')

# 使用列表作为参数时,可在列表名称前加星号
param=['蓝山','卡布其诺','哥伦比亚','巴西']
printcoffee(*param)

# **parameter:接收任意多个类似关键字参数一样显式赋值的实际参数,并将其放到一个字典中。
def printsign(**sign):
    print()
    for key,value in sign.items():
        print(key ,'的星座是:',value)

printsign(绮梦='水平座',香凝='射手座')

# 返回值:程序执行完一系列功能,有些需求会产生一个结果,我们可以把这个结果反馈给调用者。
def fun_checkout(money):
    '''功能:计算商品合计金额并进行折扣处理
       money:保存商品金额的列表
       返回商品的合计金额和折扣后的金额
    '''
    money_old = sum(money)  # 计算合计金额
    money_new = money_old
    if  500 <= money_old < 1000:       # 满500可享受9折优惠
        money_new = '{:.2f}'.format(money_old * 0.9)
    elif 1000 <= money_old <= 2000:   # 满1000可享受8折优惠
        money_new = '{:.2f}'.format(money_old * 0.8)
    elif 2000 <= money_old <= 3000:   # 满2000可享受7折优惠
        money_new = '{:.2f}'.format(money_old*0.7)
    elif money_old >=3000 :                  # 满3000可享受6折优惠
        money_new = '{:.2f}'.format(money_old*0.6)
    return money_old,money_new   # 返回总金额和折扣后的金额
        
#*****************************调用函数***********************************#
print("\n开始结算……\n")
list_money = []    # 定义保存商品金额的列表
while True:
    # 请不要输入非法的金额,否则将抛出异常
    inmoney = float(input("输入商品金额(输入0表示输入完毕):"))
    if int(inmoney)==0:
        break     # 退出循环
    else:
        list_money.append(inmoney)  # 将金额添加到金额列表中
money = fun_checkout(list_money)  # 调用函数
print("合计金额:",money[0],"应付金额:",money[1])   # 显示应付金额

 

posted @ 2020-08-20 09:47  Zack6688  阅读(196)  评论(0编辑  收藏  举报