您的位置:首页 > 编程语言 > Python开发

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))

那么你是否能打出下面这些图形呢?

*******
*****
***
*
***
*****
*******

*
**
***
****
*********
****
***
**
*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: