Python:帮助修复秒表的重置功能

Python: Help fixing the reset function on my stopwatch

我正在尝试制作一个秒表,从 0 开始计数,当它收到用户输入时可以重新启动。但是,当我尝试重置功能时,它不会将计时器重置为 0,而只是继续计数。我正在使用线程,因此它会继续计数并等待用户输入,所以我不确定如何修复它:

import time                   
import signal          
import threading    


def interrupted(signum, frame):          
    pass

signal.signal(signal.SIGALRM, interrupted) 

def count(s):      
   
    while True:
            print(format(s))
            s = s+1
            time.sleep(1)
        

def i_input():    #this is the alert for interaction and the reset trigger when interacted with.
    try:
        print('Starting Stopwatch')
        interact = input()
        print('Stopwatch Reset.')
        s=0
        i_input()
        
    except:
        return
        

def count(s):     
    while True:
        print(s)
        s = s+1
        time.sleep(1)
  



threading.Thread(target = i_input).start()
countThread = threading.Thread(target=count, args=(0,));
countThread.start();

如果有人能告诉我如何在用户输入时将其重置为 0,将不胜感激。

s 在你的代码中是 count 函数中的局部变量,所以你不能在 i_input.

中更改它

当你在 i_input 中执行 s=0 时,这只是定义了另一个局部变量也命名为 s,但它在不同的范围内是局部的,所以它不会改变 counts.

解决办法是让s成为一个全局变量。您可以通过在顶层定义它,然后将 global s 放入函数中来做到这一点,这样它就不会被局部变量覆盖。

import time
import threading


def count(): 
    global s    
    while True:
        print(s)
        s += 1
        time.sleep(1)
        

def i_input():  # this is the alert for interaction and the reset trigger when interacted with.
    global s
    print('Starting Stopwatch')
    interact = input()
    print('Stopwatch Reset.')
    s = 0
    i_input()


s = 0
threading.Thread(target=i_input).start()
threading.Thread(target=count).start()