🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

【复制粘贴就能跑】来用Python制作一个计时器应用吧!(活用time模块)

“编程该从哪里开始呢?”“看书也全是错误,感觉要崩溃了……”

就在几个月前,我也和你有完全一样的心情。我从零知识开始,在AI的帮助下反复尝试,现在已经能独立运营两个网站了。

在这篇文章中,我这个“前”初学者的首要目标,就是让大家能以和我完全相同的视角,体验到让程序“跑起来”的乐趣。这次,我们将使用Python内置的“时间魔法师”——`time`模块,来制作一个极其简单的计时器兼闹钟应用。

复杂的理论先放一边!首先,请复制粘贴代码,亲身感受你的电脑变身为计时器的瞬间吧!

第1步:先来体验一下!一个只等待3秒的超简单程序

百闻不如一见。首先,我们来运行一个世界上最简单的计时器,它只做一件事:请求计算机“请等待3秒”。请复制下面的代码,在你本地的Python环境中执行它。


# 使用“时间魔法”的咒语
import time

print("计时器开始。")

# 让程序执行暂停3秒
time.sleep(3)

print("3秒过去了!辛苦了。")
        

执行后,应该会先显示“计时器开始。”,然后稍等片刻,再显示“3秒过去了!”。就这么简单!这就是计时器的基本原理。

怎么样?是不是比想象中简单多了?这就是“成功运行”的体验。这种小小的成功体验,是支撑你继续学习编程的最大燃料。


第2步:为你专属定制!实现自由设定秒数

固定的3秒计时器也不错,但如果能设定任意时间,用在做饭或者学习上就更好了。接下来,我们来改造一下程序,让它每次运行时都询问“要等待几秒?”。

这时就要用到一个能接收用户输入的魔法——`input()`


import time

# 用input()接收用户的输入
input_seconds_str = input("希望在几秒后通知?请输入数字:")

# 【重要提示!】将输入的“字符串”转换为“整数”
seconds = int(input_seconds_str)

print(f"已设定{seconds}秒的计时器。")

time.sleep(seconds)

print(f"{seconds}秒过去了!时间到!")
        

执行这段代码,程序会暂停,光标会闪烁。试着从键盘输入你想要的秒数(比如 `10`),然后按回车键。程序会等待你输入的秒数,然后显示消息。

⚠️ 新手绝对会踩的坑:`input()`接收的都是“字符串”

在这里,我要分享一个我最初踩过的大坑。那就是,`input()`接收到的任何东西,即使用户输入的是数字,也会被一律当作“字符串”来处理。

`time.sleep()`只接受“数字”类型的秒数。如果你试图把“字符串”`"10"`传给它,它就会生气报错说:“这不是数字!”

所以,`seconds = int(input_seconds_str)`这一行是必不可少的。它用`int()`这个魔法把字符串包裹起来,将其变身为计算机能进行计算的“整数(integer)”。这种“类型转换”是在编程中随处可见的基本且极其重要的概念,请务必记住!


第3步:美化外观!实现倒计时功能

计时器在运行时,你是否会担心它到底还在不在工作?为了能清楚地知道“还剩几秒?”,我们来给它加上显示剩余时间的倒计时功能吧。

这里我们将使用“重复”的魔法——`for`循环。并且,我们还会用一个小技巧,让显示固定在同一行,看起来只有数字在更新。


import time

seconds = 10 # 为方便理解,固定为10秒

# 从10到1,每次减1进行循环
for i in range(seconds, 0, -1):
    # 用f-string让显示更美观,end="\r"是魔法咒语!
    print(f"剩余时间: {i} 秒", end="\r")
    
    # 等待1秒
    time.sleep(1)

# 倒计时结束后的消息
# 重点是在后面加上空格,用来清除上一行的内容
print("时间到了!          ")
        

请执行一下试试。怎么样?你应该能在终端的同一个位置看到数字`10, 9, 8...`这样递减吧。看起来就像个真正的计时器应用!


第4步:终于完成!会响铃的正式计时器

终于到了最后一步。我们不仅要在时间到时显示消息,还要加上能用“声音”来实际通知的闹钟功能。

这不需要任何特殊的库。大多数电脑(的终端)都具备一个类似隐藏功能的东西:当显示特定的“特殊字符”时,会发出“哔”的一声。这个字符就是`\a`

这是集成了目前所有功能,并且增加了用户输入非数字时的错误处理的最终版代码!


# 导入 time 模块
import time

# 使用 try...except 结构,将可能出错的处理包裹起来
try:
    # 让用户输入等待的秒数
    input_seconds_str = input("希望在几秒后响起闹钟?请输入数字:")
    
    # 将输入的字符串转换为整数(int类型)
    seconds = int(input_seconds_str)

    print(f"开始{seconds}秒的倒计时。")

    # 从指定的秒数开始,每次减1,循环直到1
    for i in range(seconds, 0, -1):
        # 使用f-string,让剩余时间的显示更美观
        # end="\r" 让下一次的print在同一行覆盖显示
        print(f"剩余时间: {i} 秒  ", end="\r")
        # 等待1秒
        time.sleep(1)

    # 循环结束后(时间到时),显示消息
    # \a 是让终端发出蜂鸣声的特殊字符(Alert)
    print("时间到!闹钟响了! \a")

except ValueError:
    # 处理输入非数字时(int()会报错)的情况
    print("错误:请输入有效的数字。")
except KeyboardInterrupt:
    # 处理用户通过Ctrl+C中断程序的情况
    print("\n计时器已中断。")
        

这样,你的电脑就完全变成了一个计时器兼闹钟应用。而且它还更智能了一点,如果你输入了非数字的字符(比如`abc`),它会正确地给出一个错误消息然后退出。

注意: 根据你使用的操作系统或终端的设置,由`\a`产生的蜂鸣声可能不会响起。即使没有声音,程序的逻辑也是正确的,请放心。


总结:小小的“成功运行!”是通往未来的巨大动力

辛苦了!这次我们体验了仅通过组合Python的基本功能——`time`模块,就能制作出实用的计时器应用。

  1. `time.sleep()`让程序等待
  2. `input()`接收用户指令
  3. `int()`将字符串转换为数值(超重要!)
  4. `for`循环重复处理
  5. `print(end="\r")`美化显示
  6. `\a`发出闹钟声
  7. `try...except`防范错误
  8. ol>

    虽然每一个功能都很简单,但将它们组合起来,就能创造出能“帮到别人”的工具,这就是编程的有趣之处。今天体验到的这种“复制粘贴就跑起来了!”、“我自己改造成功了!”的小小成功,将是你未来制作更复杂、更有趣东西的最大动力。

    请务必以这个代码为基础,尝试改造成可以输入“分钟”,或者挑战一下番茄工作法计时器(工作25分钟+休息5分钟),自由地去玩耍吧!


    【附赠】可体验本文所有代码的HTML

    本文介绍的最终版Python代码,可以从下面的代码块中复制,在你的电脑上保存为`timer.py`这样的文件名,就可以随时执行和尝试了。请务必在你的电脑上运行一下试试看。

    <!-- 请保存为 timer.py 并执行 -->
    # 导入 time 模块
    import time
    
    # 使用 try...except 结构,将可能出错的处理包裹起来
    try:
        # 让用户输入等待的秒数
        input_seconds_str = input("希望在几秒后响起闹钟?请输入数字:")
        
        # 将输入的字符串转换为整数(int类型)
        seconds = int(input_seconds_str)
    
        print(f"开始{seconds}秒的倒计时。")
    
        # 从指定的秒数开始,每次减1,循环直到1
        for i in range(seconds, 0, -1):
            # 使用f-string,让剩余时间的显示更美观
            # end="\r" 让下一次的print在同一行覆盖显示
            print(f"剩余时间: {i} 秒  ", end="\r")
            # 等待1秒
            time.sleep(1)
    
        # 循环结束后(时间到时),显示消息
        # \a 是让终端发出蜂鸣声的特殊字符(Alert)
        print("时间到!闹钟响了! \a")
    
    except ValueError:
        # 处理输入非数字时(int()会报错)的情况
        print("错误:请输入有效的数字。")
    except KeyboardInterrupt:
        # 处理用户通过Ctrl+C中断程序的情况
        print("\n计时器已中断。")
    
            

    下一步

    既然能制作计时器了,接下来要不要试试和电脑对战的游戏呢?使用处理随机数的`random`模块,你就能发现编程的又一重乐趣。

    ➡️ 用Python创建一个简单的猜数字游戏(活用random)