Python Url öffnen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Der31Lol
User
Beiträge: 1
Registriert: Dienstag 9. August 2022, 13:52

Hallo.
Ich habe das Problem das ich an dem Code nicht mehr weiter komme und auch schon da nachgesucht habe aber nix hilfreiches gefunden habe.
Weis jemand wie ich den code richtig machen.
Es soll Eine neue url durch zusammen geöffnet werden dafür ist die variable url_list da die hat die url zusammen.
Hier der code:

import webbrowser, random

for i in range(12):
url1 =("https://www.youtube.com/watch?v=onQLx3DJYDI")
url2 =("https://www.youtube.com/watch?v=eGw5XauPnCs")
url3 =("https://www.youtube.com/watch?v=kOzTCiC25zo")
url_list =("url1", "url2", "url3")
random_url = random.choice(url_list)
webbrowser.open("url_list")
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Der31Lol: In der Python-Dokumentation gibt es ein Grundlagentutorial, dass man mal durchgearbeitet haben sollte. Der Fehler ist eigentlich recht offensichtlich. Die zufällig ausgewählte URL ist denn in dem Code an welchen Namen gebunden? Wo wird der Name und die URL denn dann *benutzt*? Und welchen Sinn sollte es machen die *Zeichenkette* "url_list" als URL zu öffnen. Selbst wenn man da nicht die Zeichenkette sondern den *Namen* `url_list` verwendet hätte, ist das ja falsch. `webbrowser.open()` erwartet *eine* URL in Form einer Zeichenkette. Den Fehler Namen und literale Zeichenketten zu verwechseln hast Du vorher schon einmal gemacht, beim Inhalt von `url_list`.

Sonstige Anmerkungen: Üblich ist eine Import-Zeile pro Modul. Siehe auch Style Guide for Python Code.

Wenn man einen Namen aus syntaktischen Gründen braucht, der Wert dahinter aber nie benutzt wird, gibt es die Konvention einfach einen einzelnen Unterstrich als Namen zu verwenden. Dann weiss der Leser, dass ist Absicht, dass der Name/Wert nicht benutzt wird, und kein Fehler oder noch nicht vollständig ausprogrammierter Code. Zum Beispiel wenn man eine ``for``-Schleife nur wegen der Anzahl der Wiederholungen verwendet und die Zahlen die `range()` liefert, gar nicht verwendet.

Um einzelne literale Zeichenketten Klammern zu setzen macht keinen Sinn. ``("Hallo")`` hat am Ende den gleichen Wert wie nur ``"Hallo"`` ohne die Klammern. Die Klammern verleiten den Leser aber dazu genauer hinzuschauen um festzustellen, dass sie unnötig sind, oder aber nur flüchtig drüber zu schauen und eventuell falsche Annahmen zu treffen. Beispielsweise, dass es sich um Tupel handeln könnte.

Man nummeriert keine Namen. Statt erst `url1` bis `url3` zu definieren und dann eine Sequenz mit diesen Werten, würde man einfach gleich die Sequenz hinschreiben.

Ich schrob „Sequenz“ und nicht „Tuple“ oder „Liste“ weil wir damit gleich beim nächsten Problem sind: Grunddatentypen in Namen. Macht man nicht. Weil man den Datentyp im Laufe der Programmentwicklung auch mal ändert, und dann muss man überall schauen das man die betroffenen Namen ändert, oder man hat falsche, irreführende Namen im Programm.

Was hier der Fall ist, denn an den Namen `url_list` ist gerade keine Liste gebunden, sondern ein Tupel. Wenn man das einfach `urls` nennt, ginge beides ohne den Leser zu verwirren.

Wobei man hier eher eine Liste verwenden würde. Faustregel: Wenn die Bedeutung der Elemente von ihrer Position abhängig ist, dann Tupel. Also Beispielsweise eine X,Y-Koordinate. Wenn jedes Element die gleiche Bedeutung hat, dann Liste. Und hier hat jedes Element die gleiche Bedeutung: URL.

Es macht nicht so wirklich Sinn die immer gleiche Sequenz von URLs 12 mal in der Schleife zu erstellen, statt einmal davor.

Man muss auch nicht jedes kleine Zwischenergebnis an einen Namen binden.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
import random
import webbrowser


def main():
    urls = [
        "https://www.youtube.com/watch?v=eGw5XauPnCs",
        "https://www.youtube.com/watch?v=kOzTCiC25zx",
        "https://www.youtube.com/watch?v=onQLx3DJYDI",
    ]
    for _ in range(12):
        webbrowser.open(random.choice(urls))


if __name__ == "__main__":
    main()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten