一、基本函数

1.1 带位置参数的函数

# 位置参数
def add(a, b):
    return a + b
print(add(1, 2))

def prt(a, b):
    print("a:", a)
    print("b:", b)
prt(1, 3)
prt(b=1, a=3)
prt(1, b=2)

 运行结果:

3
a: 1
b: 3
a: 3
b: 1
a: 1
b: 2

1.2 带默认参数的函数

# 默认参数
def add(a, b=10):
    return a + b
print(add(4))
print(add(6, 39))

 运行结果:

14
45

1.3 带不定长参数的函数

# 不定长参数
def print_info(argc, *args):  # *args传递元组不定长参数
    print(argc)
    print(len(args))
    for var in args:
        print(var)
    return


# print_info(4)
# print_info(7, 'Leozi', 20)
a_list = [11, 22, 33]
print_info(4, a_list)
print_info(4, *a_list)        # *代表将后面的列表自动解包操作,把列表里面的元素作为参数(不是吧整个列表作为参数)


def my_func(a, b, *arg, **kwargs):   # **是传递字典不定长参数
    print(len(arg), len(kwargs.keys()))
    if len(kwargs.items()) > 0:
        for k, v in kwargs.items():
            print(k, v)
    print(arg)
    print('a:', a)
    print('b:', b)


dic = {
    'c': 'hello',
    'name': 'lz',
    'age': 20
}

my_func(-1, -2, 1, 2, c=3, name='lz', age=20)
print()
my_func(-1, -2, 1, 2, **dic)   # 解包
print()
my_func(-1, -2, 1, 2, dic)   # 不解包 dic放在元组中

 运行结果:

4
1
[11, 22, 33]
4
3
11
22
33
2 3
c 3
name lz
age 20
(1, 2)
a: -1
b: -2

2 3
c hello
name lz
age 20
(1, 2)
a: -1
b: -2

3 0
(1, 2, {'c': 'hello', 'name': 'lz', 'age': 20})
a: -1
b: -2

Process finished with exit code 0

1.4 匿名函数

# 匿名函数-Lambda
func = lambda x, y, z: (x+2)*y*z
print(func(1, 2, 3))

 运行结果:

18

二、模块进入

方法一
import module 打包把指定模块的所有资源全部导入,通过模块名来调用

方法二
from module import funcname 导入单个方法
from module import fa, fb, fc 导入多个方法
from module import classname 导入类
from module import *

 

三、练习

练习一:

用python编写一个ATM存取款机的模拟程序,要求如下:
1. 添加如下操作主菜单,并实现菜单中的每个功能。
                 ******************欢迎来到ATM********************
                   *******************请选择操作菜单*********************
    *********1. 注册 2. 登录 3. 查询余额  4. 存款  5. 取款   6.转账   7.取卡 *******
注意:存取款要求只能是100的整数倍。
2. 注册时,判断用户名是否已存在,密码长度要大于等于6位,如果输入错误要有相应提示。登录时,要求用户输入用户名和密码,只有当用户名和密码均正
确才能提示用户登录成功,否则提示用户名或密码错误。注意,不管是注册阶段还是登录阶段,一旦用户输入错误,都将提示用户重新输入,直到正确为止。
用户信息分别包含姓名、密码以及余额,保存格式如下:
user_list = [{'name': 'zhangsan', 'password':'123', 'balance': 0}, {}, {}, ...]

 

 源代码:

user_list = []
log_flag = 0
self_obj = {}


def menu():
    print("*******************欢迎来到ATM***********************")
    print("******************请选择操作菜单**********************")
    print("***1.注册 2.登录 3.查询余额 4.存款 5.取款 6.转账 7.取卡***")


while True:
    menu()
    user_num = int(input("请输入要操作的序号:"))
    # user_opera(user_num1)
    if user_num == 1:
        while True:
            reg_flag = 0
            reg_name = input("注册用户名:")
            reg_psd = input("注册密码:")
            for obj in user_list:
                if obj['name'] == reg_name:
                    print("用户名已经存在,请重新输入")
                    break
                elif len(reg_psd) < 6:
                    print("密码需要大于等于6位,请重新输入")
                    break
            else:
                print("注册成功")
                user_list.append({'name': reg_name, 'password': reg_psd, 'balance': 0})
                reg_flag = 1
                break
    elif user_num == 2:
        while True:
            log_name = input("请输入用户名:")
            log_psd = input("请输入密码:")
            for obj in user_list:
                if log_name == obj['name'] and log_psd == obj['password']:
                    log_flag = 1
                    self_obj = obj
                    print("登陆成功")
                    break
            else:
                print("用户名或密码错误,请重新输入")
            if log_flag == 1:
                break
    elif user_num == 3:
        if log_flag == 0:
            print("请先登录")
        else:
            print("您的余额为:", self_obj['balance'])
    elif user_num == 4:
        money_store = int(input("请输入存款金额:"))
        self_obj['balance'] += money_store
        print("存款成功!")
    elif user_num == 5:
        money_get = int(input("请输入提取的金额:"))
        if self_obj['balance'] - money_get < 0:
            print("余额不足")
        else:
            self_obj['balance'] -= money_get
            print("提取成功!")
    elif user_num == 6:
        money_tran = int(input("请输入转账的金额:"))
        if self_obj['balance'] - money_tran < 0:
            print("余额不足")
        else:
            rev_count = input("请输入转账人用户名:")
            for obj in user_list:
                if obj['name'] == rev_count:
                    obj['balance'] += money_tran
                    self_obj['balance'] -= money_tran
                    print("转账成功")
                    break
            else:
                print("没有找到该用户名")
    else:
        print("取卡成功")
        break

 运行结果:

*******************欢迎来到ATM***********************
******************请选择操作菜单**********************
***1.注册 2.登录 3.查询余额 4.存款 5.取款 6.转账 7.取卡***
请输入要操作的序号:1
注册用户名:Leozi
注册密码:123456
注册成功
*******************欢迎来到ATM***********************
******************请选择操作菜单**********************
***1.注册 2.登录 3.查询余额 4.存款 5.取款 6.转账 7.取卡***
请输入要操作的序号:1
注册用户名:LYX
注册密码:123456
注册成功
*******************欢迎来到ATM***********************
******************请选择操作菜单**********************
***1.注册 2.登录 3.查询余额 4.存款 5.取款 6.转账 7.取卡***
请输入要操作的序号:2
请输入用户名:LYX
请输入密码:123456
登陆成功
*******************欢迎来到ATM***********************
******************请选择操作菜单**********************
***1.注册 2.登录 3.查询余额 4.存款 5.取款 6.转账 7.取卡***
请输入要操作的序号:3
您的余额为: 0
*******************欢迎来到ATM***********************
******************请选择操作菜单**********************
***1.注册 2.登录 3.查询余额 4.存款 5.取款 6.转账 7.取卡***
请输入要操作的序号:4
请输入存款金额:10000
存款成功!
*******************欢迎来到ATM***********************
******************请选择操作菜单**********************
***1.注册 2.登录 3.查询余额 4.存款 5.取款 6.转账 7.取卡***
请输入要操作的序号:5
请输入提取的金额:2000
提取成功!
*******************欢迎来到ATM***********************
******************请选择操作菜单**********************
***1.注册 2.登录 3.查询余额 4.存款 5.取款 6.转账 7.取卡***
请输入要操作的序号:6
请输入转账的金额:1000
请输入转账人用户名:Leozi
转账成功
*******************欢迎来到ATM***********************
******************请选择操作菜单**********************
***1.注册 2.登录 3.查询余额 4.存款 5.取款 6.转账 7.取卡***
请输入要操作的序号:3
您的余额为: 7000
*******************欢迎来到ATM***********************
******************请选择操作菜单**********************
***1.注册 2.登录 3.查询余额 4.存款 5.取款 6.转账 7.取卡***
请输入要操作的序号:7
取卡成功

 

练习二:

1.写一个函数,接受一个整数n,输出1+2+3+...+n 的和。
2.实现一个函数count(pstr,sstr,[begin=0],[end=0]),功能是查找pstr中有多少个sstr。提示:可以使用str.count()函数
3. 编写一个带有不定长参数的函数。在该函数中检查用户输入的参数个数,如果用户输入的参数不足4个,
则提示用户"参数个数不足4个,请检查",如果用户输入的参数大于4个,则如果用户输入了位置参数,
请打印出所有位置参数的值,如果用户输入了关键字参数,打印出所有关键字参数的值。
4.实现一个函数,支持传入任意多个整数进行加法运算,并返回结果。
5.实现一个简易计算器,根据用户输入执行相应的两个数的加、减、乘、除运算,例如用户输入'9 / 3',得出结果。每种运算请用单独的函数处理。
6.编写一个函数,在函数内部对参数进行操作后打印值,同时在函数外也打印该参数的值。要求如下:
(1).如果传入的是数字,则在函数内加1。
(2).如果传入的是字符串,则在该字符串后加‘1’。
(3).如果传入的是列表,则在该列表里加一个元素1。

7.用户在屏幕上循环输入,每输入一次,就以字符串的形式添加到列表中,当用户输入'quit'时,结束输入,打印整个列表。要求:添加列表元素的功能必须封装到一个函数中。
8.编写一个lambda函数,对x和y进行幂运算,并调用此函数。
# 第一题
def get_sum(n):
    print("1+2+3+...+{}的和为:".format(n), int((n+n*n)/2))

get_sum(100)

# 第二题
def count(pstr, sstr, begin=0, end=0):
    if begin and end:
        pstr = pstr[begin:end:]  # 能取到begin  不能取到end
    elif begin:
        pstr = pstr[begin:]
    elif end:
        pstr = pstr[:begin]
    return pstr.count(sstr)

print(count('helloworld', 'or', 3, -2))

# 第三题
# *args:位置参数  **kwargs: 关键字参数
def myfunc(*args, **kwargs):
    if len(args) + len(kwargs) < 4:
        print('参数个数不足4个,请检查')
        return
    if args:
        print(args)
    if kwargs:
        print(kwargs.values())


# 第四题
def add_sum(*args):
    sum = 0
    for item in args:
        sum += item
    return sum

# 第五题
# 方法一
# def add(num1, num2):
#     return num1 + num2
# def reduce(num1, num2):
#     return num1 - num2
# def multi(num1, num2):
#     return num1 * num2
# def division(num1, num2):
#     return num1 / num2
#
# while True:
#     ary = None
#     nums = []
#     str = input("请输入您需要运算的式子:")
#     for i in range(len(str)):
#         if str[i] == "+" or str[i] == "-" or str[i] == "*" or str[i] == "/":
#             ary = str.split(str[i])
#             break
#     nums = [int(ary[0]), int(ary[1])]
#     if '+' in str:
#         print(add(nums[0], nums[1]))
#     elif '-' in str:
#         print(reduce(nums[0], nums[1]))
#     elif '*' in str:
#         print(multi(nums[0], nums[1]))
#     else:
#         if nums[1] == 0:
#             print("不允许除数为0!")
#             continue
#         print(division(nums[0], nums[1]))

# 方法二
def add(num1, num2):
    return num1 + num2

def reduce(num1, num2):
    return num1 - num2

def multi(num1, num2):
    return num1 * num2

def division(num1, num2):
    return num1 / num2

def deal_ex():
    exstr = input("请输入需要计算的表达式:")
    op1 = int(exstr.split()[0])
    op2 = int(exstr.split()[2])
    op = exstr.split()[1]

    dic = {'+': add, '-': reduce, '*': multi, '/': division}
    return dic[op](op1, op2)

print(deal_ex())


# 第六题
def my_func(idx):
    if isinstance(idx, int):   # 法二:type(idx) == int str list
        idx += 1
    elif isinstance(idx, str):
        idx = idx + '1'
    elif isinstance(idx, list):
        idx.append(1)
    print(idx)
    return idx

print(my_func(1))
print(my_func('22'))
print(my_func([1, 2, 3]))

# 第七题
str_list = []

def add_str(new_str):
    str_list.append(new_str)
    return

while True:
    user_str = input("请输入:")
    if user_str == 'quit':
        print(str_list)
        break
    else:
        add_str(user_str)

# 第八题

func1 = lambda x, y: x**y
func2 = lambda x, y: y**x
print(func1(2, 10), func2(3, 5))