You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现基于用户输入的列表项评分排序与存储?

解决思路与代码优化

1. 用字典关联项目与分数

直接用Python字典存储每个项目的分数,键为项目名称,值为对应分数,初始值设为0,完美实现项目与分数的绑定。

2. 简化文件读取逻辑

原代码处理换行的操作可以用strip()方法替代,直接去除每行的换行符和首尾空白,代码更简洁。

3. 避免重复比较同一项目

循环中确保随机选中的两个项目不同,避免无意义的自我比较。

4. 输入验证与分数更新

添加输入合法性校验,仅接受1或2的输入,根据选择对应更新分数:选中项+1,另一项-1。

5. 排序并保存结果

用户通过Ctrl+C终止程序后,按分数降序排序项目,将排名、项目名、分数保存到新的TXT文件中。


完整优化代码

import random

# 读取项目列表并初始化分数字典
items = []
with open('items.txt', 'r', encoding='utf-8') as f:
    for line in f:
        item = line.strip()
        if item:  # 跳过空行
            items.append(item)

# 初始化分数字典,所有项目初始分数为0
score_dict = {item: 0 for item in items}

try:
    while True:
        # 随机选中两个不同的项目
        idx1, idx2 = random.sample(range(len(items)), 2)
        item1 = items[idx1]
        item2 = items[idx2]

        # 展示选项并获取用户输入
        print(f"\n哪个更优?\n1. {item1}\n2. {item2}")
        answer = input("请输入1或2:").strip()

        # 处理合法输入,更新分数
        if answer == '1':
            score_dict[item1] += 1
            score_dict[item2] -= 1
        elif answer == '2':
            score_dict[item2] += 1
            score_dict[item1] -= 1
        else:
            print("输入无效,请输入1或2!")

except KeyboardInterrupt:
    # 用户终止程序后,排序并保存结果
    print("\n正在保存结果...")
    # 按分数降序排序,分数相同则按项目名称排序
    sorted_items = sorted(score_dict.items(), key=lambda x: (-x[1], x[0]))

    # 保存到文件
    with open('ranked_items.txt', 'w', encoding='utf-8') as f:
        f.write("排名\t项目名称\t分数\n")
        for rank, (item, score) in enumerate(sorted_items, 1):
            f.write(f"{rank}\t{item}\t{score}\n")
    print("结果已保存到ranked_items.txt")

代码说明

  • 字典存储分数:score_dict实现项目与分数的快速关联,查找和更新操作高效。
  • 随机选不同项目:random.sample直接生成两个不同的索引,避免重复比较。
  • 输入验证:仅响应合法输入,错误输入会给出提示。
  • 优雅终止:捕获KeyboardInterrupt异常,用户按Ctrl+C即可停止程序并自动保存结果。
  • 排序保存:按分数从高到低排序,分数相同时按项目名排序,保存的文件包含排名、项目和分数,结构清晰。

内容的提问来源于stack exchange,提问作者rorycoding21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:15:52