chore: 添加项目基础结构和示例代码
- 创建 .idea 目录和相关配置文件,设置项目结构 - 添加多个课堂成果示例代码,涵盖不同主题和功能 - 创建和配置 .gitignore 文件,忽略特定文件和目录
This commit is contained in:
parent
7df250638d
commit
fd2063095c
4
.idea/material_theme_project_new.xml
generated
4
.idea/material_theme_project_new.xml
generated
@ -3,7 +3,9 @@
|
||||
<component name="MaterialThemeProjectNewConfig">
|
||||
<option name="metadata">
|
||||
<MTProjectMetadataState>
|
||||
<option name="userId" value="619417ac:197d81ada1e:-7fc2" />
|
||||
<option name="migrated" value="true" />
|
||||
<option name="pristineConfig" value="false" />
|
||||
<option name="userId" value="21c1c7ee:193388d497c:-7ff9" />
|
||||
</MTProjectMetadataState>
|
||||
</option>
|
||||
</component>
|
||||
|
||||
3
.idea/misc.xml
generated
3
.idea/misc.xml
generated
@ -1,4 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.13" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13" project-jdk-type="Python SDK" />
|
||||
</project>
|
||||
29
test.py
Normal file
29
test.py
Normal file
@ -0,0 +1,29 @@
|
||||
import random
|
||||
import os
|
||||
import time
|
||||
jiang=["特等奖","一等奖","二等奖","三等奖","安慰奖"]
|
||||
dictionary = {"1 2":"特等奖","3 10":"一等奖","11 20":"二等奖","21 40":"三等奖","41 100":"安慰奖"}
|
||||
print("欢迎来到抽奖系统")
|
||||
while 1:
|
||||
if input("是否抽奖(y/n)")=='y':
|
||||
num=random.randint(1,100)
|
||||
|
||||
sleep_time=0.1
|
||||
index = 0
|
||||
for i in range(10):
|
||||
os.system('cls')
|
||||
print(f"正在抽奖{jiang[index]}")
|
||||
index = (index+1) % len(jiang)
|
||||
time.sleep(sleep_time)
|
||||
sleep_time += 0.05
|
||||
os.system('cls')
|
||||
|
||||
for key,value in dictionary.items():
|
||||
fan=key.split(" ")
|
||||
if num in [i for i in range(int(fan[0]),int(fan[1])+1)]:
|
||||
print(f"恭喜您中奖了{value}")
|
||||
else:
|
||||
print("欢迎下次再来")
|
||||
break
|
||||
|
||||
os.system('pause')
|
||||
29
第42讲抽奖系统/课堂成果/基础抽奖.py
Normal file
29
第42讲抽奖系统/课堂成果/基础抽奖.py
Normal file
@ -0,0 +1,29 @@
|
||||
import random
|
||||
import os
|
||||
import time
|
||||
jiang=["特等奖","一等奖","二等奖","三等奖","安慰奖"]
|
||||
dictionary = {"1 2":"特等奖","3 10":"一等奖","11 20":"二等奖","21 40":"三等奖","41 100":"安慰奖"}
|
||||
print("欢迎来到抽奖系统")
|
||||
while 1:
|
||||
if input("是否抽奖(y/n)")=='y':
|
||||
num=random.randint(1,100)
|
||||
|
||||
sleep_time=0.1
|
||||
index = 0
|
||||
for i in range(10):
|
||||
os.system('cls')
|
||||
print(f"正在抽奖{jiang[index]}")
|
||||
index = (index+1) % len(jiang)
|
||||
time.sleep(sleep_time)
|
||||
sleep_time += 0.05
|
||||
os.system('cls')
|
||||
|
||||
for key,value in dictionary.items():
|
||||
fan=key.split(" ")
|
||||
if num in [i for i in range(int(fan[0]),int(fan[1])+1)]:
|
||||
print(f"恭喜您中奖了{value}")
|
||||
else:
|
||||
print("欢迎下次再来")
|
||||
break
|
||||
|
||||
os.system('pause')
|
||||
141
第42讲抽奖系统/课堂成果/抽奖系统.py
Normal file
141
第42讲抽奖系统/课堂成果/抽奖系统.py
Normal file
@ -0,0 +1,141 @@
|
||||
import tkinter as tk
|
||||
import random
|
||||
|
||||
# 奖项
|
||||
prize_list = [
|
||||
("好好听奖", 2),
|
||||
("特等奖", 8),
|
||||
("一等奖", 10),
|
||||
("二等奖", 15),
|
||||
("三等奖", 25),
|
||||
("安慰奖", 40)
|
||||
]
|
||||
prizes = [p[0] for p in prize_list]
|
||||
weights = [p[1] for p in prize_list]
|
||||
|
||||
ITEM_HEIGHT = 40
|
||||
VISIBLE_ROWS = 5
|
||||
|
||||
class SlotColumn:
|
||||
def __init__(self, master, width=120, font=("微软雅黑", 16)):
|
||||
self.canvas = tk.Canvas(master, width=width, height=ITEM_HEIGHT * VISIBLE_ROWS, bg="#fff", highlightthickness=1, highlightbackground="#ccc")
|
||||
self.canvas.pack(side=tk.LEFT, padx=10)
|
||||
self.font = font
|
||||
self.width = width
|
||||
self.center_y = (ITEM_HEIGHT * VISIBLE_ROWS) // 2
|
||||
self.items = [random.choice(prizes) for _ in range(50)]
|
||||
self.draw_items()
|
||||
|
||||
# 添加中奖框
|
||||
self.canvas.create_rectangle(
|
||||
2, self.center_y - ITEM_HEIGHT // 2, self.width - 2, self.center_y + ITEM_HEIGHT // 2,
|
||||
outline="#ff6600", width=3, dash=(5, 3)
|
||||
)
|
||||
|
||||
def draw_items(self):
|
||||
self.canvas.delete("item")
|
||||
for i, text in enumerate(self.items):
|
||||
y = i * ITEM_HEIGHT
|
||||
self.canvas.create_text(self.width // 2, y, text=text, font=self.font, fill="#d43f3a", tags="item")
|
||||
|
||||
def shift(self):
|
||||
self.items.pop(0)
|
||||
self.items.append(random.choice(prizes))
|
||||
self.draw_items()
|
||||
|
||||
def stop_on_result(self, result_text):
|
||||
"""强制将中奖项显示在中间,并停止滚动"""
|
||||
center_index = VISIBLE_ROWS // 2 + 1
|
||||
self.items = [random.choice(prizes) for _ in range(center_index)] + [result_text] + [random.choice(prizes) for _ in range(20)]
|
||||
self.draw_items()
|
||||
|
||||
def get_result(self):
|
||||
return self.items[VISIBLE_ROWS // 2 + 1]
|
||||
|
||||
|
||||
class SlotMachineApp:
|
||||
def __init__(self, root):
|
||||
self.root = root
|
||||
self.root.title("🎰 老虎机真实滚动")
|
||||
self.root.geometry("500x580")
|
||||
self.root.configure(bg="#ffffff")
|
||||
|
||||
self.title = tk.Label(root, text="🎰 老虎机幸运抽奖 🎰", font=("微软雅黑", 20), bg="#ffffff", fg="#222")
|
||||
self.title.pack(pady=10)
|
||||
|
||||
self.slot_frame = tk.Frame(root, bg="#ffffff")
|
||||
self.slot_frame.pack(pady=10)
|
||||
|
||||
self.columns = [SlotColumn(self.slot_frame) for _ in range(3)]
|
||||
|
||||
self.spin_button = tk.Button(root, text="🎯 开始抽奖", font=("微软雅黑", 16), bg="#28a745", fg="white", command=self.start_spin)
|
||||
self.spin_button.pack(pady=20)
|
||||
|
||||
self.result_label = tk.Label(root, text="", font=("微软雅黑", 16), fg="#d9534f", bg="#ffffff")
|
||||
self.result_label.pack(pady=10)
|
||||
|
||||
self.history = tk.Text(root, height=6, width=55, font=("微软雅黑", 10), state="disabled", bg="#f8f8f8")
|
||||
self.history.pack(padx=20, pady=10)
|
||||
|
||||
self.running = False
|
||||
|
||||
def start_spin(self):
|
||||
if self.running:
|
||||
return
|
||||
|
||||
self.running = True
|
||||
self.result_label.config(text="")
|
||||
self.spin_button.config(state="disabled")
|
||||
|
||||
self.final_result = random.choices(prizes, weights=weights, k=1)[0]
|
||||
|
||||
self.delay_curves = [
|
||||
self.generate_delay_curve(100),
|
||||
self.generate_delay_curve(130),
|
||||
self.generate_delay_curve(160)
|
||||
]
|
||||
|
||||
self.start_column(0)
|
||||
self.root.after(300, lambda: self.start_column(1))
|
||||
self.root.after(600, lambda: self.start_column(2))
|
||||
|
||||
def generate_delay_curve(self, steps):
|
||||
delays = []
|
||||
delay = 5
|
||||
for i in range(steps):
|
||||
delays.append(delay)
|
||||
if delay < 30:
|
||||
delay += 1
|
||||
elif delay < 80:
|
||||
delay += 2
|
||||
else:
|
||||
delay += 5
|
||||
return delays
|
||||
|
||||
def start_column(self, index):
|
||||
def spin():
|
||||
if self.delay_curves[index]:
|
||||
self.columns[index].shift()
|
||||
delay = self.delay_curves[index].pop(0)
|
||||
self.root.after(delay, spin)
|
||||
else:
|
||||
# 停止后对齐中奖项(只中间列)
|
||||
if index == 1:
|
||||
self.columns[1].stop_on_result(self.final_result)
|
||||
self.show_result()
|
||||
spin()
|
||||
|
||||
def show_result(self):
|
||||
self.result_label.config(text=f"🎉 恭喜你抽中:{self.final_result} 🎉")
|
||||
self.history.config(state="normal")
|
||||
self.history.insert("end", f"🎯 抽中:{self.final_result}\n")
|
||||
self.history.see("end")
|
||||
self.history.config(state="disabled")
|
||||
self.spin_button.config(state="normal")
|
||||
self.running = False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
root = tk.Tk()
|
||||
app = SlotMachineApp(root)
|
||||
root.mainloop()
|
||||
Loading…
x
Reference in New Issue
Block a user