吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1307|回复: 29
收起左侧

[学习记录] 学Python没几天,闲时自己编写的猜数字小游戏

  [复制链接]
3420051218 发表于 2024-8-23 16:07

代码:
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import messagebox
import random


def guess_number():
    number = random.randint(1, 100)

    def check_number():
        guess = int(entry.get())
        if guess < number:
            result_label.config(text="猜小了,再试一次!")
            entry.delete(0, 'end')  # 清空输入框
        elif guess > number:
            result_label.config(text="猜大了,再试一次!")
            entry.delete(0, 'end')  # 清空输入框
        else:
            result_label.config(text="恭喜你,猜对了!")
            if messagebox.askyesno("提示", "要再玩一次吗?"):
                new_number()
            else:
                root.destroy()

    def new_number():
        nonlocal number
        number = random.randint(1, 100)
        result_label.config(text="")
        entry.delete(0, 'end')

    root = tk.Tk()
    root.title("猜数字游戏")

    # 设置对话框的大小
    root.geometry("1000x375")  # 宽1000,高375

    # 指定字体大小
    font_size = 20

    label = tk.Label(root, text="我已经想好了一个1到100之间的整数,请猜猜是多少:", font=('Arial', font_size))
    label.pack(pady=35)  # 增加上下间距

    entry = tk.Entry(root, width=10, font=('Arial', font_size))  # 增加输入框的宽度和字体大小
    entry.pack(pady=25)
    entry.bind('<Return>', lambda event=None: check_number())  # 绑定回车键确认

    check_button = tk.Button(root, text="确认", command=check_number, font=('Arial', font_size))  # 按钮字体大小
    check_button.pack(pady=25)

    result_label = tk.Label(root, text="", font=('Arial', font_size))  # 结果文本的字体大小
    result_label.pack(pady=20)

    root.mainloop()


guess_number()

程序截图

程序截图

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

anning666 发表于 2024-8-23 16:37
guess_number()这个函数,可以定义成一个'类',代码看上去会更加'优雅'~~~
jrwapj 发表于 2024-8-23 17:16
haimiandashu 发表于 2024-8-23 17:38
[Python] 纯文本查看 复制代码
[url=home.php?mod=space&uid=155760]@Project[/url] :pythonproject 
[url=home.php?mod=space&uid=267492]@file[/url]    :猜数字游戏.py
[url=home.php?mod=space&uid=1557159]@IDE[/url]     :PyCharm 
[url=home.php?mod=space&uid=686208]@AuThor[/url]  :海绵的烂笔头
[url=home.php?mod=space&uid=686237]@date[/url]    :2023-07-14 15:06 
'''
import random

number = random.randint(1, 100)
guess = 0
tries = 0

print("猜猜看我心里想的是哪个数字!")

while guess != number:
    guess = int(input("请输入一个数字:"))
    tries += 1

    if guess > number:
        print("太大了!")
    elif guess < number:
        print("太小了!")
    else:
        print("恭喜你猜对了!你用了", tries, "次猜中了数字", number)
白水饮 发表于 2024-8-23 17:41
本帖最后由 白水饮 于 2024-8-23 17:46 编辑

在 check_number 方法中,要添加异常处理来确保用户输入的是有效整数,不然报错

白水饮 发表于 2024-8-23 17:50
haimiandashu 发表于 2024-8-23 17:38
[mw_shl_code=python,true]@Project :pythonproject
@file    :猜数字游戏.py
@IDE     :PyCharm

输个字母就报错了,做个处理就好,其他完美
acsecqb 发表于 2024-8-23 17:56
感谢分享!
joker_mj 发表于 2024-8-23 18:11
anning666 发表于 2024-8-23 16:37
guess_number()这个函数,可以定义成一个'类',代码看上去会更加'优雅'~~~

窗口显示跟布局,最后的再来一次,跟确定,不想再次弹窗,直接在游戏界面显示,总弄不好 能指点下么?
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import Toplevel, Frame, Label, Button, Entry, messagebox
import random


def on_enter(event=None):
    """当按下回车键时触发猜数字操作"""
    guess_number()


def guess_number():
    global error_count, secret_number
    try:
        number = int(entry.get())
        if number == secret_number:
            show_result_popup(error_count)
            error_count = 0
        else:
            if number < secret_number:
                result_text = "太小了,再试一次!"
            else:
                result_text = "太大了,再试一次!"
            label_result.config(text=result_text, fg="red", font=("Arial", 14, "bold"), wraplength=200)
            error_count += 1
    except ValueError:
        label_result.config(text="无效的输入,请输入一个数字!", fg="red", font=("Arial", 14, "bold"), wraplength=200)
        error_count += 1
    entry.delete(0, tk.END)


def show_result_popup(tries):
    """显示结果的弹出窗口"""
    global popup
    popup = Toplevel(root)
    popup.title("游戏结果")

    # 弹出窗口大小和位置
    popup_width = 300
    popup_height = 200
    x = root.winfo_x() + (root.winfo_width() - popup_width) // 2
    y = root.winfo_y() + (root.winfo_height() - popup_height) // 2
    popup.geometry(f"{popup_width}x{popup_height}+{x}+{y}")

    # 创建消息标签
    label_message = Label(popup, text=f"你答对了!你共计花费了 {tries} 次答对。", font=("Arial", 14, "bold"),
                          wraplength=260)
    label_message.pack(pady=20)

    # 创建按钮的容器Frame
    button_frame = Frame(popup)
    button_frame.pack(side=tk.BOTTOM, pady=20, padx=20, fill=tk.X)

    # 创建"再来一次"按钮
    btn_again = Button(button_frame, text="再来一次", command=popup.destroy_and_reset)
    btn_again.pack(side=tk.LEFT, padx=10, pady=10)

    # 创建"确定"按钮
    btn_ok = Button(button_frame, text="确定", command=popup.destroy)
    btn_ok.pack(side=tk.RIGHT, padx=10, pady=10)


def destroy_and_reset():
    """销毁弹出窗口并重置游戏"""
    global secret_number, error_count
    secret_number = random.randint(1, 100)
    error_count = 0
    entry.delete(0, tk.END)  # 清空输入框
    label_result.config(text="")


# 初始化设置
root = tk.Tk()
root.title("猜数字游戏")
root.geometry("300x200")

# 随机生成一个数字
secret_number = random.randint(1, 100)
error_count = 0

# 创建提示标签
label_instruction = Label(root, text="请在1-100中选择一个数字", font=("Arial", 14), wraplength=280)
label_instruction.pack()

# 创建输入框
entry = Entry(root, font=("Arial", 14))
entry.pack()

entry.bind('<Return>', on_enter)

# 创建显示结果的标签
label_result = Label(root, text="", fg="black", font=("Arial", 14), wraplength=280)
label_result.pack()

# 创建猜数字按钮
guess_button = Button(root, text="猜数字", command=guess_number)
guess_button.pack()

root.mainloop()
zlqhysy 发表于 2024-8-23 19:02
哈哈,不错
szs 发表于 2024-8-23 19:06
小白学习一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表