面試官:請使用python打印出乘法口訣表-小白上樓梯0x07

答:太沒創意,再見!

面試官:壯士留步!幫我看看這位保安兄弟寫的如何?他有沒有理解For語句的用法

?能不能使用range生成想要的序列?有沒有合理地接接字符串?

### 回去等通知的寫法

起初,我寫的乘法口訣是這樣的:

```

<code>print('1*1=1')
print('1*2=2\t2*2=4')
print('1*3=3\t2*3=6\t3*3=9')
print('1*4=4\t2*4=8\t3*4=12\t4*4=16')
print('1*5=5\t2*5=10\t3*5=15\t4*5=20\t5*5=25')
print('1*6=6\t2*6=12\t3*6=18\t4*6=24\t5*6=30\t6*6=36')
print('1*7=7\t2*7=14\t3*7=21\t4*7=28\t5*7=35\t6*7=42\t7*7=49')
print('1*8=8\t2*8=16\t3*8=24\t4*8=32\t5*8=40\t6*8=48\t7*8=56\t8*8=64')
print('1*9=9\t2*9=18\t3*9=27\t4*9=36\t5*9=45\t6*9=54\t7*9=63\t8*9=72\t9*9=81')/<code>

```

面試官:請使用python打印出乘法口訣表-小白上樓梯0x07

厲害不厲害??


再後來,我點了左上角頭像,關注了一位叫學邊成的人,他領我慢慢入門了編程,學會了寫代碼。才發現,原來當年面試10次被拒的原因居然是不會寫乘法口訣表。

### range()函數的用法

`range()`函數,用來生成一個可迭代的對象,可以使用`list()`方法轉化成一個`列表`,打開`Anaconda Prompt`,輸入`python`進入python的shell環境:

在python的shell環境中可以直接嘗試range的用法:

```

<code>#只帶一個參數的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]/<code>

```

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

### for語句

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

```

<code>for 蘋果 in 一框蘋果:
    吃一口蘋果
    不甜,扔掉/<code>

```

注意,`蘋果`、`in`、`一框蘋果`、`:(冒號)`、第二行的縮進,都是必須遵守這種格式的,才算一個完整的for語句。比如,輸出1到9的數字:

```

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

```

再比如,使用for語句循環輸入一個字符串的每一個字符:

```

<code>>>> for str in 'hello,world':
... print(str)
...
h
e
l
l
o
,
w
o
r
l
d/<code>

```

能看到這裡,證明你這位看官是非常聰明好學的,心裡一定在想著有了for語句之後,怎樣給面試官寫出乘法口訣表吧?接下來,咱就使用兩個嵌套的for語句來實現乘法口訣表的輸出。

### 明天來上班的寫法

在`pycharm`中新建一個`cheng_fa_kou_jue.py`的文件,先定義一個叫`jiujiu`的函數,在裡面先打印出1-9的數字再說:

```

<code>def jiujiu():
for x in range(1,10):
print(x)

if __name__ == '__main__':
jiujiu()/<code>

```

看過盜夢空間的看官應該知道,假設我們現在進入了第一層夢境,任務是用`x`分別代表1到9,去找別外一個數來相乘。

而到目前為止,另外一個數,咱給它叫`y`,還沒有定義出來,就定義成`y=1`,先試試:

```

<code>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/<code>

```

看起來不錯,在`y=1`的時候,順利輸出了9行乘法口訣。接下來,如果在x還是1的時候,我們用y進入x的主場夢境,在第二層夢境中y依次代表1-9,與x相乘,得到想輸出的口決。在y值依次迭代的過程中,不需要每個乘式都輸出為一行,而是用`\\t`製表符來結束。在第二層夢境結束後,x開始繼續下一次任務的時候換行即可。現在,就將x做為主場,再進一層夢境:

```

<code>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\t1x2=2\t1x3=3\t1x4=4\t1x5=5\t1x6=6\t1x7=7\t1x8=8\t1x9=9\t
2x1=2\t2x2=4\t2x3=6\t2x4=8\t2x5=10\t2x6=12\t2x7=14\t2x8=16\t2x9=18\t
3x1=3\t3x2=6\t3x3=9\t3x4=12\t3x5=15\t3x6=18\t3x7=21\t3x8=24\t3x9=27\t
4x1=4\t4x2=8\t4x3=12\t4x4=16\t4x5=20\t4x6=24\t4x7=28\t4x8=32\t4x9=36\t
5x1=5\t5x2=10\t5x3=15\t5x4=20\t5x5=25\t5x6=30\t5x7=35\t5x8=40\t5x9=45\t
6x1=6\t6x2=12\t6x3=18\t6x4=24\t6x5=30\t6x6=36\t6x7=42\t6x8=48\t6x9=54\t
7x1=7\t7x2=14\t7x3=21\t7x4=28\t7x5=35\t7x6=42\t7x7=49\t7x8=56\t7x9=63\t
8x1=8\t8x2=16\t8x3=24\t8x4=32\t8x5=40\t8x6=48\t8x7=56\t8x8=64\t8x9=72\t
9x1=9\t9x2=18\t9x3=27\t9x4=36\t9x5=45\t9x6=54\t9x7=63\t9x8=72\t9x9=81/<code>

```

觀察輸出,結果是一個方的,還重複了一半的數據。聰明的你一定想到,如果y能在第二層夢境中以x當前的值為參照的話,不從1到9,而是從1到x的話,就避免了不必要的重複了,小改一下y對應的range數值即可,輸出的時候再將y放在前面,比較美觀,修改第4、5行如下:

```

<code>for y in range(1, x+1):
print('%dx%d=%d' % (y, x, x*y), end='\\t')
#輸出:
1x1=1\t
1x2=2\t2x2=4\t
1x3=3\t2x3=6\t3x3=9\t
1x4=4\t2x4=8\t3x4=12\t4x4=16\t
1x5=5\t2x5=10\t3x5=15\t4x5=20\t5x5=25\t
1x6=6\t2x6=12\t3x6=18\t4x6=24\t5x6=30\t6x6=36\t
1x7=7\t2x7=14\t3x7=21\t4x7=28\t5x7=35\t6x7=42\t7x7=49\t
1x8=8\t2x8=16\t3x8=24\t4x8=32\t5x8=40\t6x8=48\t7x8=56\t8x8=64\t

1x9=9\t2x9=18\t3x9=27\t4x9=36\t5x9=45\t6x9=54\t7x9=63\t8x9=72\t9x9=81/<code>

```

齊活,完整代碼如下:

```

<code>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()/<code>

```

其實,我剛開始寫的字符串拼接的是用`+`來完成的,像這樣:

```

<code>s += str(j) + 'x' + str(i) + '=' + str(i*j) + '\\t/<code>

```

也算是等通知的一種寫法,下篇再具體說說字符串的幾種拼接方式。


面試官:請使用python打印出乘法口訣表-小白上樓梯0x07

coding


關注學邊成,我們一起學編程。


PS:

算了,可能是因為我在最後放了一個倒序的時間點,說我

有誘導交易的推廣信息

我誘導你家的毛線闆闆。


分享到:


相關文章: