python - 在Python的类中将列表从一个函数传递给另一个函数

标签 python class audio mp3

这是我在python中的简单Mp3播放器的代码。
创建一个函数来显示文件夹中的歌曲并将其添加到列表中:songs_list
还有另一种功能,可根据歌曲编号播放歌曲。如何将songs_list发送到此功能?
这是我的代码:

    import os
    import sys
    import random
    from playsound import playsound
    
    
    class Mp3Player:
        def __init__(self, path):
            self.path = path
    
        def display_songs(self):
            songs_list = []
    
            for dirpath, dirname, filename in os.walk(path):
                for file in filename:
                    if file.endswith(".mp3"):
                        songs_list.append(file)
            j = 1
            for i in songs_list:
                index_of_mp3 = i.index(".mp3")
                song_list = str(j) + ". " + i[:index_of_mp3]
                j += 1
                print(song_list)
            print(" ")
    
        def play_songby_number(self, songs_list):
            song_choice = int(input("Enter song number: "))
            playsound(songs_list[song_choice - 1])
    
    
    
        def suffle_play(self):
            pass
    
    
    path = input("Enter path: ")
    my_mp3_player = Mp3Player(path)
    my_mp3_player.display_songs()
    choice_play = int(input("Please enter a choice: \n1. Play a song by it's number \n2. Shuffle play songs \nYour choice: "))
    if choice_play == 1:
        my_mp3_player.play_songby_number()
    elif choice_play == 2:
        my_mp3_player.suffle_play()
    else:
        print("Please enter a valid number")
这是我得到的错误:
Traceback (most recent call last):
  File "D:/Python Projects/MP3-Player-Python/mp3_player_v1.0.py", line 41, in <module>
    my_mp3_player.play_songby_number()
TypeError: play_songby_number() missing 1 required positional argument: 'songs_list'
请注意,该代码不完整。

最佳答案

您可以尝试将歌曲列表保存在类中作为实例属性并使用它。

import os
import sys
import random
from playsound import playsound


class Mp3Player:
    def __init__(self, path):
        self.path = path
        self.song_list = None

    def display_songs(self):
        songs_list = []

        for dirpath, dirname, filename in os.walk(path):
            for file in filename:
                if file.endswith(".mp3"):
                    songs_list.append(file)
        j = 1
        for i in songs_list:
            index_of_mp3 = i.index(".mp3")
            song = str(j) + ". " + i[:index_of_mp3]
            j += 1
            print(song)
        # save the song_list in the instance
        self.song_list = songs_list
        print(" ")

    def play_songby_number(self):
        # use the song list from the instance
        if not self.song_list:
            raise Exception("No songs loaded yet. Try displaying songs before playing")
        song_choice = int(input("Enter song number: "))
        playsound(self.song_list[song_choice - 1])

    def suffle_play(self):
        pass


path = input("Enter path: ")
my_mp3_player = Mp3Player(path)
my_mp3_player.display_songs()
choice_play = int(
    input("Please enter a choice: \n1. Play a song by it's number \n2. Shuffle play songs \nYour choice: "))
if choice_play == 1:
    my_mp3_player.play_songby_number()
elif choice_play == 2:
    my_mp3_player.suffle_play()
else:
    print("Please enter a valid number")
一些使事情更清洁的建议。
  • display_songs方法的显示和读取文件名部分拆分为单独的方法。
  • 强制加载歌曲,然后才能播放。
  • 关于python - 在Python的类中将列表从一个函数传递给另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64443139/

    相关文章:

    angularjs - HTML代码中的音频元素,但不可见

    python - 有限的 celery 节拍任务

    python - 在windows平台上的Xampp上运行Python代码

    c++ - 使用函数地址的模板类的唯一数字 ID

    c++ - 异构数组中的元素可以知道它是什么模板类型吗?

    c++ - 一个类是 POD 从二进制文件中读取它就足够了吗?

    python - 比较两列中的值并提取数据框中第三列的值

    python - 如何在包含软件包的存储库之外构建轮子?

    html - 单击链接时在新选项卡上运行音频-HTML

    java - Android:SoundPool/录制音频