Python环境下不运用定义函数打印菱形、九九乘法表的几种方法
2019-03-31 21:43
597 查看
版权声明:fatcat https://blog.csdn.net/FatTigerx/article/details/88933684
写在前面的话:
在大家日常工作中,可能运用不到这些技巧,但是请你把这篇博客就当做给繁重工作之余的小乐去吧233:)
打印九九乘法表
方法举例
in: for i in range(1,10): line='' for j in range(1,10): if i >= j : line+=str(j)+'*'+str(i)+'='+ str(i+j)+' ' print(line)
我们来输出一下:
out: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
现在我们用最简单的两个for循环得到了一个九九乘法表,那我们是否能做一些优化呢?让我们看看下面这个。
in: for i in range(1,10): line='' for j in range(1,10): if i >= j: line+='{}*{}={} '.format(i,j,i*j) print(line)
- 字符串的格式化是一种拼接字符串输出样式的手段,更灵活方便。
- 占位符:使用%和格式字符组成,例如%s、%d等
- s调用str(),r会调用repr()。所有对象都可以被这两个转换
- format % values ,格式字符串和被格式的值之间使用%分隔
- values只能是一个对象,或是一个与格式字符串占位符数目相等的元组,或一个字典
format函数格式字符串语法——Python鼓励使用
- “ {}{xxx}”.format(*args,**kwargs)-> str
- args是可变位置参数,是一个元组
- kwargs是可变关键字参数,是一个字典
- 花括号表示占位符
- {}表示按照顺序匹配位置参数,{n}表示取值位置索引参数为n的值
- {xxx}表示在关键字参数中搜索名称一致的
- {{}}表示打印花括号
运用字符串格式化的方法,我们优化了这段代码,使其看起来更美观更加。那么我们是否还有可以优化的地方?
in: for i in range(1, 10): line = '' for j in range(1, i+1): # j [1, i+1) 1 <= j <= i line += "{}*{}={} ".format(j,i,i*j) print(line) for i in range(1, 10): for j in range(1, i+1): print("{}*{}={} ".format(j,i,i*j), end='') if i == j: print() for i in range(1, 10): for j in range(1, i+1): if i == j: endchar = '\n' else: endchar = '' print("{}*{}={} ".format(j,i,i*j), end=endchar) for i in range(1, 10): for j in range(1, i+1): endchar = '\n' if i == j else '' print("{}*{}={} ".format(j,i,i*j), end=endchar) for i in range(1, 10): for j in range(1, i+1): print("{}*{}={} ".format(j,i,i*j), end='\n' if i == j else '') print(*line, sep=' ')
通过上面的努力,我们不断运用了多种多样的方式来美化格式,比如\n, end=’ ’ ,还有三元表达式的使用等。可以说方法是多种多样的。但是我们在注重格式的同时也要关心一下输出的表现情况。
out: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
我们可以看到,在3*3开始格式就对不齐了,那下面我们就来想办法将其格式对其。
in: for i in range(1,10): for j in range(1,i+1): print('{}*{}={}{}'.format(i,j,i*j,' ' if j==2 and i<5 else ''), end='\n' if i==j else ' ')
我们输出看一下结果
out: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
我们发现现在结果排列的很整齐。我们通过三元表达式,在结果开始变歪的地方加几个空格进行调整,那么还有没有别的调整方式呢?
in: for i in range(1, 10): for j in range(1, i+1): print("{}*{}={:<2}".format(j,i,i*j), end='\n' if i == j else ' ') for i in range(1, 10): for j in range(1, i+1): print("{}*{}={}".format(j,i,i*j), end='\n' if i == j else '\t') for i in range(1, 10): for j in range(1, i+1): product = i * j print("{}*{}={}{}".format(j,i,product,' ' if j>1 and product < 10 else ''), end='\n' if i == j else ' ') for i in range(1, 10): for j in range(1, i+1): product = i * j print("{}*{}={:<{}}".format(j,i,product,2 if j>1 and product < 10 else 1), end='\n' if i == j else ' ')
可以见到,我们有多重多样的方法来调整格式,但是思路就是找到不齐的地方,寻找与其他地方的不同点,然后运用自身所学的知识来进行相应调整。那么你是否能打印出下面的图形呢?
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*6=36 6*7=42 6*8=48 6*9=54 7*7=49 7*8=56 7*9=63 8*8=64 8*9=72 9*9=81
打印菱形
方法举例
一上来就打印菱形的话,可能大家都要先琢磨一下,那我们先想一个非常简单的,打印一个边长为3的正方形
in: n=3 #边长为3的正方形 flag=True count=0 while flag: print('* '*n) count+=1 if count == n: break out: * * * * * * * * * #思考如何打印出下图菱形? * *** ***** ******* ***** *** *
其实打印菱形的方法有很多种,关键是对变量的分析,找到哪几个变量是不断变化的,他们中间有什么联系,实在想不出的话不妨拿起笔来,在纸上写写伪代码。下面我们就来介绍几种方法:
in: n=7 #假设菱形的最长一行的长度为7 e=n//2 for i in range(-e,n-e): if i<0: 1a4bc i=-i print(' '*i+'*'*(n-2*i)) out: * *** ***** ******* ***** *** *
那我们接着来看看还有什么方法能够解决这个问题:
n = 7 e = n // 2 for i in range(-e, n-e): print(' ' * abs(i) + '*' * (n - 2 * abs(i)) n = 11 e = n // 2 for i in range(-e, n-e): print("{:^{}}".format('*' * (n - 2 * abs(i)), n))
那么你是否能打出下面这些图形呢?
******* ***** *** * *** ***** ******* * ** *** **** ********* **** *** ** *
相关文章推荐
- 使用Python3 打印九九乘法表的几种方法
- C++定义比较函数的几种方法
- python函数—定义参数的几种方式
- python 类的几种方法(函数)
- java script 函数定义几种常见方法
- Python OOP类中的几种函数或方法总结
- 两种使用python打印菱形的方法
- Python - 不固定参数函数的定义,四种参数传递方法总结
- python中函数参数传递的几种方法
- Python练习-函数(方法)的定义和应用
- 对python字符串操作的几种方法(函数)
- C语言打印菱形的几种方法
- 利用python打印出菱形、三角形以及矩形的方法实例
- python中函数参数传递的几种方法
- C++定义比较函数的几种方法
- scala函数定义的几种方法
- js 定义函数的几种方法 以及如何调用
- 【Javascript 拾遗之五】定义函数的几种方法
- python 九九乘法表 和 两种方法打印闪电标志
- python和php的基本数据类型的定义赋值及常用方法函数