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()

总结

通过这个猜数字游戏案例,我们学习了:

  1. 使用random模块生成随机数
  2. 处理用户输入和验证
  3. 使用循环和条件判断控制游戏流程
  4. 创建不同难度级别
  5. 使用Tkinter构建图形界面
  6. 实现简单的多人游戏逻辑

这个案例很好地展示了Python的基础语法和逻辑控制,是初学者练习编程思维的绝佳材料。你可以继续扩展这个游戏,比如添加高分记录、更多游戏模式等功能。

原文链接:,转发请注明来源!