2017-12-31 10 views
-1

ich zur Zeit einen Python-Skript machen versuchen, die eine URL in Web-Browser öffnet und jetzt ich, dass NameError: name 'song' is not definedWie Benutzereingabe in einer Klasse zu nehmen und es durch einen Zustand passiert

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

Wo glaubst du, 'Song' wäre von dort gekommen? Es ist außerhalb der Klasse und außerhalb der "Badland" -Methode, wo Sie die Eingabe nehmen. Was denkst du eigentlich, wo 'Song' aus der' __init__' Methode kommen würde, da es sich nicht um einen Parameter handelt? Sie sollten wahrscheinlich https://www.youtube.com/watch?v=o9pEzgHorH0 überprüfen; Dies ist eine klassische Nicht-Klasse. – jonrsharpe

+0

Ich bin Anfänger Programmierung, so dass ich nicht viel darüber wissen, und ich versuche, Programmierung zu lernen – rishikesh

+1

Dann würde ich ein strukturiertes Tutorial empfehlen, siehe z. https://sopython.com/wiki/What_tutorial_should_I_read%3F – jonrsharpe

Antwort

0

Nun einen Fehler bin vor, Ihre song Variable ist nur in der Methode Badland Ihrer Klasse sichtbar. So können Sie diese Variable in der gleichen Methode verwenden, wo Sie es definiert, wie folgt aus:

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) 

... oder Sie können Benutzer-Eingabe von Klassenmethode zurückzukehren und dann verwenden, wie folgt aus:

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) 

Sie können Ihre Variable auch in Klassenattribut speichern: self.song = int(input(...) und danach können Sie innerhalb Klassenmethoden von self.song oder außerhalb Ihrer Klasse von instance.song zugreifen.

Hinweis: Vergessen Sie nicht die möglichen ungültigen Benutzereingaben. Sie können Ihre song = int(input... in try/except verpacken.

Viel Glück!

+1

Es wäre gut, wenn Sie die falschen Dinge im OP-Code erklärt hätten. –

Verwandte Themen