开启辅助访问     
收藏本站

站内搜索

搜索

Minecraft(我的世界)苦力怕论坛

代码捉虫

 发表于 2024-5-31 19:13:06 来自手机|显示全部楼层|阅读模式 IP:陕西省
50铁粒
这是个计算机,Python写的,有界面,计算不了,大佬帮忙捉虫

窗口计算机-副本.py

6.04 KB, 下载次数: 1

最佳答案

查看完整内容

借用ChatGPT-4o对该文件进行了分析: 您的Python代码中有几个问题,需要进行修正。以下是详细的分析和建议: [*]函数isPressEqual定义冲突: [*]您定义了一个名为isPressEqual的函数,但之前这个名字已经被用作全局变量。这会导致命名冲突,影响程序的正常运行。将函数名更改为不同的名称,例如pressEqual。 [*]变量定义和使用: [*]在多个地方使用了全局变量lists和isPressEqual。为了确保这些变量在函数内部被正确引用,需要在 ...
苦力怕论坛,感谢有您~
 发表于 2024-5-31 19:13:07|显示全部楼层 IP:江西省
本帖最后由 Ucraft 于 2024-5-31 19:50 编辑

借用ChatGPT-4o对该文件进行了分析:
您的Python代码中有几个问题,需要进行修正。以下是详细的分析和建议:
  • 函数isPressEqual定义冲突
    • 您定义了一个名为isPressEqual的函数,但之前这个名字已经被用作全局变量。这会导致命名冲突,影响程序的正常运行。将函数名更改为不同的名称,例如pressEqual。
  • 变量定义和使用
    • 在多个地方使用了全局变量lists和isPressEqual。为了确保这些变量在函数内部被正确引用,需要在函数开头声明global。
  • 公式字符串拼接错误
    • 公式字符串拼接处使用了错误的注释,应该使用"".join(lists)而不是.join(lists)。
  • 按钮文本重复
    • btn_percent和btn_equal按钮的文本内容都是=。这可能是个错误,应该将btn_percent的文本改为%。
  • 字符编码问题
    • 在某些操作系统上,字体名称中的中文字符可能会引起问题。确保您的操作系统和Python环境支持这些字体。
以下是修正后的代码:

import tkinter

# 创建主窗口
window = tkinter.Tk()
window.minsize(600, 505)
window.maxsize(600, 505)
window.title("计算器")

# 定义变量
show_top = tkinter.StringVar()
show_top.set("")
show_bottom = tkinter.StringVar()
show_bottom.set(0)

# 定义标签
labell = tkinter.Label(window, font=("微软雅黑", 20),
                       bg="#C0FAF9", fg="#828282", anchor="se",
                       textvariable=show_top, bd="9")
label2 = tkinter.Label(window, font=("微软雅黑", 30),
                       bg="#EEE9E9", fg="black", anchor="se",
                       textvariable=show_bottom, bd="9")

labell.place(width=600, height=140)
label2.place(y=140, width=600, height=90)

# 定义按钮
def create_button(window, text, x, y, command):
    return tkinter.Button(window, text=text, font=("微软雅黑", 20),
                          fg="black", bd=5, command=command).place(x=x, y=y, width=150, height=55)

buttons = {
    '0': (150, 450), '1': (0, 395), '2': (150, 395), '3': (300, 395),
    '4': (0, 340), '5': (150, 340), '6': (300, 340), '7': (0, 285),
    '8': (150, 285), '9': (300, 285), '.': (300, 450)
}

for btn_text, (x, y) in buttons.items():
    create_button(window, btn_text, x, y, lambda t=btn_text: pressNum(t))

btn_ac = tkinter.Button(window, text="AC", font=("微软雅黑", 20),
                        fg="orange", bd=5,
                        command=lambda: pressSign("AC"))
btn_back = tkinter.Button(window, text="←", font=("微软雅黑", 20),
                          fg="orange", bd=5,
                          command=lambda: pressSign("b"))
btn_division = tkinter.Button(window, text="÷", font=("微软雅黑", 20),
                              fg="orange", bd=5,
                              command=lambda: pressSign("/"))
btn_multiplication = tkinter.Button(window, text="×", font=("微软雅黑", 20),
                                    fg="orange", bd=5,
                                    command=lambda: pressSign("*"))
btn_subtraction = tkinter.Button(window, text="-", font=("微软雅黑", 20),
                                 fg="orange", bd=5,
                                 command=lambda: pressSign("-"))
btn_addition = tkinter.Button(window, text="+", font=("微软雅黑", 20),
                              fg="orange", bd=5,
                              command=lambda: pressSign("+"))
btn_equal = tkinter.Button(window, text="=", font=("微软雅黑", 20),
                           fg="#4F4F4F", bd=5,
                           command=lambda: pressEqual())
btn_percent = tkinter.Button(window, text="%", font=("微软雅黑", 20),
                             fg="orange", bd=5,
                             command=lambda: pressSign("%"))

btn_ac.place(x=0, y=230, width=150, height=55)
btn_back.place(x=150, y=230, width=150, height=55)
btn_division.place(x=300, y=230, width=150, height=55)
btn_multiplication.place(x=450, y=230, width=150, height=55)
btn_subtraction.place(x=450, y=285, width=150, height=55)
btn_addition.place(x=450, y=340, width=150, height=55)
btn_equal.place(x=450, y=395, width=150, height=110)
btn_percent.place(x=0, y=450, width=150, height=55)

# 全局变量
lists = []
isPressSign = False
isPressEqual = False

# 定义函数
def pressNum(num):
    global lists
    global isPressSign
    global isPressEqual

    if isPressSign:
        show_bottom.set(0)
        isPressSign = False

    if isPressEqual:
        show_bottom.set(0)
        isPressEqual = False

    original_num = show_bottom.get()
    if original_num == "0":
        show_bottom.set(num)
    else:
        existing_num = original_num + num
        show_bottom.set(existing_num)

def pressSign(sign):
    global lists
    global isPressSign

    num = show_bottom.get()
    lists.append(num)

    lists.append(sign)
    isPressSign = True

    if sign == "AC":
        lists.clear()
        show_bottom.set(0)

    if sign == "b":
        a = num[0:-1]
        lists.clear()
        show_bottom.set(a)

        if len(a) == 0:
            show_bottom.set(0)

def pressEqual():
    global lists
    global isPressEqual

    isPressEqual = True
    num = show_bottom.get()
    lists.append(num)
    formula = "".join(lists)
    try:
        result = eval(formula)
    except:
        result = "Error"
    show_bottom.set(result)
    show_top.set(formula)
    lists.clear()

window.mainloop()


此代码修正了上述问题,并使计算器正常运行。请注意,eval函数用于计算表达式时存在安全风险,因此仅在信任输入的情况下使用。在生产环境中,应使用更安全的解析和计算方法。

你可以先测试一下,稍后我也会测试更正后的代码的可行性

2#2024-5-31 19:13:07回复收起回复
苦力怕论坛,感谢有您~
回复

使用道具举报

 楼主|  发表于 2024-5-31 19:51:12 来自手机|显示全部楼层 IP:陕西省
Ucraft 发表于 2024-5-31 19:48
借用ChatGPT-4o对该文件进行了分析:
您的Python代码中有几个问题,需要进行修正。以下是详细的分析和建议: ...

byd科技改变生活
3#2024-5-31 19:51:12回复收起回复
苦力怕论坛,感谢有您~
回复

使用道具举报

 发表于 2024-5-31 20:21:07 来自手机|显示全部楼层 IP:浙江省
事Python大佬)
4#2024-5-31 20:21:07回复收起回复
苦力怕论坛,感谢有您~
回复

使用道具举报

 楼主|  发表于 2024-5-31 20:27:46 来自手机|显示全部楼层 IP:陕西省
Crigo 发表于 2024-5-31 20:21
事Python大佬)

事刚刚入门)
5#2024-5-31 20:27:46收起回复
Crigo2024-5-31 20:41IP:浙江省
回复
刚刚入门写的比我学了几个月好)
事大佬)
苦力怕论坛,感谢有您~
回复

使用道具举报

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-10-21 22:48

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号