(3)设计一个猜数线程guessNumberThread类,随机给出1~100的整数,输入数字来猜数。猜大了会提示“你猜大了。”,猜小了会提示“你猜小了。”,猜对了会提示“恭喜,你猜对了!”并结束程序。(4)在(3)的基础上,用两个线程来玩猜数游戏,第一个线程负责随机给出1~100的整数,第二个线程负责猜数。每当第二个线程给出自己的猜测后,第一个线程会和(3)类似给出提示信息。猜数之前,要求第二个线程要等待第一个线程设置好要猜的数。第一个线程设置好猜测数之后,两个线程还要互相等待,其原则是:第二个线程给出猜测后,等待第一个线程给出提示;第一个线程给出提示后,等待第二个线程给出猜测,如此进行,直到猜对。
时间: 2023-12-26 14:22:40 浏览: 62
好的,我理解了你的问题。对于问题(3),可以使用以下代码实现:
```python
import random
class GuessNumberThread(threading.Thread):
def __init__(self):
super().__init__()
self.number = random.randint(1, 100)
def run(self):
while True:
guess = int(input("请输入你猜的数字:"))
if guess > self.number:
print("你猜大了。")
elif guess < self.number:
print("你猜小了。")
else:
print("恭喜,你猜对了!")
break
```
对于问题(4),可以使用以下代码实现:
```python
import random
import threading
class GuessNumberThread(threading.Thread):
def __init__(self):
super().__init__()
self.number = None
self.guess = None
self.lock = threading.Lock()
def run(self):
while True:
self.lock.acquire()
if self.number is None:
self.number = random.randint(1, 100)
print("已设置好猜测数字,请开始猜测。")
elif self.guess is not None:
if self.guess > self.number:
print("你猜大了。")
elif self.guess < self.number:
print("你猜小了。")
else:
print("恭喜,你猜对了!")
break
self.guess = None
self.lock.release()
class InputNumberThread(threading.Thread):
def __init__(self, guess_number_thread):
super().__init__()
self.guess_number_thread = guess_number_thread
def run(self):
while True:
guess = int(input("请输入你猜的数字:"))
self.guess_number_thread.lock.acquire()
if self.guess_number_thread.guess is None:
self.guess_number_thread.guess = guess
self.guess_number_thread.lock.release()
guess_number_thread = GuessNumberThread()
input_number_thread = InputNumberThread(guess_number_thread)
guess_number_thread.start()
input_number_thread.start()
guess_number_thread.join()
input_number_thread.join()
```
其中,GuessNumberThread 类负责随机生成一个猜测数字,并在用户猜测时进行判断,并输出相应的提示信息。InputNumberThread 类负责用户输入猜测数字,并将猜测数字传递给 GuessNumberThread 类进行判断。在代码中使用了锁来保证两个线程的同步和互斥。
阅读全文