函数参数习题
编写一个函数,能够接受至少2个参数,返回最小值 和最大值
import random def double_values(*nums): print(nums) return max(nums),min(nums) print(*double_values(*[random.randint(10,20) for _ in range(10)]))
(20, 16, 12, 12, 12, 17, 15, 17, 10, 13)
20 10
编写一个函数,接受一个参数n,n为正整数,左右两 种打印方式。要求数字必须对齐
#编写一个函数,接受参数n ,n为正整数,左右两种对齐打印方式,要求数字必须对齐。 ''' 1 6 5 4 3 2 1 2 1 5 4 3 2 1 3 2 1 4 3 2 1 4 3 2 1 3 2 1 5 4 3 2 1 2 1 6 5 4 3 2 1 1 ''' # NO 1 最基本的,打印空格方式 # 上三角 def triangle_print(n): for i in range(1, n+1): for j in range(n,0, -1): if i < j: print(' '* len(str(j)),end=' ')# 因为随着数字位数不同,宽度不同 # ‘12 ’ ‘100 ’ ‘1000 ’ else: print(j, end=' ') print() triangle_print(5) # 下三角 def triangle_print(n): for i in range(1, n+1): for j in range(1, n+1): if i > j: print(' ' * len(str(j)), end=' ') else: print(n+1-j, end=' ') print() triangle_print(7) # NO 2 使用对齐方式,问题是不知道最后一行多宽 # 思路是 九九乘法表,先都向左靠齐,在整体向右靠齐 # 上三角 def triangle_print(n): for i in range(1, n+1): s = '' for j in range(i, 0, -1): s += '{}{}'.format(j, ' ') print('{:>30}'.format(s)) # 这里的向右靠齐,宽度不能确定 triangle_print(10) # 下三角 def triangle_print(n): for i in range(1, n+1): s = '' for j in range(n+1-i, 0, -1): s += '{}{}'.format(j, ' ') print('{:>30}'.format(s)) # 这里的向右靠齐,宽度不能确定 triangle_print(10) # NO 3 基于第二种方法,考虑先打印最后一行,就知道向右靠齐多宽 # 上三角 def triangle_print(n): tail = ' ' + ' '.join([str(i) for i in range(n, 0, -1)]) width = len(tail) for i in range(1, n): s = '' for j in range(i, 0, -1): s += '{}{}'.format(j, ' ') print('{:>{}}'.format(s, width+1)) print(tail) triangle_print(15) # 优化: def triangle_print(n): tail = ' ' + ' '.join([str(i) for i in range(n, 0, -1)]) width = len(tail) for i in range(1, n): print('{:>{}}'.format(' '.join([str(j) for j in range(i, 0, -1)]),width)) print(tail) triangle_print(15) # 下三角 def triangle_print(n): tail = ' ' + ' '.join([str(i) for i in range(n, 0, -1)]) width = len(tail) print(tail) for i in range(1, n): print('{:>{}}'.format(' '.join([str(j) for j in range(n-i, 0, -1)]),width)) triangle_print(15) ''' 1 6 5 4 3 2 1 2 1 5 4 3 2 1 3 2 1 4 3 2 1 4 3 2 1 3 2 1 5 4 3 2 1 2 1 6 5 4 3 2 1 1 ''' # NO 5 基于上面的思路,发现,可以通过最后一行得到所有,而不用每一行都计算。也就是切片 # 上三角 def triangle_print(n): tail = ' '.join([str(i) for i in range(n, 0, -1)]) width = len(tail) step = 2 start = -1 points = {10 ** i for i in range(1,3)} for i in range(1, n+1): print('{:>{}}'.format(tail[start:],width)) # if len(str(i+1)) > 2: if i+1 in points: step += 1 start = start - step triangle_print(15) # 下三角 # 这个版本只能取到10 ,两位数超过两个,就出现问题,因为所有的step都按照2 来算了 def triangle_print(n): tail = ' '.join([str(i) for i in range(n, 0, -1)]) width = len(tail) print(width) print(tail) for i in range(n - 1, 0, -1):# 10,9 if len(str(i)) == 2: step = 3 if len(str(i)) == 1: step = 2 start = width - step * (n - i)# 9-2*1 print('{:>{}}'.format(tail[-start:],width)) triangle_print(10) # NO 6 ''' 1 6 5 4 3 2 1 2 1 5 4 3 2 1 3 2 1 4 3 2 1 4 3 2 1 3 2 1 5 4 3 2 1 2 1 6 5 4 3 2 1 1 ''' # 下三角 打印最后 一行,剩余的 遇到一个空格,就把之前的都化为空格,后面的打印,也是利用切片 def showtail(n): tail = ' '.join([str(i) for i in range(n, 0, -1)]) print(tail) for j in range(len(tail)): if tail[j] == ' ': print(' ' * j ,tail[j+1:]) showtail(15)
案例一:
def fn(n): lst = [ i for i in range(n,0,-1)] print(lst) c = len(str(n))-1 w1 = c+2 w2 = c+3 for i in range(n+1,1,-1): space = [' ' for i in range(i-2)] space.extend(lst[i-2:]) for i in range(-n,0): if i > -(10**c): print('{1:<{0}}'.format(w1,space[i]),end='') else: print('{1:<{0}}'.format(w2,space[i]),end='') else: print() fn(11)
运行结果:
[11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
11 10 9 8 7 6 5 4 3 2 1
案例变形1:
def fn(n): tail = " ".join((str(i) for i in range(n,0,-1))) print(tail) width = len(tail) for i in range(1,n): print("{:>{}}".format(" ".join([str(j) for j in range(i,0,-1)]),width)) print(tail) fn(11)
运行结果:
11 10 9 8 7 6 5 4 3 2 1 1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 5 4 3 2 1 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1 9 8 7 6 5 4 3 2 1 10 9 8 7 6 5 4 3 2 1 11 10 9 8 7 6 5 4 3 2 1
案例二:
def fn(n): lst = [ i for i in range(n,0,-1)] print(lst) c = len(str(n))-1 w1 = c+2 w2 = c+3 for i in range(n): nums = lst[i:] space = ['' for _ in range(i)] line = space.extend(nums) for i in range(-n,0): if i > -(10**c): print('{1:<{0}}'.format(w1,space[i]),end='') else: print('{1:<{0}}'.format(w2,space[i]),end='') else: print()
运行结果:
fn(11) [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1] 11 10 9 8 7 6 5 4 3 2 1 10 9 8 7 6 5 4 3 2 1 9 8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1 7 6 5 4 3 2 1 6 5 4 3 2 1 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1
案例变形:
def fn(n): tail = " ".join(str(i) for i in range(n,0,-1)) width = len(tail) for i in range(n,0,-1): print("{:>{}}".format(" ".join([str(j) for j in range(i,0,-1)]),width))
fn(11)
运行结果:
11 10 9 8 7 6 5 4 3 2 1 10 9 8 7 6 5 4 3 2 1 9 8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1 7 6 5 4 3 2 1 6 5 4 3 2 1 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现