20251231 2025-2026-2 《Python程序设计》实验二报告

20251231 2025-2026-2 《Python程序设计》实验二报告

课程:《Python程序设计》
班级: 2512
姓名: 石有琛
学号:20251231
实验教师:王志强
实验日期:2026年4月13日
必修/选修: 公选课

1.实验内容

(1)编写计算器程序
设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
考核基本语法、判定语句、循环语句、逻辑运算等知识点。
(2)用LLM生成一个计算器程序
介绍相关功能,并分析生成的程序代码含义。
对比分析自写程序与生成程序的区别(好与坏)。

2. 实验过程及结果

(1)人工设计
import math print("----计算器----") while True: print("\n请使用以下功能:") print("1.加法") print("2.减法") print("3.乘法") print("4.除法") print("5.平方") print("6.开方") print("7.log运算") print("8.退出程序") choice=int(input("\n请输入你的选择(1-8):")) if choice==8: print("已退出!!!") break elif choice==5 or choice==6 or choice==7: num=float(input("请输入一个数字:")) if choice==5: result=num**2 elif choice==6: result=num**0.5 elif choice==7: if num<=0: result="错误:对数定义域为正数!" else: result=math.log(num) print(f"计算结果:{result}") elif choice==1 or choice==2 or choice==3 or choice==4: num1=float(input("请输入第一个数字:")) num2=float(input("请输入第二个数字:")) if choice==1: result=num1+num2 elif choice==2: result=num1-num2 elif choice==3: result=num1*num2 elif choice==4: if num2==0: result="错误:除数不能为0!" else: result=num1/num2 print(f"计算结果:{result}") else: print("选择错误!请输入1-8的数!")
设计过程:
1.调用math函数以计算log。
2.分八种情况编写死循环,根据输入判断计算方式以及是否退出。
3.根据不同数字得出计算结果并输出。
(2)大模型生成
`import tkinter as tk
from tkinter import ttk, scrolledtext, messagebox
import math
import random
import threading
import time
from decimal import Decimal

class SuperThunderBombCalculator:
def init(self, root):
self.root = root
self.root.title("🔥螺旋飞天复杂雷霆球炸猪刚计算器🚀💥✨")
self.root.geometry("1050x780")
self.root.resizable(True, True)
self.root.configure(bg="#1A1A2E")

    self.current_input = ""
    self.calc_history = []
    self.animation_running = False
    self.emojis = ["🔥", "⚡️", "💥", "🚀", "🐷", "✨", "🌟", "🎉", "🎊", "💯", "😎", "🤯", "🥳", "🌀", "🌪️", "🧨", "🎆", "🎇"]

    self.setup_styles()
    self.create_widgets()
    self.start_fly_animation()

def setup_styles(self):
    self.style = ttk.Style()
    self.style.theme_use("clam")
    self.style.configure("Thunder.TButton", font=("微软雅黑", 14, "bold"), background="#FF4D00", foreground="white",
                         borderwidth=3)
    self.style.map("Thunder.TButton", background=[("active", "#FF2D00"), ("pressed", "#CC0000")])
    self.style.configure("Func.TButton", font=("微软雅黑", 12, "bold"), background="#4E4FEB", foreground="white")
    self.style.configure("Num.TButton", font=("微软雅黑", 16, "bold"), background="#068FFF", foreground="white")
    self.style.configure("Emoji.TButton", font=("微软雅黑", 18), background="#FFD700", foreground="#1A1A2E",
                         borderwidth=4)

def create_widgets(self):
    title_frame = tk.Frame(self.root, bg="#1A1A2E", pady=10)
    title_frame.pack(fill=tk.X)
    tk.Label(title_frame, text="🐷⚡️螺旋飞天复杂雷霆球炸猪刚计算器💥🚀✨",
             font=("华文琥珀", 26, "bold"), bg="#1A1A2E", fg="#FFD700").pack()

    display_frame = tk.Frame(self.root, bg="#16213E", padx=20, pady=20)
    display_frame.pack(fill=tk.X, padx=20, pady=10)
    self.display_var = tk.StringVar(value="0")
    tk.Entry(display_frame, textvariable=self.display_var, font=("Digital-7", 42, "bold"),
             bg="#0F3460", fg="#00FF9C", justify=tk.RIGHT, bd=10, relief=tk.SUNKEN).pack(fill=tk.X, ipady=15)
    self.status_label = tk.Label(display_frame, text=f"📊就绪 {random.choice(self.emojis)}",
                                 font=("微软雅黑", 14), bg="#16213E", fg="#FFE600")
    self.status_label.pack(anchor=tk.W, pady=5)

    main_frame = tk.Frame(self.root, bg="#1A1A2E")
    main_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=10)
    btn_frame = tk.Frame(main_frame, bg="#1A1A2E")
    btn_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
    right_frame = tk.Frame(main_frame, bg="#1A1A2E", width=320)
    right_frame.pack(side=tk.RIGHT, fill=tk.Y, padx=10)

    btn_rows = [
        ["🌀螺旋", "🌪️雷霆", "🧨炸猪刚", "🎆清空", "🎇撤销"],
        ["sin", "cos", "tan", "π", "e"],
        ["log", "ln", "x²", "x³", "√"],
        ["2进制", "8进制", "10进制", "16进制", "1/x"],
        ["7", "8", "9", "/", "("],
        ["4", "5", "6", "*", ")"],
        ["1", "2", "3", "-", "%"],
        ["0", ".", "=", "+", "随机😜"]
    ]

    for i, row in enumerate(btn_rows):
        for j, text in enumerate(row):
            if text in ["🌀螺旋", "🌪️雷霆", "🧨炸猪刚", "🎆清空", "🎇撤销"]:
                s = "Emoji.TButton"
            elif text in ["sin", "cos", "tan", "log", "ln", "π", "e", "x²", "x³", "√", "进制"]:
                s = "Func.TButton"
            elif text == "=":
                s = "Thunder.TButton"
            else:
                s = "Num.TButton"
            ttk.Button(btn_frame, text=text, style=s,
                       command=lambda t=text: self.on_btn_click(t)
                       ).grid(row=i, column=j, padx=4, pady=4, ipadx=8, ipady=8, sticky=tk.NSEW)
            btn_frame.grid_columnconfigure(j, weight=1)
        btn_frame.grid_rowconfigure(i, weight=1)

    unit_frame = tk.LabelFrame(right_frame, text=f"📏单位转换{random.choice(self.emojis)}",
                               font=("微软雅黑", 12, "bold"), bg="#16213E", fg="#FFD700")
    unit_frame.pack(fill=tk.X, pady=5)
    self.unit_type = tk.StringVar(value="温度")
    ttk.Combobox(unit_frame, textvariable=self.unit_type, values=["温度", "长度", "重量", "时间"],
                 state="readonly", font=("微软雅黑", 11)).pack(fill=tk.X, padx=5, pady=5)
    ttk.Button(unit_frame, text="🚀转换计算", style="Func.TButton",
               command=self.unit_convert).pack(fill=tk.X, padx=5, pady=3)

    hist_frame = tk.LabelFrame(right_frame, text=f"📜计算历史{random.choice(self.emojis)}",
                               font=("微软雅黑", 12, "bold"), bg="#16213E", fg="#FFD700")
    hist_frame.pack(fill=tk.BOTH, expand=True, pady=5)
    self.history_text = scrolledtext.ScrolledText(hist_frame, height=12, font=("Consolas", 10),
                                                  bg="#0F3460", fg="#00FF9C")
    self.history_text.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)

    tk.Label(self.root, text="💥本计算器自带螺旋飞天+雷霆炸猪刚特效🤯",
             font=("微软雅黑", 12, "italic"), bg="#1A1A2E", fg="#FF5555").pack(pady=5)

def on_btn_click(self, text):
    self.status_label.config(text=f"📊计算中 {random.choice(self.emojis)}")
    if text == "🎆清空":
        self.current_input = ""
        self.display_var.set("0")
        return
    if text == "🎇撤销":
        self.current_input = self.current_input[:-1]
        self.display_var.set(self.current_input or "0")
        return
    if text == "🌀螺旋":
        self.start_fly_animation()
        return
    if text == "🌪️雷霆":
        self.thunder_effect()
        return
    if text == "🧨炸猪刚":
        self.bomb_pig_effect()
        return
    if text == "=":
        self.calculate_result()
        return
    if text == "随机😜":
        self.current_input += random.choice(self.emojis)
        self.display_var.set(self.current_input)
        return

    funcs = {"sin": math.sin, "cos": math.cos, "tan": math.tan, "log": math.log10, "ln": math.log, "π": math.pi,
             "e": math.e}
    if text in funcs:
        try:
            v = float(self.current_input or 0)
            r = funcs[text](v)
            self.current_input = str(r)
            self.display_var.set(round(r, 8))
            return
        except:
            self.display_var.set("错误⚠️")
            return

    if text == "x²":
        self.current_input += "**2"
    elif text == "x³":
        self.current_input += "**3"
    elif text == "√":
        self.current_input += "math.sqrt("
    elif text == "1/x":
        self.current_input = f"1/({self.current_input})"
    elif text == "2进制":
        self.convert_base(2)
    elif text == "8进制":
        self.convert_base(8)
    elif text == "10进制":
        self.convert_base(10)
    elif text == "16进制":
        self.convert_base(16)
    else:
        self.current_input += text

    self.display_var.set(self.current_input)

def calculate_result(self):
    try:
        res = eval(self.current_input, {"math": math}, {})
        his = f"{self.current_input} = {res}"
        self.calc_history.append(his)
        self.history_text.insert(tk.END, his + "\n")
        self.current_input = str(res)
        self.display_var.set(round(Decimal(res), 10))
        self.status_label.config(text=f"✅完成 {random.choice(self.emojis)}")
    except:
        self.display_var.set("⚠️错误")

def convert_base(self, b):
    try:
        n = int(float(self.current_input))
        self.display_var.set({2: bin, 8: oct, 10: str, 16: hex}[b](n))
    except:
        self.display_var.set("⚠️进制错误")

def unit_convert(self):
    try:
        v = float(self.current_input or 0)
        t = self.unit_type.get()
        r = {"温度": v * 9 / 5 + 32, "长度": v * 100, "重量": v * 1000, "时间": v * 60}[t]
        self.display_var.set(f"{v}{t}→{r}")
        self.current_input = str(r)
    except:
        self.display_var.set("⚠️单位错误")

def start_fly_animation(self):
    if self.animation_running: return
    self.animation_running = True

    def a():
        for _ in range(20):
            self.root.title(f"🚀飞天{random.choice(['🌀', '✨', '🌟'])}雷霆{random.choice(['⚡️', '💥'])}")
            time.sleep(0.1)
        self.root.title("🔥螺旋飞天复杂雷霆球炸猪刚计算器🚀💥✨")
        self.animation_running = False

    threading.Thread(target=a, daemon=True).start()

def thunder_effect(self):
    def s():
        x, y = self.root.winfo_x(), self.root.winfo_y()
        for _ in range(10):
            self.root.geometry(f"+{x + random.randint(-4, 4)}+{y + random.randint(-4, 4)}")
            time.sleep(0.05)
        self.root.geometry(f"+{x}+{y}")

    threading.Thread(target=s, daemon=True).start()
    messagebox.showinfo("⚡️雷霆", random.choice(self.emojis) * 6)

def bomb_pig_effect(self):
    e = ["💥", "🧨", "🎆", "🎇", "🐷", "🔥"]
    messagebox.showwarning("💥炸猪刚", f"{' '.join(random.choices(e, k=8))}\n炸猪刚成功!螺旋飞天完成!")
    self.root.config(bg=random.choice(["#F00", "#F80", "#FF0", "#F0F"]))
    self.root.after(1000, lambda: self.root.config(bg="#1A1A2E"))

if name == "main":
root = tk.Tk()
app = SuperThunderBombCalculator(root)
root.mainloop()`

3. 实验过程中遇到的问题和解决过程

  • 问题1:编写代码时不够熟练,出现了因为代码未对其导致代码报错的情况。
  • 问题1解决方案:经过多次检查确认,得出最终结果。
  • 问题2:不知道如何实现log计算。
  • 问题2解决方案:通过上网搜索得出调用函数的方法。

其他(感悟、思考等)

1.今后编写代码时一定要更加细心严谨,养成认真细致的编码习惯。无论是基础的语法格式、符号拼写,还是核心的逻辑架构、功能实现,都要逐行检查、反复推敲,杜绝因粗心疏忽引发语法错误、逻辑漏洞等问题,逐步提升代码的规范性与准确性。
2.AI 生成的代码存在诸多值得借鉴学习的闪光点,无论是代码结构的搭建、功能逻辑的梳理,还是界面设计、效率优化等方面,都比我自主编写的代码更加完善成熟。后续我要多学习参考 AI 的优秀代码思路,认真拆解其编码技巧与实现逻辑,吸收其中的可取之处,不断弥补自身编程短板,稳步提升自己的代码编写能力与综合开发水平。

参考资料

posted @ 2026-04-13 21:37  eocean  阅读(6)  评论(0)    收藏  举报