根据函数中第二个elif语句的输入,从链接列表中随机选择



Python新手,我在尝试制作一个初学者小项目时遇到了一些麻烦(此外,如果问题的标题不能很好地解释,我很抱歉,我仍在学习行话(。

该项目的要点是基于用户的输入;心情;他们感觉,该程序将根据输入返回一段YouTube音乐视频。例如,在下面的代码中,我从一个名为";爵士乐";,将返回爵士音乐:

import random
import webbrowser
jazzy = [["https://www.youtube.com/watch?v=fAi7IeJG-6Y"], ["https://www.youtube.com/watch?v=bcp2MFfF_xc&t=1686s"], ["https://www.youtube.com/watch?v=eZAuY5M7J-Y"]]
funky = [["https://www.youtube.com/watch?v=ZPHoVmBIqPk"], ["https://www.youtube.com/watch?v=mVphcpIoTpc&t=940s"]]
def user_mood():
mood = input('What mood are we in today?')
if mood == "jazzy":
jazz_open = webbrowser.open_new(random.choice(jazzy))
jazz_open()
elif mood == "funky":
funk_open = webbrowser.open_new(random.choice(funky))
funk_open()
elif mood != "jazzy" or "funky":
print("Sorry, I don't have an option for ", mood, "in my catalogue.")
user_mood()

";爵士乐";部分也就是说,代码的if语句部分工作得很好。它从列表中随机选择,没有问题。然而,当我尝试输入";时髦";,为了进行相同的过程;时髦的";列表,程序简单地关闭(使用VSCode(。在windows命令提示符下尝试它会返回最后一条elif语句,该语句表示它在目录中没有输入选项。

这个小项目的目标是将类型的数量和列表中的选项数量扩展到一个可观的规模,但鉴于我对Python还很陌生,我不确定对整个项目只使用一个函数是否是个好主意,或者我是否应该将项目分为每个类型/输入的多个函数。

提前感谢!:(

这里的逻辑对我来说很好

  1. 单个链接不需要在列表中
  2. webbrowser.open_new(random.choice(funky))已经打开web浏览器并返回布尔值,之后不能调用指定的变量,因为它实际上不是一个函数
  3. 最后一个elif应该只是else

如果你想喜欢它,你可以用字典替换心情列表,并为你想要添加的所有不同播放列表调用正确的字典键,而不需要任何条件。

这是一个修改版本:

import random
import webbrowser
playlists = {
'jazzy': ["https://www.youtube.com/watch?v=fAi7IeJG-6Y", "https://www.youtube.com/watch?v=bcp2MFfF_xc&t=1686s", "https://www.youtube.com/watch?v=eZAuY5M7J-Y"],
'funky': ["https://www.youtube.com/watch?v=ZPHoVmBIqPk", "https://www.youtube.com/watch?v=mVphcpIoTpc&t=940s"]
}
def user_mood():
mood = input('What mood are we in today? ').lower()
if mood not in playlists.keys():
print("Sorry, I don't have an option for ", mood, "in my catalogue.")
else:
webbrowser.open_new(random.choice(playlists[mood]))
user_mood()

代码看起来不错,只是我知道我至少可以发现一件你想更改的事情!目前,最后一条语句将始终执行,因为编译器将像这样查看表达式,并且表达式中的字符串始终为true:

(mood != "jazzy") or ("funky")

由于实际上你甚至不想检查最后一个案例的任何内容,并且如果前两个if语句为false,你总是想执行最后一次打印,所以你可以用"else"替换所有内容:

else:
print("Sorry, I don't have an option for ", mood, "in my catalogue.")

您已经分配了一个jazzy和funky的列表。你应该分配一个简单的url字符串:

jazzy=[〃;https://www.youtube.com/watch?v=fAi7IeJG-6Y"https://www.youtube.com/watch?v=bcp2MFfF_xc&t=1686s"https://www.youtube.com/watch?v=eZAuY5M7J-Y〃]

funky=[〃;https://www.youtube.com/watch?v=ZPHoVmBIqPk"quot;https://www.youtube.com/watch?v=mVphcpIoTpc&t=940s"]

您不必调用junk_open((和fuzzy_open((的函数。声明

webbrowser.open_new(url(

打开网络浏览器并播放url。

是的,if-elif-else梯形图的最后一个块通常应该是else,而不是if-elif-elif。

休息的东西很好。希望这能解决问题。快乐学习!

您的问题是上一个elif语句。你想要的是检查一下情绪是否既不活泼也不时髦。

更换

elif mood != "jazzy" or "funky"

带有

elif mood not in ("jazzy", "funky"):

最新更新