最新消息:380元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

少儿编程|python|阿基米德与国王下棋的故事

Python 少儿编程 8478浏览 0评论

友情提示:380元/半年,儿童学编程,就上码丁实验室

有这样一个故事,说的是阿基米德与国王下棋,国王输了,国王问阿基米德要什么奖赏?阿基米德对国王说:“我只要在棋盘上第一格放一粒米,第二格放二粒,第三格放四粒,第四格放八粒,第五个格子放十六粒米…按这个方式放满整个棋盘就行。” 他们下的是国际象棋,有八八六十四个格子。

国王听了以后,不以为然,认为用不了多少粮食就可以打发他。可是算完以后,却是一个惊人的天文数字,整个国家的粮仓里的米都不够。

这到底是怎么回事,今天我们来研究一下:

阿基米德与国王下棋的故事

首先,我们来看看开始的几格是多少粒米。看格子1,2,3,4,5的米粒数:1,2,4,8,16。我们可以看出格子号与米粒数的关系是2的幂。

可以写成这样:2**0=1, 2**1=2, 2**2=4, 2**3=8, 2**4=16。那么最后一格的米粒数则为2**63。(注意:平时我们数数往往是从1开始,但是在程序里面往往是从0开始的。当然如果我们需要从1开始,是可以设定的。这里2**0恰好等于1,所以我们要从0开始。也就是程序里是从0数到63,而不是从1数到64。)

 

阿基米德与国王下棋的故事

 

顺便解释一下幂或叫乘方或叫几次方,请看,小黑板上在右上角写一个小小的数字,那是指数,下面那个数叫底数,这是数学里的写法,与Python不同。

 

阿基米德与国王下棋的故事

 

左边第一列是用乘法的形式,第二列是乘方或幂的数学表示方式,第三列是乘方或幂的Python的表示方式,最后是结果。

我们在Python中运行一下:

 

>>> 2**2

4

>>> 2**3

8

>>> 2**4

16

>>> 2**63

9223372036854775808

>>> 2**1

2

>>> 2**0

1

>>> 2*2

4

>>> 2*2*2

8

>>> 2

2

 

任何数的0次方都等于1。可以自己去试试其他的。

 

这道题是把64个格子都要放,再加起来的。在Python里面sum()就是用来求总和的。也就是1+2+4+8+16+……。

我们来看一个sum()运行的例子:

 

阿基米德与国王下棋的故事

 

我们再来看每一格按照规律放下去的情况,在Python中是这样的:

range后面的(64)也可以写成(0,64)。在Python中取值,按规定是从0起,取到63止,没有包括64,这是Python的规则。我们取的这个值就是下面的i。在下面这句for i in range(64):的程序中,i的值依次从0取到63,变了64次,得出2**i的64个结果。for是表示循环取值的命令。

 

阿基米德与国王下棋的故事

 

下面是运行后输出的结果,也就是每一格上要放的米粒数:

 

1

2

4

8

16

32

64

128

256

512

1024

2048

4096

8192

16384

32768

65536

131072

262144

524288

1048576

2097152

4194304

8388608

16777216

33554432

67108864

134217728

268435456

536870912

1073741824

2147483648

4294967296

8589934592

17179869184

34359738368

68719476736

137438953472

274877906944

549755813888

1099511627776

2199023255552

4398046511104

8796093022208

17592186044416

35184372088832

70368744177664

140737488355328

281474976710656

562949953421312

1125899906842624

2251799813685248

4503599627370496

9007199254740992

18014398509481984

36028797018963968

72057594037927936

144115188075855872

288230376151711744

576460752303423488

1152921504606846976

2305843009213693952

4611686018427387904

9223372036854775808

 

 

下面的写法是一次性求出总和:

 

阿基米德与国王下棋的故事

对比上面的两个程序格式,一个因为print(sum)是处于for的循环内,与上面的sum()左对齐。所以会反复打印输出。

另一个print(sum)已经跳出了循环,与for左对齐,即只求最后结果。所以,在Python书写的格式很重要。我们必须按Python规定的格式写程序。

最后再感觉一下for是起什么作用的,就是循环输出。在IDLE中输入下面的程序试试:

 

>>> for i in [3,4,5,6]:

print(i)

 

 

3

4

5

6

>>> for i in (3,4,5,6):

print(i)

 

 

3

4

5

6

>>> for i in range(6):

print(i)

 

 

0

1

2

3

4

5

>>> for x in range(0,6):

print(x)

 

 

0

1

2

3

4

5

>>> for a in range(10):

print(a*3)

 

 

0

3

6

9

12

15

18

21

24

27

>>> for a in range(0,10):

a += 5

print(a)

 

 

5

6

7

8

9

10

11

12

13

14

 

本课内容完。

您必须 登录 才能发表评论!