作业2: Python变量与控制流


在这一节中,我们将练习使用变量和控制流(while循环、if语句)在Python中进行编程。虽然我们已经离开了Karel,但while循环和其他控制流的工作原理与之前相同。本节的最后一个问题还将让你练习接受某些值的辅助函数——我们称这些值为参数!

🔍 代码追踪问题

这是一个代码追踪问题——在不运行代码的情况下检查代码。SENTINEL常量的作用是什么?四个变量(a、b、x、y)在while循环每次执行时是如何变化的?总的来说,这个程序在计算什么?

# 文件:mystery_calculation.py
# ----------------------------
# 你的任务是弄清楚这个程序做什么!

SENTINEL = -1

def main():
    a = int(input("请输入a的值:"))
    b = int(input("请输入b的值:"))
    x = int(input("请输入x的值:"))
    while x != SENTINEL:
        y = a * x + b
        print("当x = " + str(x) + "时,结果为 " + str(y))
        x = int(input("请输入x的值:"))
        

if __name__ == "__main__":
    main()

🐕 计算狗年龄

大家都知道我们的毛茸茸朋友衰老的速度与人类不同。编写一个程序,要求用户输入人类年龄,并使用"一年人类年龄等于七年狗年龄"的事实打印出相应的狗年龄。考虑为这个值定义一个常量DOG_YEARS_PER_HUMAN_YEAR。你可以假设用户输入的是整数年龄,但不一定是正数。如果不是正数,请打印错误消息。

你的程序应该持续要求用户输入人类年龄,直到用户输入0,此时程序应该结束。

📋 示例运行:
请输入人类年龄:-12
抱歉,请输入一个正数或输入0退出
请输入人类年龄:13
对应的狗年龄是 91
请输入人类年龄:0

🔢 寻找因数

编写一个程序,要求用户输入一个整数,然后逐个打印出该数字的所有因数。你的函数应该检查输入的数字是否大于0。程序应该持续要求用户输入数字,直到输入0(哨兵值the sentinel value:哨兵是在循环或迭代算法中用来标志终止条件的值。)为止。

使用一个名为print_factors(num)的辅助函数,该函数接受用户输入的数字num作为参数,并打印其所有因数。你可以在main()函数中进行输入验证(检查数字是否为负数或等于哨兵值),但一旦确定要分解这个数字,就调用辅助函数!

📋 示例运行:
请输入要分解因数的数字:-10
请输入一个正数
请输入要分解因数的数字:42
1
2
3
6
7
14
21
42
请输入要分解因数的数字:53
1
53
请输入要分解因数的数字:0
🎯 趣味挑战

在打印出所有因数后,当数字是质数时打印一条特殊消息!你如何根据一个数的因数来判断它是否是质数?这段代码应该放在main()函数中还是print_factors(num)函数中?