Program Arcade Games
With Python And PygameChapter 6: 回到循环
游戏通常会涉及到到许多复杂的循环。这是一个“充满挑战的章节”,来学着成为使用循环的专家。 如果你呢理解和掌握这一章的问题, 到章末你便可以认证自己已经是循环专家了。
如果成为循环专家并不是你的目标,只是你要保证能写出前八个问题的答案。 这样会给你足够的知识储备继续前进。(另外,成为循环专家并不能让你得到一个约会,除了那位土拨鼠电影中的住巨。)
在线有对答案的视频解释,并且答案代码是“动画化的”。 只需要点击 “step”按钮拉查看代码是如何执行的。
6.1 打印语句的终止字符
默认情况下, print语句会放置一个回车符,在打印出内容的结束出。 如我们在第一章所解释的,回车符会提示把下一行的输出打印到新的一行。 大多数时候这是我们想要的。有时候不是。如果我们想继续打印在相同的一行,我们可以更改打印语句末尾的默认符号。 这是一个更改前的例子:
print("Pink") print("Octopus")
...它会打印出:
Pink Octopus
但是如果我们想打印在同一行, 可以使用一个新的选项去设置end的字符。 例如:
print("Pink", end="") print("Octopus")
这会打印出:
PinkOctopus
我们也可以设置成一个空的字符串。
print("Pink", end=" ") print("Octopus")
T这回打印出:
Pink Octopus
这是另一个使用了变量的例子:
i = 0 print(i, end=" ") i = 1 print(i, end=" ")
这会打印出:
0 1
6.2 高级的循环习题
- 写一段代码,打印出10个星号(*),如下所示:
* * * * * * * * * *
可以使用for循环,打印出每颗单独的星号,而不是用一个print语句打印十个星号。 只需要两行代码:一个for循环和一个print语句。
如果你做出来了, 或者放弃了,答案在这里:
ProgramArcadeGames.com/chapters/06_back_to_looping/problem_1.php - 写一段代码,打印如下内容:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
这和之前的题目类似,只不过还需分别打印5颗和20颗星号。 复制和粘贴先前的代码,只需要对for循环稍加调整。
如果你做出来了, 或者放弃了,答案在这里:
ProgramArcadeGames.com/chapters/06_back_to_looping/problem_2.php - 使用两个for循环,一个嵌套在另一个之内,打印出如下的
10x10的矩形:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
首先,回顾下习题1。习题1的代码生成了一行星星。 只需要重复十次。 在看答案前先自己尝试至少10分钟哦。
如果你做出来了, 或者放弃了,答案在这里:
ProgramArcadeGames.com/chapters/06_back_to_looping/10x10box.php - 使用两个for循环,一个嵌套在另一个之内,打印出如下的
5x10矩形:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
这和前面一题非常相似。对循环的范围多次尝试,找到合适的range函数的传递参数。
如果你做出来了, 或者放弃了,答案在这里:
ProgramArcadeGames.com/chapters/06_back_to_looping/problem_4.php - 使用两个for循环,一个嵌套在另一个之内,打印出如下的
20x5的矩形:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
也和问题3和4一样,只是使用不同的范围。
如果你做出来了, 或者放弃了,答案在这里:
ProgramArcadeGames.com/chapters/06_back_to_looping/problem_5.php - 下一段代码,打印如下内容:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
使用两个嵌套的循环。用循环打印出第一行,而不是:
print("0 1 2 3 4 5 6 7 8 9")
提示: 首先,创造一个循环打印出第一行。然后再套上一个循环,重复10次。 使用i或者j变量来控制程序打印的内容。 这个例子和下面一个例子会有助于增强这些索引变量的理解。
在看答案之前至少花十分钟自己来试图完成。十分钟的思考过程远比答案本身重要。
ProgramArcadeGames.com/chapters/06_back_to_looping/number_square_answer.php - 调整之前的程序来打印如下内容:
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9
答案如下:
ProgramArcadeGames.com/chapters/06_back_to_looping/problem_7.php - 写一段代码,打印如下内容:
0 0 1 0 1 2 0 1 2 3 0 1 2 3 4 0 1 2 3 4 5 0 1 2 3 4 5 6 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8 9
提示: 这其实就是问题6,只不过内循环不再是一个固定的循环次数。不再使用range(10), 而是可更改的范围。
砸花了至少10分钟过后在 可以参看这里的答案:
ProgramArcadeGames.com/chapters/06_back_to_looping/top_right_triangle.php确保你能自己写出这题和上题的代码。 你的练习时间会在今后得到回报。
-
写一段代码,打印如下内容:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
这一题有点难。提示:在控制每一行的外循环之内需要两个循环 一个循环打印空格,另一个循环打印数字。 每一行都循环这两项内容。 首先,先试着用一个内熏画打印出如下的内容
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
一旦这个成功了,再在外循环开始之后、已经存在的内循环之前,添加一个循环。 用这个新的循环控制足够的空格来控制对齐。
在花了至少10分钟过后, 可以参看这里的答案:
ProgramArcadeGames.com/chapters/06_back_to_looping/bottom_left_triangle.php - 写一段代码,打印如下内容
(对齐是有难度的,至少先确保数字正确):
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
提示: 先调整问题1的代码来打印:
0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 0 2 4 6 8 10 12 14 16 18 0 3 6 9 12 15 18 21 24 27 0 4 8 12 16 20 24 28 32 36 0 5 10 15 20 25 30 35 40 45 0 6 12 18 24 30 36 42 48 54 0 7 14 21 28 35 42 49 56 63 0 8 16 24 32 40 48 56 64 72 0 9 18 27 36 45 54 63 72 81
然后进一步调整代码来打印:
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
最后,当打印的数字小于10的时候,使用一个if语句来打印空格。
在花了至少10分钟过后, 可以参看这里的答案:
ProgramArcadeGames.com/chapters/06_back_to_looping/multiplication_table.php - 写一段代码,打印如下内容:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
提示: 先写一段代码打印如下内容:
1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9
然后写代码打印出:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
最后添加空格来打印出最后的结果。
在花了至少10分钟过后, 可以参看这里的答案:
ProgramArcadeGames.com/chapters/06_back_to_looping/top_triangle.php - 写一段代码,打印如下内容:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1
这一题可以结合习题11和习题9。
在花了至少10分钟过后, 可以参看这里的答案:
ProgramArcadeGames.com/chapters/06_back_to_looping/three_quarters.php - 写一段代码,打印如下内容:
1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 6 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 3 2 1 1 2 3 2 1 1 2 1 1
在花了至少10分钟过后, 可以参看这里的答案:
ProgramArcadeGames.com/chapters/06_back_to_looping/full_diamond.php
6.3 复习
6.3.1 选择题小测验
Click here for a multiple-choice quiz.
6.3.2 练习表
Click here for the chapter worksheet.
6.3.3 实验
Click here for the chapter lab.
You are not logged in. Log in here and track your progress.
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin