我是Python的新手,已经谷歌搜索了几天,阅读了我在这个论坛上可以找到的所有内容。我可能不会理解这一切,但我还没有找到解决问题的方法。如果已经对我的问题有了答案,请求原谅,然后我就无法理解。
我想为我的程序Tennismatch制作暂停功能。该计划将在其运行时打印如下网球比赛的得分:" 15-0,15-15等,直到比赛结束。它将逐行打印得分。
我希望用户能够在x个球,游戏等之后暂停。所以我不知道用户何时想要暂停,并且在用户暂停后我希望用户能够恢复网球场的位置。
已经看过time.sleep()但是我已经明白了你必须知道你什么时候想要暂停使用它,这也是我想要的一个无法停顿。使用input()它是相同的。
代码完成后,我将在以后制作GUI。对于导致我解决问题的任何事情感到高兴。
我使用Windows和Python 3.42并在Shell中运行该程序。
一段代码(还没有写完所有内容,更多的是一般情况下,当一些线路打印一段时间并希望能够在CIL中暂停时:
#self.__points = [0,0]
def playGame(self):
if self.server == True: #self.server is either True or False when someone calls playGame()
server = self.player_1.get_win_serve() #self.player_1 = an object of a class Player():
else:
server = self.player_2.get_win_serve() #get_win_serve() method returns the probability to win his serv (1-0)
while (0 < self.__points[0] - self.__points[1] >= 2 or 0 < self.__points[1] - self.__points[0] >= 2) and (self.__points[1] >= 4 or self.__points[0] >= 4):
x = random.uniform(0,1)
if x > 0 and x < server:
self.__points[0] += 1
else:
self.__points[1] += 1
# print('The score, by calling a score() function that I haven't written yet')
&#13;
答案 0 :(得分:0)
我想出了以下内容。
while True:
try:
## Keep doing something here
## your regular code
print '.',
except KeyboardInterrupt:
## write or call pause function which could be time.sleep()
print '\nPausing... (Hit ENTER to continue, type quit to exit.)'
try:
response = raw_input()
if response.lower() == 'quit':
break
print 'Quitting...'
except KeyboardInterrupt:
print 'Resuming...'
continue
答案 1 :(得分:0)
为了处理主循环中的事件,您需要创建一个捕获输入或任何其他事件的单独线程。
import sys
from sys import stdin
from time import sleep
from threading import Thread
from Queue import Queue, Empty
def do_something():
sleep(1)
print 42
def enqueue_output(queue):
while True:
# reading line from stdin and pushing to shared queue
input = stdin.readline()
print "got input ", input
queue.put(input)
queue = Queue()
t = Thread(target=enqueue_output, args=(queue,))
t.daemon = True
t.start()
pause = False
try:
while True:
try:
command = queue.get_nowait().strip()
print 'got from queue ', command
except Empty:
print "queue is empty"
command = None
if command:
if command == 'p':
pause = True
if command == 'u':
pause = False
if not pause:
print pause
do_something()
except KeyboardInterrupt:
sys.exit(0)
答案 2 :(得分:0)
Event循环可能也是我写的代码。
我没有看到任何用户输入,所以我假设x
模仿它。要暂停游戏x < 0.1
并暂停(/恢复)x > 0.9
,您可以:
while your_condition(self.__points):
x = random.random()
if x < 0.1: # pause
self.pause()
elif x > 0.9: # resume
self.resume()
if self.is_paused:
continue # do nothing else only wait for input (`x`)
# assume your_condition() has no side-effects
# here's what the resumed version does:
print("...")
# change self.__points, etc
其中pause()
,resume()
,is_paused()
方法可以实现为:
def __init__(self):
self.is_paused = False
def pause(self):
self.is_paused = True
def resume(self):
self.is_paused = False
正如您所看到的,实现非常简单。