【问题标题】:How to make a countdown clock in Python on Sublime Text 2如何在 Sublime Text 2 上用 Python 制作倒计时时钟
【发布时间】:2015-12-04 16:55:14
【问题描述】:

我希望在 Sublime Text 2 上使用 Python 创建一个倒计时时钟。我已经完成了它的显示:

01:00 00:59 00:58 ... 00:00

但是,我希望计时器仅显示在一个位置,因此它看起来像是连续倒计时。我尝试了很多方法,但似乎无法在 Sublime 中覆盖该行。这是我到目前为止的代码:

def countdown(p,q):
    i=p
    j=q
    k=0
    while True:
        if(j==-1):
            j=59
            i -=1
        if(j > 9):  
            print(str(k)+str(i)+":"+str(j), end='\r'),
        else:
            print(str(k)+str(i)+":"+str(k)+str(j) , end='\r'),
        time.sleep(1)
        j -= 1
        if(i==0 and j==-1):
            break
    if(i==0 and j==-1):
        print("Goodbye!", end="\r")
        time.sleep(1)
print(countdown(1,0))

【问题讨论】:

    标签: python time sublimetext2 countdown


    【解决方案1】:

    据我所知,sublime 没有办法清除控制台。下面给出的代码将在终端中显示您需要的结果。

    import time,os
    def countdown(p,q):
        i=p
        j=q
        k=0
        while True:
            if(j==-1):
                j=59
                i -=1
            if(j > 9):  
                print str(k)+str(i) +":"+str(j),
            else:
                print str(k)+str(i)+":"+str(k)+str(j),
            time.sleep(1)
            j -= 1
            if(i==0 and j==-1):
                break
            os.system("cls") # or os.system("clear") if on linux
        if(i==0 and j==-1):
            os.system("cls")
            print "Goodbye!",
            time.sleep(1)
    print countdown(1,0)
    

    但是,here 提供了一个 hack。您可以使用print('\n'*100) 来模拟清除控制台的行为。

    【讨论】:

      【解决方案2】:

      我能想到的最简单的方法是让你的倒计时在状态栏中运行。 sublime.status_message() 接受一个字符串参数并将其显示在底部的状态栏中。

      另外,不要使用time.sleep(),而是尝试使用sublime.set_timeout()。创建一个回调函数,每次调用时将时间减少 1 秒。然后,使用set_timeout(callback, delay=1000) 每秒调用一次(1000 毫秒)。

      最后,我强烈建议您使用语义变量 - 根据它们的含义命名它们,而不是随机的单字母名称。 Python 程序旨在易于阅读和理解,并且调试minutessecondscounter 而不是ijk 更容易 .

      【讨论】:

        【解决方案3】:

        刚刚修改了@Fabio Duran Verdugo 代码

                    import time
                    def countdown(p,q):
                        k = 0
                        a = ""
        
                        while True:
        
                            if(q == -1):                                                              
                                q = 59 #default seconds for countdown
                                p -= 1 #decremental value for minutes
        
                            if(q > 9):
                               a = str(k) + str(p) + ":" + str(q) + "\n"
                            else:
                               a = str(k) + str(p) + ":" + str(k) + str(q) + "\n"
                            print (a)
        
                            time.sleep(1)
                            q -= 1
                            if(p == 0 and q == -1):
                                break
        
                        if(p == 0 and q == -1):
                            print("Goodbye!") #print goodbye
                            time.sleep(10)    #timer before going to sleep (seconds)
                    countdown(1,0) #format (minutes, seconds)
        

        代码现在不打印多余的行(改进的用户界面),制作了一些代码文档以便于流动。

        PS:我不认为这段代码有任何功劳:) 快乐学习的家伙

        【讨论】:

          【解决方案4】:

          连接结果并在每次连接变量时打印。

          import time                                                                     
          
          def countdown(p,q):                                                             
              i=p                                                                         
              j=q                                                                         
              k=0                                                                         
              a=""                                                                        
              while True:                                                                 
                  if(j==-1):                                                              
                      j=59                                                                
                      i -=1                                                               
                  if(j > 9):                                                              
                      a += str(k)+str(i)+":"+str(j) + " "                                 
                  else:                                                                   
                      a += str(k)+str(i)+":"+str(k)+str(j) + " "                                                                                              
                  print (a, end='\r')                                                     
                  time.sleep(1)                                                           
                  j -= 1                                                                  
                  if(i==0 and j==-1):                                                     
                     break                                                               
              if(i==0 and j==-1):                                                         
                  print("Goodbye!", '\r')                                                 
                  time.sleep(1)                                                           
          countdown(1,0) 
          

          【讨论】:

            猜你喜欢
            • 2018-06-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-02-22
            • 2018-11-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多