答:太没创意,再见!

面试官:壮士留步!帮我看看这位保安兄弟写的如何?他有没有理解For语句的用法?能不能使用range生成想要的序列?有没有合理地接接字符串? #自制五笔#

回去等通知的写法

起初,我写的乘法口诀是这样的:

1
2
3
4
5
6
7
8
9
print('1*1=1')
print('1*2=2 2*2=4')
print('1*3=3 2*3=6 3*3=9')
print('1*4=4 2*4=8 3*4=12 4*4=16')
print('1*5=5 2*5=10 3*5=15 4*5=20 5*5=25')
print('1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36')
print('1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49')
print('1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64')
print('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')

再后来,我点了左上角头像,关注了一位叫学边成的人,他领我慢慢入门了编程,学会了写代码。才发现,原来当年面试10次被拒的原因居然是不会写乘法口诀表。

range()函数的用法

range()函数,用来生成一个可迭代的对象,可以使用list()方法转化成一个列表,打开Anaconda Prompt,输入python进入python的shell环境:

在python的shell环境中可以直接尝试range的用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

#只带一个参数的range返回从0开头的range对象,不包含参数:range(10) --> [0,10)
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#两个参数的range返回从第一个参数开头,到第二个参数结束的可迭代对象:range(1,11) --> [1,11)
>>> list(range(1,11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#三个参数的range返回从以第一个参数开头,到第二个参数结束(不包含),以第三个参数为步进值的range对象
>>> list(range(1,11,2))
[1, 3, 5, 7, 9]
>>> list(range(1,100,5))
[1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91, 96]
>>> list(range(0,100,5))
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
>>> list(range(0,101,5))
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]

那么,乘法口诀表只需要[1,9]的序列就可以了,可以使用range(1,10)来生成。

for语句

python的for语句也很好理解,基本的句式是:

1
2
3
for 苹果 in 一框苹果:
    吃一口苹果
    不甜,扔掉

注意,苹果in一框苹果:(冒号)、第二行的缩进,都是必须遵守这种格式的,才算一个完整的for语句。比如,输出1到9的数字:

1
2
3
4
5
6
7
8
9
10
11
12
>>> for i in range(1, 10):
... print(i)
...
1
2
3
4
5
6
7
8
9

再比如,使用for语句循环输入一个字符串的每一个字符:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> for str in '为什么没人看我写的文章,why!':
... print(str)
...











,
w
h
y
!

能看到这里,证明你这位看官是非常聪明好学的,心里一定在想着有了for语句之后,怎样给面试官写出乘法口诀表吧?接下来,咱就使用两个嵌套的for语句来实现乘法口诀表的输出。

明天来上班的写法

pycharm中新建一个cheng_fa_kou_jue.py的文件,先定义一个叫jiujiu的函数,在里面先打印出1-9的数字再说:

1
2
3
4
5
6
def jiujiu():
for x in range(1,10):
print(x)

if __name__ == '__main__':
jiujiu()

看过盗梦空间的看官应该知道,假设我们现在进入了第一层梦境,任务是用x分别代表1到9,去找别外一个数来相乘。

而到目前为止,另外一个数,咱给它叫y,还没有定义出来,就定义成y=1,先试试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def jiujiu():
for x in range(1,10):
y = 1
print('%dx%d=%d' % (x, y, x*y))
#输出
1x1=1
2x1=2
3x1=3
4x1=4
5x1=5
6x1=6
7x1=7
8x1=8
9x1=9

看起来不错,在y=1的时候,顺利输出了9行乘法口诀。接下来,如果在x还是1的时候,我们用y进入x的主场梦境,在第二层梦境中y依次代表1-9,与x相乘,得到想输出的口决。在y值依次迭代的过程中,不需要每个乘式都输出为一行,而是用\t制表符来结束。在第二层梦境结束后,x开始继续下一次任务的时候换行即可。现在,就将x做为主场,再进一层梦境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def jiujiu():
for x in range(1,10):
# x迭代1次之后,y开始以x为主场进入第二层迭代
for y in range(1,10):
print('%dx%d=%d' % (x, y, x*y), end='\t')
print()
#输出
1x1=1 1x2=2 1x3=3 1x4=4 1x5=5 1x6=6 1x7=7 1x8=8 1x9=9
2x1=2 2x2=4 2x3=6 2x4=8 2x5=10 2x6=12 2x7=14 2x8=16 2x9=18
3x1=3 3x2=6 3x3=9 3x4=12 3x5=15 3x6=18 3x7=21 3x8=24 3x9=27
4x1=4 4x2=8 4x3=12 4x4=16 4x5=20 4x6=24 4x7=28 4x8=32 4x9=36
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 5x6=30 5x7=35 5x8=40 5x9=45
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 6x7=42 6x8=48 6x9=54
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 7x8=56 7x9=63
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 8x9=72
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

观察输出,结果是一个方的,还重复了一半的数据。聪明的你一定想到,如果y能在第二层梦境中以x当前的值为参照的话,不从1到9,而是从1到x的话,就避免了不必要的重复了,小改一下y对应的range数值即可,输出的时候再将y放在前面,比较美观,修改第4、5行如下:

1
2
3
4
5
6
7
8
9
10
11
12
for y in range(1, x+1):
print('%dx%d=%d' % (y, x, x*y), end='\t')
#输出:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

齐活,完整代码如下:

1
2
3
4
5
6
7
8
9
def jiujiu():
for x in range(1,10):
# x迭代1次之后,y开始以x为主场进入第二层迭代
for y in range(1, x+1):
print('%dx%d=%d' % (y, x, x*y), end='\t')
print()

if __name__ == '__main__':
jiujiu()

其实,我刚开始写的字符串拼接的是用+来完成的,像这样:

1
s += str(j) + 'x' + str(i) + '=' + str(i*j) + '\t

也算是等通知的一种写法,下篇再具体说说字符串的几种拼接方式。

5421181420

最后更新: 2020年04月01日 18:22

原始链接: https://nimeiz.gitee.io/notes/jiujiu-cheng-fa-biao/

× 愿我的文字带给你阳光
打赏二维码