# 新网站一周年活动抽奖代码
import hashlib
# TODO: 2023年6月30日上证指数收盘价格
sse_index = "3202.06"
lucky_number = int(sse_index.split(".")[1])
print(f"630上证指数收盘价:{sse_index} 中奖参考数:{lucky_number}(昵称Hash转整数最后2位越接近该值排名越高)")
# TODO: 符合条件的参与用户微信昵称和参与时间
users = [
{"nickname": "用户昵称", "time": 202306270819}
]
# 对符合条件的用户进行抽奖排名
lottery_users = []
for user in users:
nickname = user["nickname"]
time = user["time"]
nickname_hash = hashlib.sha1(nickname.encode("utf-8")).hexdigest()
hash_number = int(nickname_hash, 16)
user_number = hash_number % (10**2)
lottery_users.append(
{
"nickname": nickname,
"time": time,
"nickname_hash": nickname_hash,
"hash_number": hash_number,
"user_number": user_number,
}
)
lottery_users.sort(key=lambda x: (abs(x["user_number"] - lucky_number), x["time"]))
# 输出排名结果表格
table_header = "| 排名 | 微信昵称 | 昵称Hash转整数最后2位数 | 昵称Hash对应的整数 | 昵称Hash | 参与时间 |\n| --- | --- | --- | --- | --- | --- |"
sorted_table_rows = []
for rank, row in enumerate(lottery_users, start=1):
sorted_table_rows.append(
f"| {rank} | {row['nickname']} | {row['user_number']} | {row['hash_number']} | {row['nickname_hash']} | {row['time']} |"
)
print("\n----------\n\n所有符合抽奖条件的用户列表如下,本次活动抽取前5名作为中奖用户:\n")
markdown_table = "{header}\n{rows}".format(header=table_header, rows="\n".join(sorted_table_rows))
print(markdown_table)
使用昵称抽奖可能出现相同昵称的情况,简单起见,我们采用人工鉴别处理。