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

Python中如何将随机songID传入函数与类以展示随机歌曲信息

解决类实现随机歌曲展示的问题

核心问题分析

你遇到的songId始终为0的问题,本质是随机生成的ID没有传递到类的实例中,同时readSongsJSON函数没有根据随机ID获取对应歌曲数据。下面是具体的修复步骤和代码示例:


步骤1:让readSongsJSON接收随机ID参数

修改函数,使其根据传入的songId从JSON文件中返回对应歌曲的详情(这里假设你的JSON结构是[{"id": 1, "title": "xxx", ...}, ...],如果是其他结构可自行调整):

import json

def readSongsJSON(song_id):
    with open("songs.json", "r", encoding="utf-8") as f:
        songs = json.load(f)
    # 遍历找到对应ID的歌曲
    for song in songs:
        if song["id"] == song_id:
            return song
    # 未找到时返回None
    return None

步骤2:重构songDetails类

让类在初始化时接收歌曲数据,直接从数据中提取songId和其他属性,而不是用默认值0:

class songDetails:
    def __init__(self, song_data):
        # 从传入的歌曲数据中赋值属性
        self.songId = song_data.get("id", 0)
        self.title = song_data.get("title", "未知歌曲")
        self.artist = song_data.get("artist", "未知歌手")
        # 可根据你的JSON结构添加更多属性

    def display_song(self):
        # 展示歌曲详情的方法
        print(f"随机推荐歌曲:")
        print(f"ID: {self.songId}")
        print(f"标题:{self.title}")
        print(f"歌手:{self.artist}")

步骤3:修改randomSong函数传递随机ID

先获取所有有效的歌曲ID(避免生成不存在的ID),生成随机ID后传给readSongsJSON,再将返回的歌曲数据传入songDetails实例:

import random
import typer

def randomSong():
    # 先读取所有歌曲,获取有效ID列表
    with open("songs.json", "r", encoding="utf-8") as f:
        songs = json.load(f)
    valid_song_ids = [song["id"] for song in songs]
    
    # 随机选择一个ID
    random_song_id = random.choice(valid_song_ids)
    # 根据ID获取歌曲数据
    song_data = readSongsJSON(random_song_id)
    
    if not song_data:
        print(f"未找到ID为{random_song_id}的歌曲")
        return
    
    # 实例化类并展示结果
    song = songDetails(song_data)
    song.display_song()

# 触发Typer命令
if __name__ == "__main__":
    typer.run(randomSong)

关键注意点

  • 如果你的JSON文件是以songId为键的字典(比如{"1": {"title": "xxx"}, ...}),readSongsJSON可以简化为直接返回songs.get(str(song_id))(注意ID的类型匹配)。
  • 始终确保随机生成的ID在JSON的有效ID范围内,避免出现找不到歌曲的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:05:28