如何在类中获取用户输入并将其传递给条件

时间:2017-12-31 12:54:29

标签: python python-3.x

我目前正在尝试创建一个python脚本,在Web浏览器中打开一个URL,现在我遇到了NameError: name 'song' is not defined

的错误
import webbrowser

class Halsey:
    def__init__(self):
        self.song = song

    def Badland():
        print(" 1.Gasloine" 
        "2.castle" 
        "3.hold me down "
        "4.control")
        song =int(input("Plase select a number from above list"))

if song == 1 :

    url="https://www.youtube.com/watch?v=jU3P7qz3ZrM";

    webbrowser.open(url,new=0)

1 个答案:

答案 0 :(得分:0)

好吧,您的song变量仅在您班级的Badland方法中可见。因此,您可以在定义它的同一方法中使用此变量,如下所示:

import webbrowser

class Halsey:

    SONGS = (
        ("Gasloine", "https://www.youtube.com/watch?v=jU3P7qz3ZrM"),
        ("Castle", "url2"),
        ("Hold me down ", "url3"),
        ("Control", "url4"),
    )

    def __init__(self):
        for i, song_name in enumerate(self.SONGS, 1):
            print("{}. {}".format(i, song_name[0]))

        song = int(input("Plase select a number from above list: "))
        url = self.SONGS[song - 1][1]
        webbrowser.open(url, new=0)

...或者您可以从类方法返回用户的输入,然后使用它,如下所示:

class Halsey:

    SONGS = (
        ("Gasloine", "https://www.youtube.com/watch?v=jU3P7qz3ZrM"),
        ("Castle", "url2"),
        ("Hold me down ", "url3"),
        ("Control", "url4"),
    )

    def get_user_input():
        for i, song_name in enumerate(self.SONGS, 1):
            print("{}. {}".format(i, song_name[0]))

        return int(input("Please select a number from above list: "))

instance = Halsey()
users_choice_int = instance.get_user_input()
url = self.SONGS[song - 1][1]
webbrowser.open(url, new=0)

此外,您可以将变量保存在类属性self.song = int(input(...)中,之后您可以在self.song内的类方法中访问它,或者在instance.song之外访问类。

注意:不要忘记潜在的无效用户输入,您可以将song = int(input...包裹在try/except

祝你好运!