一、基本函数
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))