python code optimieren?

Folgendes "Problem" bei meinem Code: Nun möchte ich jedoch, dass das Einrückungslevel nicht anhand des indentaion_level also der Anzahl der Punkte, welches ein Domainname enthält festgemacht wird, sondern ob in der liste die tsl, sld oder weiter subdomains eines Domainnamens enthalten sind. Ich vereinfache meine Erklärung mit einem Beispiel mit dem Domainnamen alles.doof . Wenn jetzt in der Domainnamenliste doof enthalten ist soll der domainname alles.doof einmal eingerückt werden. Wenn jetzt doof jedoch nicht in der liste enthalten ist, wird der domainname alles.doof keinmal eingerückt , da es keinen übergeordneten gibt. optimiere folgenden code dementsprechend:

file_path = 'C:\Übungen\\Algorithmus\\domain_eingabedatei.txt'
def read_domains(file_path):
with open(file_path, 'r') as file:
domains = [line.strip() for line in file]
return domains
#sortiert Domains nach umgekehrter Hierarchie: TLD zuerst, dann SLD und dann weitere Subdomains
def reverse_domain_key(domain):
return tuple(domain.split('.')[::-1])
def sort_domains(domains):
return sorted(domains, key=reverse_domain_key)
def print_domains_with_indentation(sorted_domains):
for domain in sorted_domains:
indentation_level = domain.count('.')
indented_domain = ' ' * indentation_level + domain
print(indented_domain)
if __name__ == "__main__":
#file_path = 'C:\Übungen\\Algorithmus\\domain_eingabedatei.txt'
#Einlesen der Domains
domains = read_domains(file_path)
# Sortieren der Domains
sorted_domains = sort_domains(domains)
#Ausgabe mit Einrückung
print_domains_with_indentation(sorted_domains)
programmieren, Programmiersprache, Python
Python, wo ist hier der Fehler?

Wir erhalten eine Liste mit Elementen, die in eine Datei geschrieben werden sollen. Dazu soll jedes Element der Liste jeweils mit der zusätzlichen Information, an welchem Index wir uns gerade befinden, versehen werden. (Siehe Beispielausgabe in der Tabelle.)

In dieser Aufgabe brauchen wir keinen zusätzlichen print()-Aufruf. Es sollen nur Inhalte in die Datei geschrieben werden; es soll also keine normale Ausgabe der Inhalte geben.

Tipp: Um sowohl Strings als auch Zahlen in die jeweils aktuelle Zeile zu schreiben, können Zahlen mit str() explizit in einen String umgewandelt werden. Dann können alle Teile der Ausgabe mit einem + aneinandergefügt werden.

Zum Beispiel:

filename = "tiere.txt"
elemente = ["Pinguin", "Nashorn", "Chamäleon", "Pinguin"]
Eintrag 1: Pinguin
Eintrag 2: Nashorn
Eintrag 3: Chamäleon
Eintrag 4: Pinguin

filename = "snacks.txt"
elemente = ["Schokolade", "Chips", "Bonbons", "Kuchen", "Käsebrot"]
Eintrag 1: Schokolade
Eintrag 2: Chips
Eintrag 3: Bonbons
Eintrag 4: Kuchen
Eintrag 5: Käsebrot

filename = "farben.txt"
elemente = ["blau", "gelb", "rot", "lila"]
Eintrag 1: blau 
Eintrag 2: gelb
Eintrag 3: rot
Eintrag 4: lila


Und meine Lösung wäre:

def write_to_file(filename, elemente):
    with open(filename, "w") as file:
        for index, element in enumerate(elemente, start=1):
            entry = "Eintrag " + str(index) + ": " + element + "\n"
            file.write(entry)

filename_tiere = "tiere.txt"
elemente_tiere = ["Pinguin", "Nashorn", "Chamäleon", "Pinguin"]
write_to_file(filename_tiere, elemente_tiere)

filename_snacks = "snacks.txt"
elemente_snacks = ["Schokolade", "Chips", "Bonbons", "Kuchen", "Käsebrot"]
write_to_file(filename_snacks, elemente_snacks)

filename_farben = "farben.txt"
elemente_farben = ["blau", "gelb", "rot", "lila"]
write_to_file(filename_farben, elemente_farben)


Computer, programmieren, Informatik, Python
Python Selenium Cookie Button drücken?

Hallo Community :)

Ich schreibe zur Zeit ein Script, welches bestimmte Aktionen auf einer Webseite automatisiert aufruft. Nur leider muss ich beim Seitenaufruf von Thalia.de Cookies akzeptieren. Ich habe also mit den Entwickler Werkzeugen des Browser nach dem Klassennamen gesucht und versucht, den Button "Alles akzeptieren", damit zu drücken. Nur leider funktioniert das nicht - er findet das Element nicht. Dazu sei gesagt, dass es sich dabei um ein Popup handelt, welches durch das usercentrics Script aufgerufen wird... hat das darauf irgendwie einfluss?

Es wäre nett, wenn da vielleicht mal jemand drüber schaut, warum es nicht funktioniert und was ich stattdessen ändern müsste...

Danke schon mal im Voraus :)

Probiert habe ich es mit folgendem Code:

accept_cookies_button = browser.find_element(By.LINK_TEXT,'Alles akzeptieren')
accept_cookies_button = browser.find_element(By.XPATH,'/html/body/div//div/div/div[2]/div/div[2]/div/div[2]/div/div[1]/div/button[2]')
accept_cookies_button = browser.find_element(By.CSS_SELECTOR,".sc-dcJsrY.jrCGbv")
accept_cookies_button = browser.find_element(By.CLASS_NAME,"sc-dcJsrY.jrCGbv")
accept_cookies_button = browser.find_element(By.CSS_SELECTOR,"button.sc-dcJsrY.jrCGbv")
accept_cookies_button = browser.find_element(By.CLASS_NAME, "jrCGbv")

Nach wie vor funktioniert kein Eintrag davon. Selbstverständlich löse ich danach noch ein .click() aus, jedoch schließt sich an dieser Stelle der Browser und Python bringt den Fehler, dass er das Element nicht finden würde...

Hat da noch jemand Ideen? :)

HTML, CSS, JavaScript, Python, Webentwicklung, Python 3, Selenium
Ubuntu: Wie mache ich das?

Ich nutze Ubuntu seit einer Woche(keine Programmierkenntnisse)
Ich möchte mit Python ein Programm entwickeln, das mir das leben etwas erleichtert. Ich möchte gerne als erstes meinen Yubikey als Passwortersatz auf meinem Computer installieren. Das Problem ist das ich ja um Änderungen am system vornehmen möchte mich im terminal befinden muss. Wie kann ich trotzdem eine GUI programmieren die mich durch den installationsprozess führt? Es muss doch möglich sein das man ein Programm entwickeln kann das eine GUI hat und trotzdem Zugriff auf das system hat oder nicht?

Zum Beispiel kann man einstellen ob der Yubikey als Passwortersatz oder als zweiter Faktor dienen soll. Das will ich halt wie bei einer .exe Datei schön nach einander in einem installationsguide haben. Ich habe das zu einem gewissen grad auch geschafft und zwar mit einem shellskript uund zenity. Aber sobald es ums eingemachte geht funktioniert es nicht mehr. Und zwar sobald ich den Pin für den Yubikey eingeben soll schlließt sich das Zenityfenster und ich bin im Terminal wo ich dann den Pin dort eingeben soll. Das Passwort vorher das hat funktioniert aber beim Pin eben nicht mehr. Dann kam ich auf die Idee ok machste das eben in Python. Python bietet aber nicht die zugriffsrechte wie ein shellskript. Was nun? Ich möchte auch andere Programme dann in den Installer einfügen so dass ich im prinzip sowas habe wie bei der Einrichtung des Systems am anfang wo man schritt für schritt das system konfiguriert.

Hier ist die Anleitung zu der ich das Programm schreiben möchte: https://wiki.ubuntuusers.de/Howto/Yubikey_anstelle_von_Passw%C3%B6rtern_verwenden/

App, Linux, Webseite, Ubuntu, Code, Programmiersprache, Python, Python 3
Python Programmierungsaufgabe?

Was ist der hier der fehler

Ich suche print()-Aufrufe, die jeweils bestimmte Teile der Eingabesequenz ausgeben. Die print()-Aufrufe können untereinander geschrieben werden (Achtung, die Reihenfolgeist wichtig). Da Indexing und Slicing sowohl für Strings als auch für Listen möglich ist, kann der gleiche Pythoncode alle Tests abdecken.

Die Ausgaben sollen in der folgenden Weise umgesetzt werden:

1. Das letzte Element soll mithilfe von Indexing ausgewählt werden.

2. Die Sequenz soll mithilfe von Slicing so reduziert werden, dass das erste und letzte Element wegfallen und nur die Mitte übrig bleibt.

3. Die Sequenz soll mithilfe von Slicing so reduziert werden, dass nur die zweite Hälfte übrig bleibt. Bei Sequenzen mit gerader Anzahl von Elementen soll genau die zweite Hälfte übrig sein, bei Sequenzen mit ungerader Anzahl von Elementen soll das Element in der Mitte mit ausgegeben werden.

4. Die Sequenz soll mithilfe von Indexing mit negativen Zahlen so reduziert werden, dass nur die letzten vier Elemente übrig bleiben.

5. Die Sequenz soll abhängig von der Länge reduziert werden: Sequenzen mit fünf oder weniger Elementen sollen ohne weiteres ausgegeben werden, aus Sequenzen mit genau acht Elementen sollen zwei Elementen am Anfang und zwei Elementen am Ende wegfallen, bei allen anderen Sequenzen sollen die letzten vier Elementen ausgegeben werden.

beispiel

Test Resultat

eingabe = "ABCDE"

F

BCD

CDE

BCDE

ABCDE

eingabe = "FGHIJKLMN"

N

GHIJKLM

JKLMN

KLMN

KLMN

eingabe = [1, 2, 3, 4, 5, 6, 7, 8]

8

[2, 3, 4, 5, 6, 7]

[5, 6, 7, 8]

[5, 6, 7, 8]

[3, 4, 5, 6]

Bild zum Beitrag
Programmiersprache, Python
TypeError bei Python-Programm?

Ich habe folgendes Programm:

import itertools

# Daten aus der Tabelle einlesen
data = []
with open('tour1.txt', 'r') as file:
    for line in file:
        parts = line.strip().split(',')
        data.append((parts[0], int(parts[1]), parts[2] == 'X'))

# Essentielle Tourpunkte auswählen
essential_points = [place for place, year, is_essential in data if is_essential]

# Funktion zur Berechnung der Teiltour
def calculate_tour(places, essential_places):
    min_distance = float('inf')
    min_tour = None

    for perm in itertools.permutations(essential_places):
        tour = [places[0][0]] + [places[i][0] for i in perm] + [places[0][0]]
        total_distance = 0

        for i in range(len(tour) - 1):
            total_distance += abs([x[1] for x in places if x[0] == tour[i]][0] - [x[1] for x in places if x[0] == tour[i + 1]][0])

        if total_distance < min_distance:
            min_distance = total_distance
            min_tour = tour

    return min_tour

# Sortieren der Orte nach ihrem Jahr
sorted_data = sorted(data, key=lambda x: x[1])

# Die Teiltour berechnen
shortest_tour = calculate_tour(sorted_data, essential_points)

# Ergebnis ausgeben
for point in shortest_tour:
    print(point, end=" -> ")
print(shortest_tour[0])  # Zum Startpunkt zurückkehren

Beim Ausführen wird mir folgender Fehler ausgegeben: TypeError: list indices must be integers or slices, not str

Die Textdatei ist nach dem Format "Brauerei,1613,X,0" (als Beispiel) aufgebaut.
Ich habe probiert das Problem durch ein voranstellen von Int() bei den Listen zu Lösen, was nicht funktioniert hat...
Gibt es eine andere Möglichkeit zur Lösung?

Vielen Dank!

Error, Programmiersprache, Python

Meistgelesene Fragen zum Thema Python