|
12_Python语法示例(函数)
1.写一个函数mysum,此函数带有两个参数x,y打印出两个参数x,y的和def mysum(x, y):
print(x + y)
mysum(3, 2)2.写一个函数print_even,传入一个数参n表率终值整数(不包括n),打印0-n之间所有偶数def print_even(n):
print(list(x for x in range(n) if x % 2 == 0))
print_even(10)3.写一个函数mymax,返回两个数的最大值def mymax(a, b):
return a if a > b else b
print(mymax(3, 7))4.写一个函数input_number用于读取输入的多个整数,输入负数时结束将输入的数形成列表返回给调用者def input_number():
L1 = list()
while True:
num = int(input("输入整数为负停止:") or "-1")
if num >= 0:
L1.append(num)else:
break
return L1
print(input_number())5.写一个函数mysum,能够传入任意个实参的数字,返回所有实参的和def mysum(*args):
num = 0
for i in args:
num += i
return num
print(mysum(1, 2, 3, 4))
6.仿照max写一个mymax函数,实现功能与max完全相同def mymax(a, *args): # *聚合
def _max(*args):
m = args[0]
i = 1
while i < len(args):
ifargs[i] > m:
m = args[i]
i +=1
return m
if len(args) == 0:
return _max(*a) # *打散
return _max(a, *args) # *打散
print(mymax(1, 2, 3, 4))7.写一个函数minmax,能够给出任意个数字实参,返回这些实参的最小数和最大数# 办法一
def minmax(*args):
return min(args), max(args)
a, b = minmax(2, 1, 3, 7, 4)
print(a, b)
# 办法二
def my_max_min(*args):
args = list(args)
# print(args)
for i in range(0, len(args)-1):
if args[i] > args[i+1]:
args[i+1], args[i] = args[i], args[i+1]
max_num = args[len(args)-1]
for i in range(len(args)-1, 0, -1):
if args[i] < args[i-1]:
args[i-1], args[i] = args[i], args[i-1]
min_num = args[0]
print(args) # [1, 2, 5, 3, 4, 6, 7]
return (min_num, max_num)
res = my_max_min(5, 1, 7, 2, 4, 3, 6)
print(res) # (1, 7)
8.写一个函数 mysum此函数能够传入一个参数,两个参数和三个参数此函数的功能是返回从起始到终止值的和
1) 当传入一个参数时,这个参数表率终止数
2) 当传入两个参数时,第1个参数表率初始值,第二个参数表率终止值
3) 当传入三个参数时,第三个参数表率步长
def mysum(start, stop=None, step=1):
if stop is None:
start, stop = 0, start
num = 0
for i in range(start, stop, step):
num += i
return num
print(mysum(101))# 50050
print(mysum(1, 100)) # 4950
print(mysum(0, 101, 2) ) # 2550
# 办法二:
def mysum(*args):
return sum(range(*args))
print(mysum(101)) # 5050
9.创建一个列表L = []写一个函数 input_number读取数据放入列表L中def input_number():
L = list()
while True:
s = input("输入-1结束") or "-1"
if s == "-1":
break
L.append(s)
returnL
print(input_number())
10.写一个函数primes(n),返回少于n的所有的素数的列表def primes(n):
if n < 2:
return []
L = [2]
for i in range(n): # 循环判断2-n之间的数是不是素数
for j in range(2, i): # 判断i是不是素数
if i % j == 0:
break
if i - j == 1:
L.append(i)
return L
print(primes(10))
11.写一个lambda表达式,判断这个数的2次方+1能否被5整数,倘若能整除返回True,否则返回Falsefx = lambda x: True if (x**2 + 1) % 5 == 0 else False
print(fx(3)) # True
12.写一个lambda 表达式,求两个变量的最大值fx = lambda x, y: x if x >y else y
print(fx(4, 3)) # 4
13.自己写一个程序,解释执行用户输入的任何语句g = {}
l = {}
while True:
s = input(">>>") or "-1"
if s == "-1":
break
exec(s, g, l)
print(g)
print(l)14.求: 1 + 1/2 + 1/4 + 1/8 + ... + 1/2**n 的和# 办法一
n = int(input(">>>") or -1)
print(sum([1/2**n for x in range(n + 1)]))
# 办法二
res = sum(map(lambda x: 1/2**x, range(int(input(">>>")))))
print(res)15.求 1**2 + 2**2 + 3**2 + ... 9**2 的和res = sum(map(lambda x: x**2, range(10)))
print(res)16.求 1**9 + 2**8 + 3**7 + ... 9**1 的和# 办法一
print(sum(map(lambda x, y: x**y, range(1, 10), range(9, 0, -1))))
# 办法二
print(sum(map(pow, range(1, 10)), range(9, 0, -1)))
17.编写函数 myfac(x) 计算x的阶乘 x! 例如:5! = 5 * 4 * 3 * 2 * 1# 匿名函数和递归嵌套运用
fx = lambda x: 1 if x == 1 else x * fx(x - 1)
print(fx(5)) # 120
18.写程序算出1~20的阶乘的和 1! + 2! + 3! + .... + 19! + 20!# 匿名函数和递归嵌套运用
fx = lambda x: 1 if x == 1 else x*fx(x - 1)
print(sum(map(fx, range(1, 21)))) # 2561327494111820313
19.已知有列表 = [[3,5,8], 10, [[13, 14], 15], 18]# 1) 写一个函数 print_list(lst) 打印出列表中所有数字
L = [[3,5,8], 10, [[13, 14], 15], 18]
def print_list(lst):
for i in lst:
if type(i) is list:
print_list(i)
else:
print(i)
print_list(L)
# 2) 写一个函数sum_list(lst) 返回列表中所有数字的和
L = [[3,5,8], 10, [[13, 14], 15], 18]
def sum_list(lst):
s = 0
for i in lst:
if type(i) is list:
s += sum_list(i)
else:
s += i
return s
print(sum_list(L)) # 86
20.输入一个圆的半径打印出这个圆的面积,输入一个圆的面积打印出这个圆的半径,用math模块实现import math
print(math.pi * math.pow(int(input("r:")), 2))
print(math.sqrt(int(input("area:"))/math.pi)) # math.sqrt 求平方根
21.请编写函数 fun(n) 其功能是计算和 Sn = 1 + 1/1! + 1/2! + 1/3! + 1/4! +... +1/n!import math
# 办法一
def fun(n):
s = 0
for i in range(n+1):
s += 1/math.factorial(i) # math.factorial(i) 求i的阶乘 i!
print(s)
fun(10) # 2.7182818011463845
# 办法二
def func(n):
return sum(map(lambda i: 1/math.factorial(i), range(n+1)))
print(func(10)) # 2.7182818011463845
22.编写函数 fun(x, n) 计算s = 1 + x + x**2/2! + x**3/3! + x**n/n!的和并返回import math
def fun(x, n):
returnsum(map(lambda n: math.pow(x, n)/math.factorial(n), range(n)))
print(fun(3.1, 10)) # 22.1668536447133
23.写一个程序,以电子时钟的格式表示时间:HH:MM:SSimport time
def show_time():
while True:
t = localtime() # 年 月 日 时 分 秒 星期 一年中的第几天 夏令时
s = "\r%02d:%02d:%02d" % t[3:6] # \r 回车后的光标位置
print(s, end=)
time.sleep(1)
show_time()24.输入你的生日,计算出你出生的那天是星期几?已然出生了多少天?import time
y = int(input("输入出生的年:"))
m = int(input("输入出生的月:"))
d = int(input("输入出生的日:"))
t = time.mktime((y, m, d, 0, 0, 0, 0, 0, 0))
print("UTC时间的秒数:", t)
time_tuple = time.localtime(t)
week = time_tuple[6]
L = [星期一,
星期二,
星期三,
星期四,
星期五,
星期六,
星期日]
print("这一天是:", L[week])
t = time.time() - t # 从生日到此刻过了多少秒
d = t / (60 * 60 * 24) # t / 一天的秒数
print("您已出生", d, "天")25.能够做为秘码的字符有:体积写的A-Z,0_9,下划线,写一个程序随机生成六位秘码import random
def get_random_passwd(n):
source = [chr(x) for x in range(ord("a"), ord("z")+1)]
source += [chr(x) for x in range(ord("A"), ord("Z")+1)]
source += [str(x) for x in range(10)]
code = ""
while len(code) < n:
code += random.choice(source)
return code
print(get_random_passwd(6))26.编写一个闹钟程序,起步时设置按时时间(小时和分钟),到时间后打印"时间到....." 而后退出程序import timedefalarm():
h = int(input("请输入小时: "))
m = int(input("请输入分钟: "))
while True:
ct = time.localtime() # 当前时间的元组
if (h, m) == ct[3:5]:
print("\n时间到...")
return
print("\r%02d:%02d:%02d" % ct[3:6], end=)
time.sleep(1)
# 起步闹钟
alarm()27.模拟斗地主发牌,扑克牌共54张,三个人,每人发17张牌,底牌留三张花色:黑桃(\u2660), 梅花(\u2663), 方块(\u2665), 红桃(\u2666)
数值:A2-10JQK 体积王
输入回车,打印第1个人的17张牌,输入回车,打印第2个人的17张牌
输入回车,打印第3个人的17张牌,再输入回车,打印出三张底牌
import random
def get_new_poker():
kinds = [\u2660, \u2663, \u2665, \u2666]
numbers = [A]
numbers += [str(x) for x in range(2, 11)]
numbers += [J, Q, K]
# 以下生成52张牌
L = [k + n for k in kinds for n innumbers]
L += [大王, 小王]
return L
def play():
poker = get_new_poker()
random.shuffle(poker)
input("按任意键发第1个人的牌: ")
print("第1个人的牌是:", poker[:17])
input("按任意键发第二个人的牌: ")
print("第二个人的牌是:", poker[17:34])
input("按任意键发第三个人的牌: ")
print("第三个人的牌是:", poker[34:51])
input("按任意键看底牌: ")
print("底牌是:", poker[51:])
play()28.写函数get_score来获取输入的学生成绩(0~100的整数),显现错误则返回0,输入正确返回这个数def get_score():
try:
score = int(input("请输入成绩:"))
except ValueError:
return 0
if score in range(101):
return score
return 0
score = get_score()
print(学生的成绩是:, score)29.一个球从100米高度落下,每次落地后反弹高度为原高度的一半,再落下1) 写程序算出皮球从第10次落地后反弹高度是多少?
2) 球共经太多少米路径?
def fall_height(m, n, s=0):
s += m
if n == 0:
return m, s
return fall_height(m / 2, n - 1, s)
ret = fall_height(100, 10)
print("最后落地后反弹高度是%s 球共经过%s米" % ret)30.输入一个正整数,分解质因数,如90 = 2*3*3*5, (质因数指的是最小能被原数整除的素数(不包括1))def primefactor(n, lst, pf_lst):
for i in lst:
if n % i == 0:
pf_lst.append(i)
# 递归加入分解得到的质因数[2, 2, 3, 5]
return primefactor(n / i, lst, pf_lst)
def qualty(n):
qualty_lst = [2]
# 拿到少于n的素数列表 qualty_lst
for i in range(2, n//4+1): # 最小分解质因数是4= 2*2, 优化算法n//4+1
for j in range(2, i):
if i % j == 0:
break
if i - j == 1:
qualty_lst.append(i)
# 循环加入90//2 +1 以内的质素
# [2, 3, 5, 7, 11, 13, 17, 19, 23]
pf_lst = []
# 拿到少于n的分解质因数递归返回列表 pf_lst
primefactor(n, qualty_lst, pf_lst)
s = ""
# 格式化输出
for i in pf_lst:
s += str(i)
s = "%s = " % n + "*".join(s)
print(s)
qualty(90)
31.已知s = {"工商银行", "建设银行", "中国银行", "农业银行"}# 1.用for 语句遍历集合中的元素并打印
# 2.将上面的for 语句改写为while语句实现上面一样的功能
s = {"工商银行", "建设银行", "中国银行", "农业银行"}
for i ins:
print(i)
t = iter(s)try:
while True:
print(next(t))
except Exception:
pass
32.写入一个生成器函数, myodd(start, stop) 用于生成start起始到stop结束(不包括stop)的所有奇数def myodd(start, stop):
while start < stop:
if start % 2 != 0:
yield start
if start < stop:
start += 1
for i in myodd(1, 100):
print(i)
L = [x for x in myodd(1, 100)]
print(L)33.写一个程序,读入任意行的文字数据,当输入空行时结束输入,打印带有行号的输入结果L = []
while True:
s = input("请输入: ")
if not s:
break
L.append(s)
for t in enumerate(L, 1): # t= (0, "hello")
print("第%d行: %s" % t)34.用生成器函数生成斐波那契数列的前n个数:1 1 2 3 5 8 13 ... n# 1) 输出前 20 个数
# 2) 求前 30 个数的和
def fibonacci(n):
a = 0
b = 1
for i in range(1, n+1):
a, b = b, a + b
yield a
for i in fibonacci(20):
print(i)
print(sum(fibonacci(30)))
35.写程序打印杨辉三角(只打印6层)
1 0+1
1 1 0+1 1+0
1 2 1 0+1 1+1 1+0
1 3 3 1 0+1 1+2 2+1 1+0
1 4 6 4 1
1 5 10 10 5 1
def triangle(n):
L = []
if not L:
L.append(1)
yield L
for i in range(n-1):
R = []
for i in range(len(L)-1):
R.append(L[i]+L[i+1])
L = [1] + R + [1]
yield L
for i in triangle(6):
s=for j in i:
s += str(j) +
print(s.center(13))
36.将如下数据用文本编辑器写入到data.txt文件中"""
小张 13888888888
小李 13999999999
小赵 13666666666
写程序读取数据,打印出姓名和tel号码,格式如 姓名: 小张, tel: 13888888888
"""
def read_data():
try:
f = open("data.txt")
L = []
while True:
s = f.readline()
if nots:
f.close()return L
s = s.rstrip()
name, number = s.split(" ")
L.append((name, number))
except IOError:
print("打开文件失败")
def read_lst(L):
for line in L:
print("姓名:%s, tel:%s" % line)
def main():
L = read_data()
read_lst(L)
main()37.读入任意行的文字信息,当输入空行时结束输入,将读入的字符串存于列表写入文件 input.txt 中def read_input():
L = []
while True:
s = input("请输入: ")
if not s:
break
L.append(s)
return L
def write_input(L):
try:
# 打开文件
f = open("input.txt", w)
# 写入数据
for line in L:
f.write(line)
f.write(\n) # 写入换行符(\n, \r\n)
# 关闭文件
f.close()
except IOError:
print("写文件失败")
def main():lst = read_input()
print(lst)
write_input(lst)
main()38.从input.txt中读取之前输入的数据存入列表中,再加上行号进行打印表示,如 第1行: aaaadef read_input_file(filename=input.txt):
f = open(filename)
L = []
while True:
# 读取每一行数据
s = f.readline()
if not s:
break
# 把换行符\n去掉
s = s.rstrip()
L.append(s) # 放入列表
f.close() # 关闭文件
# 返回L绑定的列表
return L
def print_file_info(L):
forlinein enumerate(L, 1):
print("第%d行: %s" % line)
def main():
lst = read_input_file()
print(lst)
print_file_info(lst)
main()39.用装饰器实现用户验证user_list = [
{"name": "coco", "passwd": 123},
{"name": "zhangsan", "passwd": 123},
{"name": "lisi", "passwd": 123},
{"name": "wangwu", "passwd": 123}
] # 定义一个列表存储用户数据源
current_dic = {"username": None, "login": False} # 记录用户登录状态
def auth(auth_type="MySQL.db"): # 留给用户传递数据源自
def auth_func(func):
def wrapper(*args, **kwargs):
print("数据库源自是: %s" % auth_type)
if auth_type == user_list:
if current_dic["username"] and current_dic["login"]:
res = func(*args, **kwargs)return res
username = input("请输入账号:").strip()
passwd = int(input("请输入秘码:").strip())
for user_dic in user_list:
if username == user_dic["name"] andpasswd ==user_dic["passwd"]:
current_dic["username"] = username
current_dic["login"] = True
ret = func(*args, **kwargs)
return ret
else:
print("账号或秘码不正确")
else:
print("请指定源数据库")
return wrapper
return auth_func
def index():
print("欢迎来到主页")
@auth(auth_type=user_list)
def home(name):
print("欢迎回家%s" %name)
@auth()
def shopping(name):
print("%s的购物车里有[手机,外星人,Mac]" %name)
index()
home("coco")
shopping("coco")49.学生信息管理项目必须两个函数:
input_student() 返回学生信息的字典的列表
output_student(lst) 以表格式方打印学生信息
学生信息:
姓名(name) 字符串
年龄(age) 整数
成绩(score) 整数
input_student()调用时等待用户输入学生信息,当输入姓名为空时结束输入形成字典后存如列表中返回
L = input_student()
请输入学生姓名: xiaozhang
请输入学生年龄: 20
请输入学生成绩: 98
请输入学生姓名: xiaoli
请输入学生年龄: 23
请输入学生成绩: 100
请输入学生姓名: <回车>输入结束
此时列表数据为:
L = [{name:xiaozhang,
age:20,
score: 98},
{name:xiaoli,
age:23,
score: 100}
]
def output_student(lst):pass
print(L) # 打印出字典的列表
output_student(L) # 打印出学生信息的表格如下:
+-----------+--------+---------+
| name | age | score |
+-----------+--------+---------+
| xiaozhang | 20 | 98 |
| xiaoli | 23 | 100 |
+-----------+--------+---------+
def input_student():
L = []
while True:
name = input("请输入学生姓名:") or -1
if name == -1:
break
age = int(input("请输入学生年龄:"))
score = int(input("请输入学生成绩:"))
L.append({name: name,
age: age,
score: score
})
return L
def head(length):
s = +%s+%s+%s+ % (- * (length), -*5, -*7)
print(s)
def body(length, *args):
s = (|%s|%s|%s| %
(args[0].center(length), str(args[1]).center(5), str(args[2]).center(7)))
print(s)
def output_student(lst):
length = max(map(lambda x: len(x[name]), lst)) + 2
head(length) # 起始表格线+------+-----+-------+body(length, name, age, score) # 抬头行| name | age | score |
head(length) # 分割表格线+------+-----+-------+
for i in lst:
info = (i[name], i[age], i[score])
body(length, *info) # 内容
head(length) # 结束表格线+------+-----+-------+
L = input_student()
print(L)
# [{name: coco, age: 18, score: 100}, {name: gogo, age: 17, score: 60}]
output_student(L)
41.改写学生信息管理项目源码,需求带有操作界面+--------------------------------+ # show_menu() 表示功能选取菜单
| 1) 添加学生信息 | # input_student()
| 2) 表示所有学生的信息 | # output_student() 可做为筛选的嵌套调用
| 3) 删除学生信息 | # delete_student()
| 4) 修改学生成绩 | # modify_student()
| 5) 按学生成绩高-低表示学生信息 | # desc_score() 4种排序并一个函数sort_student()
| 6) 按学生成绩低-高表示学生信息 | # asc_score()
| 7) 按学生年龄高-低表示学生信息 | # desc_age()
| 8) 按学生年龄低-高表示学生信息 | # asc_age()
| 9) 保留学生信息到文件(si.txt) | # write_file()
| 10) 从文件中读取数据(si.txt) | # read_file()
| q) 退出 | # quit()
+--------------------------------+
# 表示功能选取菜单
def show_menu(lst):
# 表示菜单
show_list = [
+--------------------------------+,
1) 添加学生信息,
2) 表示所有学生的信息,
3) 删除学生信息,
4) 修改学生成绩,
5) 按学生成绩高-低表示学生信息,
6) 按学生成绩低-高表示学生信息,
7) 按学生年龄高-低表示学生信息,
8) 按学生年龄低-高表示学生信息,
9) 保留学生信息到文件(si.txt),
10) 从文件中读取数据(si.txt),
q) 退出,
+--------------------------------+
]
for row in show_list:
print(row)
# 选取菜单
menu_dic = {
1: input_student, # 添加
2: output_student, # 表示
3: delete_student, # 删除
4: modify_student,# 修改
5: sort_student, # 排序
6: sort_student,
7: sort_student,
8: sort_student,
9: write_file, # 保留学生数据
10: read_file, # 读取学生数据
q: quit # 退出
}
# 选取功能choice = input(>>>) or -1
if choice in menu_dic:
if choice == 6:
menu_dic[choice](lst, desc=False)
elif choice == 7:
menu_dic[choice](lst, basis=age)
elifchoice ==8:
menu_dic[choice](lst, basis=age, desc=False)
else:
menu_dic[choice](lst)
else:
print("输入有误,请从新选取")
# 1.添加学生信息
def input_student(lst):
while True:
name = input("请输入学生姓名:") or -1
if name == -1: break
age = input("请输入学生年龄:")
score = input("请输入学生成绩:")
lst.append({name: name,
age: age,
score: score
})
# 2.表示所有学生信息
def output_student(lst):
def head(length):
s = +%s+%s+%s+ % (- * (length), - * 5, - * 7)
print(s)
def body(length, *args):
s = |%s|%s|%s| % (args[0].center(length), args[1].center(5), args[2].center(7))
print(s)
if lst:
length = max(map(lambda x: len(x[name]), lst)) + 2head(length)# 起始表格线+------+-----+-------+
body(length, name, age, score) # 抬头行| name | age | score |
head(length) # 分割表格线+------+-----+-------+
for i in lst:
info = (i[name], i[age], i[score])
body(length, *info) # 内容
head(length) # 结束表格线+------+-----+-------+
else:
print("无学生信息,请选取: 1)添加学生信息")
# 3.删除学生信息
def delete_student(lst):
choice = input("请输入要删除学生的姓名:") or -1
sign = False
for i, item in enumerate(lst):
if choice == item[name]:
sign = True
break
else:
print("你要删除的学生不存在")
if sign:
lst.pop(i)
print("已删除学生:%s的信息" % choice)
# 修改学生成绩
def modify_student(lst):
choice = input("请输入要修改学生的姓名:") or -1
for item in lst:
ifchoice == item[name]:
temp_list = [item]
output_student(temp_list)
score = input("请输入新的成绩:") or -1
item[score] = score
print("已修改学生:%s的成绩"% choice)break
else:
print("你要修改成绩的学生不存在")
# 排序-->按选取的要求排序列表后,做为实参传递给表示函数output_student(lst)
def sort_student(lst, basis=score, desc=True): # 默认按年龄大到小lst = sorted(lst, key=lambda dic: int(dic[basis]), reverse=desc)
output_student(lst)
# 保留学生信息
def write_file(lst, file="si.txt"):
try:
f = open(file, "w")for i in lst:
s = "%s,%s,%s\n" % (i[name], i[age], i[score])
f.write(s)
f.flush()
f.close()
print("已成功保留学生信息到[%s]文件" % file)
exceptIOError:
print("文件打开失败")
# 读取学生信息
def read_file(lst, file="si.txt"):
try:
f = open(file)
while True:
s = f.readline()
if not s:
f.close()
breaks = s.rstrip()
s = s.split(",")
dic = {name: s[0], age: s[1], score: s[2]}
lst.append(dic)
print("已成功从文件:[%s]读取到学生信息" % file)
exceptIOError:
print("文件打开失败")
def main():
"""学生信息管理项目主规律入口"""
while True:
show_menu(L)
if __name__ == "__main__":
L = []
main()
|
上一篇:光伏系统中有必要安装防逆流电表吗?装在哪里?下一篇:Python第123题:计算直角三角形底边斜边【PythonTip题库300题】
|