你怎么简化这个?

2024-04-26 02:24:04 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我有这个怪物,你怎么简化它?使用循环?你知道吗

if season in range(1, 5):
        if episode_num == 1:
            if season == 1:
                subprocess.Popen([player_path, s1_path + episodes_s1[0]])
            elif season == 2:
                subprocess.Popen([player_path, s2_path + episodes_s2[0]])
            elif season == 3:
                subprocess.Popen([player_path, s3_path + episodes_s3[0]])
            else:
                subprocess.Popen([player_path, s4_path + episodes_s4[0]])
        elif episode_num == 2:
            if season == 1:
                subprocess.Popen([player_path, s1_path + episodes_s1[episode_num-1]])
            elif season == 2:
                subprocess.Popen([player_path, s2_path + episodes_s2[episode_num-1]])
            elif season == 3:
                subprocess.Popen([player_path, s3_path + episodes_s3[episode_num-1]])
            else:
                subprocess.Popen([player_path, s4_path + episodes_s4[episode_num-1]])
        elif episode_num == 3:
            if season == 1:
                subprocess.Popen([player_path, s1_path + episodes_s1[episode_num-1]])
            elif season == 2:
                subprocess.Popen([player_path, s2_path + episodes_s2[episode_num-1]])
            elif season == 3:
                subprocess.Popen([player_path, s3_path + episodes_s3[episode_num-1]])
            else:
                subprocess.Popen([player_path, s4_path + episodes_s4[episode_num-1]])
        elif episode_num == 4: ...

集数是input()获取的

player_pathsX_path字符串

剧集


Tags: pathifs3elsenums4seasonsubprocess
3条回答

这是我的建议。我试图保持数据结构定义的可读性和简单性。主要思想是将sX_pathepisodes_sX链接起来(在我的例子中是一个列表):

d = ['unused',
     [s1_path,episodes_s1],
     [s2_path,episodes_s2],
     [s3_path,episodes_s3],
     [s4_path,episodes_s4]]

if (season in range(1,5)) and (episodeNum in range(1,len(d[season][1])+1)):
    subprocess.Popen([player_path, d[season][0] + d[season][1][episodeNum-1]])

比如说:

season_path = "s{}_path".format(season)
episodes = [
    episodes_s1,
    episodes_s2,
    episodes_s3,
    episodes_s4,
]

subprocess.Popen([player_path, s1_path + episodes[season - 1][episode_num - 1]])

更改数据结构可能更容易。你知道吗

例如

program = {"s_paths":["1","2","3"],"s_episodes":[["1","2"],["1","2"]]}

现在您可以访问它们而不需要所有的IF语句

program['s_paths'][season - 1]
program['s_episodes'][season - 1][episode_num - 1]

所以你可以直接回来

subprocess.Popen([player_path, program['s_paths'][season - 1] + program['s_episodes'][season - 1][episode_num - 1]])

相关问题 更多 >