मैं प्रोग्रामिंग में वापस आ रहा हूं, इसलिए मैंने एक प्रोजेक्ट शुरू किया जो उपयोगकर्ता के इनपुट की मात्रा के आधार पर एक मर जाता है, और उपयोगकर्ता जितनी बार मरना चाहता है। मुझे समय से जुड़े कार्यक्रम के एक हिस्से में परेशानी हो रही है। जब उपयोगकर्ता संकेत दिए जाने के दस सेकंड के भीतर इनपुट नहीं करता है, तो मैं एक संदेश प्रदर्शित करना चाहता हूं। यदि अन्य दस सेकंड में कुछ भी दर्ज नहीं किया जाता है तो एक संदेश प्रदर्शित किया जाना चाहिए, इत्यादि। मैं पायथन का उपयोग कर रहा हूँ।

अभी अधिकांश प्रोग्राम काम कर रहा है, लेकिन इनपुट लेने के बाद ही समय की जाँच की जाती है। इस प्रकार एक उपयोगकर्ता इनपुट स्क्रीन पर असीम रूप से बैठ सकता है और संकेत नहीं मिलता है। इनपुट के लिए संकेत दिए जाने के बाद से बीत चुके समय की जांच करते समय, मैं वास्तव में इनपुट के लिए एक साथ प्रतीक्षा करने के तरीके पर फंस गया हूं।

def roll(x, y):
    rvalues = []
    while(y > 0):
        y -= 1
        rvalues.append(random.randint(1, x))
    return rvalues

def waitingInput():
    # used to track the time it takes for user to input
    start = time.time()
    sides = int(input("How many sides does the die have? "))
    times = int(input("How many times should the die be rolled? "))
    tElapsed = time.time() - start
    if tElapsed <= 10:
        tElapsed = time.time() - start
        rInfo = roll(sides, times)
        print("Each side occurs the following number of times:")
        print(Counter(rInfo))
        waitingInput()
    else:
        print("I'm waiting...")
        waitingInput()

किसी भी सलाह की सराहना की जाएगी। मैं किसी भी तरह से अपनी कोडिंग में सुधार करना चाहता हूं, इसलिए असंबंधित कोड के बारे में रचनात्मक आलोचना का स्वागत है।

0
Sean Sweeney 18 मई 2019, 06:28

1 उत्तर

सबसे बढ़िया उत्तर

इस तरह की स्थितियां थ्रेडेड टाइमर क्लास के लिए कॉल करती हैं। पायथन मानक पुस्तकालय एक प्रदान करता है:

import threading

...

def waitingInput():
    # create and start the timer before asking for user input
    timer = threading.Timer(10, print, ("I'm waiting...",))
    timer.start()

    sides = int(input("How many sides does the die have? "))
    times = int(input("How many times should the die be rolled? "))

    # once the user has provided input, stop the timer
    timer.cancel()  

    rInfo = roll(sides, times)
    print("Each side occurs the following number of times:")
    print(Counter(rInfo))
0
marc_s 18 मई 2019, 19:34