python-从聚会游戏引发的猜数字小游戏案例
目录
一、文章主题
对于上期提到有关抽奖的案例,他的不确定性是我们无法避免的,是不是有一种比较确定的东西来帮助我们进行娱乐呢?答案是有的。接下来我们来说一说这个简单的聚会游戏。
二、聚会暖场游戏:数字炸弹
我们来说一下这个游戏的游戏规则:
- 首先,我们确定一个人做为主持人,他不参与本轮的游戏。
- 然后由主持人确定一个范围1-100,并写下范围内的一个数字51,准备好之后,便开始
- 之后按照顺时针或者逆时针的方向,由参与人依次报出范围内的数字。
- 主持人根据报出数字与手中的数字进行比较,并提示,大了,或者小了,答对了。
- 参与者报70,听到主持人说大了,然后到下一个人,则之后的人只能,0-70选择数字。
- 参与者报20,听到主持人说小了,然后到下一个人,则之后的人只能从20-70选择数字。、
- 参与者报51,听到主持人说答对了,恭喜你,你输了,罚酒一杯。
- 惩罚之后,“中奖者”就会作为本轮的主持人,继续游戏。防止连续“中奖”
毕竟娱乐,大家都是点到为止,也不强制,也是活跃气氛。(莫要贪杯)
三、思考
游戏结束了,思考,那我们是否能通过程序来实现这个猜数字的过程。
我们进行一下简化:
- 根据最大值,最小值确定范围。
- 如果大了或者小了,给他提示。
- 如果答对了,回答答对了,结束
第一种:机器猜
我们来实现一下,机器猜我们定的数字,如果猜错了,我们需要取出区间内的中间值,再去判断。
代码如下:
def guess_my_number():
print("请在心中想一个1~100之间的数字,我会尽力猜出来。")
low = 1
high = 100
while True:
guess = (low + high) // 2
result = input("我猜这个数字是{},是大了(输入L),小了(输入S),猜对了(输入D):".format(guess))
if result == "D":
print("我猜对了!")
break
elif result == "L":
high = guess - 1
elif result == "S":
low = guess + 1
# 调用函数
guess_my_number()
这样的话,就实现了,机器猜我们的数字的目的。运行结果如下,我的数字是61.
第二种:我来猜
我们需要来猜测机器随机生成的是哪个数字,相同的原理,我们猜错了,他需要回答我们大了还是小了。
这里我们来做一个界面,操作更加方便。
代码如下:
import tkinter as tk
import random
class GuessNumberGame(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.master.title("猜数字游戏")
self.pack()
self.create_widgets()
def create_widgets(self):
# 显示题目
self.question_label = tk.Label(self, text="请在心中想一个1~100之间的数字,我会尽力猜出来。")
self.question_label.pack()
# 显示猜测结果
self.guess_label = tk.Label(self, text="")
self.guess_label.pack()
# 显示输入框和按钮
self.input_frame = tk.Frame(self)
self.input_frame.pack(side="bottom")
self.input_entry = tk.Entry(self.input_frame, width=10)
self.input_entry.pack(side="left")
self.submit_button = tk.Button(self.input_frame, text="猜测", command=self.guess)
self.submit_button.pack(side="left")
# 初始化游戏
self.low = 1
self.high = 100
self.guess_number = self.generate_guess_number()
def generate_guess_number(self):
return random.randint(self.low, self.high)
def guess(self):
try:
guess = int(self.input_entry.get())
if guess < self.guess_number:
self.guess_label.configure(text="您猜的数字太小了!")
self.low = guess + 1
elif guess > self.guess_number:
self.guess_label.configure(text="您猜的数字太大了!")
self.high = guess - 1
else:
self.guess_label.configure(text="恭喜您,猜对了!")
self.submit_button.configure(state="disabled")
except ValueError:
self.guess_label.configure(text="请输入一个数字!")
self.input_entry.delete(0, tk.END)
root = tk.Tk()
game = GuessNumberGame(master=root)
game.mainloop()
这样我们就实现我们猜机器的数字了。
四、文章总结
文章主要使用到的模块,随机数模块random,tkinter模块(制作桌面应用)运用简单的标签,按钮组件。
学习运用到基础知识无限循环,和if判断。