在Python中锻炼"if ... else"的好编程题有哪些?
有哪些好的编程练习可以帮助Python初学者学习“if ... else”这个结构呢?我想到了以下几个,你知道还有其他的吗?
- 找出三个数字中最大的和最小的。
- 给定一个日期(年、月、日),找出下一个日期。
大多数目标听众之前接触编程的机会不多,我希望能让他们习惯正确地思考“if ... else”(以及后面所有的内容)。
11 个回答
在我看来,if
语句在Python中是个挺有意思的话题。引入它的时候,我建议考虑一下这门语言的哲学。
大多数情况下,我不会把if
当作C++中的switch
来用。我更喜欢用一个函数字典。
我也尽量遵循“请求原谅比请求许可更简单”这个原则,更喜欢捕获异常。
我觉得你的例子应该考虑到这些。所以我不会用怪物游戏
或除以零
的例子。虽然实现起来可能有趣,但在我看来,这并不是很符合Python的风格。
我主要把if
当作一个过滤器来用。
如果你的目标是教这门语言的语法,我觉得不应该用任何复杂的算法作为例子。学习编程本身就是一个足够大的挑战。
所以我认为下面这种简单的例子就可以了。
class Song:
def __init__(self, title, year):
self.title = title
self.year = year
songs = [Song('Blackbird', 1968), Song('Penny Lane', 1967), Song('Jenny Wren', 2005)]
for song in songs:
if song.year < 1970:
print song.title, 'by the Beatles'
else:
print song.title, 'is not a Beatles song'
如果你打算展示列表推导式,这也可以是一个第一步。
songs = [Song('Blackbird', 1968), Song('Penny Lane', 1967), Song('Jenny Wren', 2005)]
print [song.title for song in songs if song.year<1970]
“判断某一年是否是闰年”这个想法几乎立刻就会浮现在脑海中。只要给他们一些规则,然后让他们自己去实践。
还有其他一些可能的选择(虽然不全是用if
语句):
- 猎杀Wumpus(这个可能需要你去谷歌一下,我这是在暴露年龄)。
- 经典的“在井字棋(圈圈叉叉)游戏中判断谁赢了”(如果不想用循环,你可以用八个
if
语句来做到这一点)。 - 尽快猜出一个1到100之间的数字(提示:高了,低了)。
如果只用if/else
语句,判断闰年是个不错的选择。你还可以考虑:
- 测试一个数字是否是3、5或7的倍数。
- 根据年龄判断某人是婴儿、幼儿、儿童、青少年、成年人还是老年人。
- 根据最终的百分制成绩计算等级A-F。
- 给定一个轮盘上的数字,判断它是红色/黑色、高/低和奇数/偶数。
- 给定一手黑杰克,检查是否合规或爆掉(这很好,因为J/Q/K都算作10)。你还可以判断是否要再抽一张牌(比如总分低于17时)。
这些只是你可以尝试的一小部分可能性。
对于我们这些编程多年的人来说,想象从零开始的感觉真的很难。我建议避免使用超过5行代码的内容。
你需要决定先讲哪些内容,比如用户输入、输出、条件判断(if)、否则(else)、循环(while、for)、文件输入输出等。
在讲解条件判断(IF)时,他们是否已经知道如何获取用户输入?如何打印输出?如何写一个FOR循环?如何对整数进行算术运算?如何判断一个数字是否能被另一个数字整除?
这些问题的答案会限制你在讲解条件判断时的例子。
我建议先讲输出、算术运算、FOR循环、整除(取模)、用户输入,然后再讲条件判断(IF)。
这样我就可以提出一些问题,比如
Print the first 100 odd numbers
Determine the factors of a number entered by the user
Play a number guessing game (User enters a guess, you print YES or Higher or Lower)