天涯论坛

 找回密码
 立即注册
搜索
查看: 52|回复: 2

Python语法示例——函数

[复制链接]

3048

主题

119

回帖

9915万

积分

论坛元老

Rank: 8Rank: 8

积分
99159056
发表于 2024-8-18 05:28:41 | 显示全部楼层 |阅读模式

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,否则返回False

fx = 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:SS

import 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行: aaaa

def 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题】
回复

使用道具 举报

0

主题

1万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-8-27 04:42:59 | 显示全部楼层
你的话深深触动了我,仿佛说出了我心里的声音。
回复

使用道具 举报

3123

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99108625
发表于 2024-10-17 17:28:28 | 显示全部楼层
“板凳”(第三个回帖的人)‌
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 05:51 , Processed in 0.162259 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.