遇到的问题
我遇到的问题是需要进行一些列的倒计时。开始的时候是在手机的倒计时输入,一次倒计时结束再输入下一次倒计时,如此循环,但觉得麻烦,就动手自己写了代码。可以一次性输入所有时间,然后每次倒计时只需要点击一次运行就可以了,听到铃声点击停止,就停止播放音乐。
难点
听到提示音乐就会手动终止程序,每次程序都是没有自行运行完的,因而无法在同一个文件内实现计数的,因此使用了一个计数文件,num.txt,文件里面只有一个数字,为了计数编写了如下函数:
def add_one():
# 每次执行程序,都让程序里面的参数加1
f_out = open('num.txt', 'r+')
a = f_out.read()
a = int(a) + 1
f_out.seek(0)
f_out.truncate()
f_out.write(str(a))
f_out.close()
return a
需要注意的问题
因为我的时间列表有小数,需要对时间进行取整,否则时间递减到负数也不会播放音乐,将无限进行下去。
int(FileTime[i])
运行效果
运行后就开始倒计时,直到剩余时间为零,然后想起音乐,如图所示:
需要用到的库
需要额外安装pygame。
对部分代码的解释
while True:
pass
如果没有这行代码,程序播放瞬间就停止了,因此需要加这一行。
完整代码
import time # 导入时间库
import os # 导入系统库
import pygame
def add_one():
# 每次执行程序,都让程序里面的参数加1
f_out = open('num.txt', 'r+')
a = f_out.read()
a = int(a) + 1
f_out.seek(0)
f_out.truncate()
f_out.write(str(a))
f_out.close()
return a
FileTime = [338.99, 319.66, 303.96, 117.75999999999999, 171.94, 281.42, 566.73, 88.87, 96.89, 259.06, 198.53, 235.68, 245.21, 154.49, 84.74, 204.54]
FileTime = FileTime
i = add_one()
i = int(i)
print("i is", i)
second = int(FileTime[i]) - 10
while second != 0: # 除非分钟数和秒钟数同时为0,否则执行循环
os.system('cls') # 清空控制台
print("%d" % second) # 打印剩余时间到控制台
second -= 1 # 秒数自减
time.sleep(1) # 程序延时一秒
pygame.mixer.init()
pygame.mixer.music.load('1.mp3')
pygame.mixer.music.set_volume(0.5)
pygame.mixer.music.play()
while True:
pass