Python入门到脱坑经典案例—猜数字游戏
猜数字游戏是一个经典的Python入门案例,可以帮助初学者理解随机数生成、循环、条件判断和用户输入处理等基础概念。下面我将介绍几种不同版本的猜数字游戏实现。
基础版猜数字游戏
import random
def guess_number():
"""基础版猜数字游戏"""
number = random.randint(1, 100) # 生成1-100的随机数
attempts = 0
print("欢迎来到猜数字游戏!")
print("我已经想了一个1到100之间的数字,你猜是多少?")
while True:
try:
guess = int(input("请输入你的猜测: "))
attempts += 1
if guess < number:
print("太小了,再大一点!")
elif guess > number:
print("太大了,再小一点!")
else:
print(f"恭喜你!你用了{attempts}次猜对了数字{number}!")
break
except ValueError:
print("请输入一个有效的数字!")
guess_number()
增强版:限制猜测次数
def guess_number_with_limits():
"""限制猜测次数的猜数字游戏"""
number = random.randint(1, 100)
max_attempts = 10
attempts = 0
print(f"你有{max_attempts}次机会猜1-100之间的数字")
while attempts < max_attempts:
try:
guess = int(input(f"第{attempts+1}次猜测: "))
attempts += 1
if guess < number:
print("太小了!")
elif guess > number:
print("太大了!")
else:
print(f"太棒了!你在第{attempts}次猜中了数字{number}!")
return
remaining = max_attempts - attempts
if remaining > 0:
print(f"你还有{remaining}次机会")
except ValueError:
print("请输入一个有效的数字!")
print(f"游戏结束!正确答案是{number}")
guess_number_with_limits()
进阶版:自定义难度级别
def guess_number_with_difficulty():
"""带难度选择的猜数字游戏"""
print("选择难度级别:")
print("1. 简单 (1-50, 10次机会)")
print("2. 中等 (1-100, 7次机会)")
print("3. 困难 (1-200, 5次机会)")
while True:
try:
level = int(input("请输入难度级别(1-3): "))
if level in (1, 2, 3):
break
print("请输入1-3之间的数字!")
except ValueError:
print("请输入有效的数字!")
if level == 1:
range_max, attempts = 50, 10
elif level == 2:
range_max, attempts = 100, 7
else:
range_max, attempts = 200, 5
number = random.randint(1, range_max)
print(f"我已经想了一个1到{range_max}之间的数字,你有{attempts}次猜测机会")
for attempt in range(1, attempts + 1):
try:
guess = int(input(f"第{attempt}次猜测: "))
if guess < number:
print("太小了!")
elif guess > number:
print("太大了!")
else:
print(f"恭喜!你在第{attempt}次猜中了数字{number}!")
return
except ValueError:
print("请输入一个有效的数字!")
attempt -= 1 # 不计算无效尝试
print(f"游戏结束!正确答案是{number}")
guess_number_with_difficulty()
图形界面版(使用Tkinter)
import tkinter as tk
from tkinter import messagebox
import random
class GuessNumberGame:
def __init__(self, master):
self.master = master
master.title("猜数字游戏")
self.number = random.randint(1, 100)
self.attempts = 0
# 创建界面元素
self.label = tk.Label(master, text="猜一个1到100之间的数字:")
self.label.pack()
self.entry = tk.Entry(master)
self.entry.pack()
self.guess_button = tk.Button(master, text="猜", command=self.check_guess)
self.guess_button.pack()
self.hint_label = tk.Label(master, text="")
self.hint_label.pack()
self.attempts_label = tk.Label(master, text="尝试次数: 0")
self.attempts_label.pack()
def check_guess(self):
try:
guess = int(self.entry.get())
self.attempts += 1
self.attempts_label.config(text=f"尝试次数: {self.attempts}")
if guess < self.number:
self.hint_label.config(text="太小了!")
elif guess > self.number:
self.hint_label.config(text="太大了!")
else:
messagebox.showinfo("恭喜", f"你用了{self.attempts}次猜对了数字{self.number}!")
self.master.destroy()
return
self.entry.delete(0, tk.END)
except ValueError:
messagebox.showerror("错误", "请输入一个有效的数字!")
# 启动游戏
root = tk.Tk()
game = GuessNumberGame(root)
root.mainloop()
多人对战版
def multiplayer_guess_game():
"""多人对战猜数字游戏"""
import getpass
print("多人对战猜数字游戏")
player1 = input("玩家1名称: ")
player2 = input("玩家2名称: ")
# 玩家1设置数字
print(f"\n{player1},请设置一个1-100的数字")
while True:
try:
number = int(getpass.getpass("请输入数字(对另一位玩家不可见): "))
if 1 <= number <= 100:
break
print("请输入1-100之间的数字!")
except ValueError:
print("请输入有效的数字!")
# 玩家2猜数字
print(f"\n{player2},现在开始猜{player1}设置的数字")
attempts = 0
while True:
try:
guess = int(input("你的猜测: "))
attempts += 1
if guess < number:
print("太小了!")
elif guess > number:
print("太大了!")
else:
print(f"恭喜{player2}!你用了{attempts}次猜对了数字!")
print(f"{player1}设置的数字是{number}")
break
except ValueError:
print("请输入一个有效的数字!")
multiplayer_guess_game()
总结
通过这个猜数字游戏案例,我们学习了:
- 使用random模块生成随机数
- 处理用户输入和验证
- 使用循环和条件判断控制游戏流程
- 创建不同难度级别
- 使用Tkinter构建图形界面
- 实现简单的多人游戏逻辑
这个案例很好地展示了Python的基础语法和逻辑控制,是初学者练习编程思维的绝佳材料。你可以继续扩展这个游戏,比如添加高分记录、更多游戏模式等功能。