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

Python歌曲销量统计:文件存储与数据更新方案咨询

简单可行的解决方案

先说说你现有代码的问题

  • musicChart是字符串而非列表,你想用,.join(musicChart)是错误的——join会把字符串拆成单个字符来拼接,完全不是你要的效果,而且也没法和recordsBought的索引对应上。
  • 直接写入str(musicChart)和str(recordsBought)会让文件内容变得一团糟(比如会带换行符、列表的方括号),后续根本没法正常读取解析。
  • 没有用with语句管理文件,容易出现文件未正确关闭的问题。

重构后的代码实现

下面是符合你需求的极简版本,包含增加销量、更新文件、读取显示三个核心功能:

chartFName = "Music Charts.txt"

# 初始化数据:用列表存歌曲名,和销量列表一一对应
musicChart = ["Kathys Song", "Sunshine on Leith", "White Christmas"]
recordsBought = [0, 0, 0]

def save_chart_to_file():
    # 用with自动管理文件,不用手动close
    with open(chartFName, "w", encoding="utf-8") as f:
        # 每行写入「歌曲名,销量」的格式,清晰易读
        for song, sales in zip(musicChart, recordsBought):
            f.write(f"{song},{sales}\n")

def load_chart_from_file():
    global musicChart, recordsBought
    try:
        with open(chartFName, "r", encoding="utf-8") as f:
            musicChart = []
            recordsBought = []
            for line in f:
                line = line.strip()
                if not line:
                    continue
                # 拆分每行的歌曲名和销量
                song, sales = line.split(",")
                musicChart.append(song)
                recordsBought.append(int(sales))
    except FileNotFoundError:
        # 如果文件不存在,就用初始化的数据
        pass

def add_sales(song_index, amount):
    # 检查索引是否合法
    if 0 <= song_index < len(recordsBought):
        recordsBought[song_index] += amount
        save_chart_to_file()
        print(f"已给{musicChart[song_index]}增加{amount}销量")
    else:
        print("无效的歌曲索引!")

def show_current_chart():
    print("\n当前音乐榜单销量:")
    for idx, (song, sales) in enumerate(zip(musicChart, recordsBought)):
        print(f"{idx+1}. {song} - {sales} 张")

# 先加载文件里的数据(如果有的话)
load_chart_from_file()

# 示例操作:给第2首歌加50销量
add_sales(1, 50)
# 显示当前榜单
show_current_chart()

关键说明

  • 用zip()把歌曲和销量配对,确保数据对应关系不会乱。
  • 文件格式用歌曲名,销量的CSV风格,既简单又方便后续解析。
  • with语句自动处理文件打开/关闭,避免资源泄漏。
  • 加入了基本的错误处理(比如文件不存在时用初始数据,索引检查)。
  • 函数拆分清晰,后续扩展功能(比如删除歌曲、修改歌曲名)也很方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:52:36