Wortkette mit Endbuchtabe = Anfangsbuchstabe

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
Fle$h
User
Beiträge: 3
Registriert: Freitag 11. Juli 2014, 17:56

Zu meiner Person,

ich bin Zimmerergeselle und möchte nun mit dem Programmieren in Python anfangen. Dazu habe ich mir ein Tutorial herausgesucht...
Leider stosse ich mit meiner ausgedachten Aufgabe schon am 2ten Tag an meine Grenzen :-(

Hier mal kurz der Code:

Code: Alles auswählen

print("Das Anfangswort lautet Baum, finde ein neues Wort das mit dem")
print("gleichen Buchstaben beginnt, den das vorige Wort am Ende hatte")

zaehler = 1
for zaehler <10:
    zaehler++
    cAnfangswort = "Baum"
    aEingabe_neues_wort = input("")
    bLetzteBuchstabeVonAnfangswort = len(c) - 1
    print(c[b])
    eEsterBuchstabeVonNeuemwort = len(a[0])
    print(a[e])
    
    if b_letzteBuchstabeVonAnfangswort == e_:
        print('Gutes Wort, bitte ein neues eingeben: ')
        input(a)
    else:
        print('Das Wort passt nicht, du brauchst einen anderen Anfangsbuchstaben')

    c_anfangswort = input("")     //Hier soll das Anfangswort Baum mit dem neuen des Benutzers getauscht werden
    
input()
Das Problem liegt beim ausführen, dass die Variable den falschen wert holt (e = len(a[0])
Ich hoffe jemand kann mir einen Tipp geben, da ich nun schon seit 2 Std. an der Fehlersuche bin.

Die dazugehörige Fehlermeldung:

Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
Das Anfangswort lautet Baum, finde ein neues Wort das mit dem
gleichen Buchstaben beginnt, den das vorige Wort am Ende hatte
mais
m
a
Das Wort passt nicht, du brauchst einen anderen Anfangsbuchstaben


m
Traceback (most recent call last):
File "/home/flesh/Dokumente/hallowelt.py", line 11, in <module>
e = len(a[0])
IndexError: string index out of range
>>>
>>>

Der IndexError kommt mir etwas spanisch vor, da mit der Funktion auf den Ersten Buchstaben des neuen Wortes zugegriffen werden soll, und es dabei nicht "out of range" laufen kann oder?
Zuletzt geändert von Fle$h am Freitag 11. Juli 2014, 18:43, insgesamt 3-mal geändert.
BlackJack

@Fle$h: Das Problem ist sicherlich erst einmal dass das überhaupt nicht läuft weil es einen Syntaxfehler hat. Bitte zeige zu einer Fehlerbeschreibung auch den Quelltext der tatsächlich zu dem Fehler gehört.

Ansonsten beschreibe doch mal was `e` sein soll und was da auf der rechten Seite ermittelt wird. Demonstriere das mal an einem Beispiel. Nimm einen Wert für `a` an und lass Dir mal jedes Zwischenergebnis dieses Audrucks ausgeben. Am schnellsten kann man das in einer Python-Shell machen. Dann siehst Du sehr schnell wo der gedankliche Fehler ist, den Du da gemacht hast.

Weitere Amnerkungen: Der Syntaxfehler und die Klammern beim ``if`` legen irgendwie die Vermutung nahe dass Du nicht in Python programmierst, sondern Syntax von einer anderen Programmiersprache versuchst in Python auszuführen. Hast Du ein Python-Tutorial durchgearbeitet?

Die Namen sind zu kurz und nichtssagend. Verwende beschreibende Namen, damit man als Leser weiss was der Wert dahinter im Programm für eine *bedeutung* hat. Dabei fallen einem manchmal selbst auch Fehler auf, denn wenn man `e` nach dem benennen würde was tatsächlich daran gebunden wird, dann würde das Problem damit auch auffallen. `b` und der Vergleich mit `e` machen nach der Beschreibung was das Programm tatsächlich machen soll, auch keinen Sinn, und auch *das* wäre bei einer sinnvollen Benamung der beiden Werte sofort aufgefallen.

Wenn man vor Eintritt in eine Schleife weiss wie oft sie durchlaufen werden soll, nimmt man normalerweise eine ``for``-Schleife.

Man kann bei Sequenzen wie Listen oder Zeichenketten auch negative Indexwerte für den Zugriff auf Elemente verwenden.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Willkommen zu Python und hier im Forum!

Zuerst solltest du beschreiben, was du erwartest und was stattdessen passiert, mit deiner Beschreibung kann ich da leider nicht viel anfangen.
Hilfreich ist auch (auch dabei!) keine einbuchstabigen Kuerzel sondern echte Namen zu benutzen.

Ich nehme mal an, `b` und `e` sollen der erste bzw letzte Buchstabe sein. Was sie aber tatsaechlich sind: `b` der letzte Index des `c` Strings (mit -1 als Index kannst du immer auf den letzten Buchstaben zugreifen) und e ist immer 1, weil das die Laenge des 1. Buchstabens ist.
Auch willst du `c` wahrscheinlich nicht immer in jedem Schleifendurchgang sondern bei positiver Pruefung `a`, also das gerade eingegebene Wort` uebernehmen

Ich rate mal, dass du eigentlich folgendes machen willst:

Code: Alles auswählen

c = "Baum"
for _ in range(10):
    a = input(c)
    
    if c[-1] == a[0]:
        print('Gutes Wort, bitte ein neues eingeben: ')
        c = a
    else:
        print('Das Wort passt nicht, du brauchst einen anderen Anfangsbuchstaben')
Fle$h
User
Beiträge: 3
Registriert: Freitag 11. Juli 2014, 17:56

@BlackJack,

danke für deine schnelle Antwort,
das ist gerade viel Input. ich werde den Beitrag bestmöglich versuchen zu ändern.
Danke


@cofi
auch dir danke.
Wow nur sowenige Zeilen Code :shock:
Da hab ich ja noch sehr sehr viel zu lernen
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Waehrend der Code den du anfangs eingestellt hast v.a. Schoenheitsfehler hatte, macht er jetzt gar keinen Sinn mehr.

Um die hineineditierte Frage - sowas solltest du lassen, wenn du eine Antwort haben willst ;) - zu beantworten: Klar kann das schiefgehen. In genau einem Fall:

Code: Alles auswählen

In [1]: empty = ''

In [2]: nonempty = 'really'

In [3]: empty[0]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-3-281eea457b24> in <module>()
----> 1 empty[0]

IndexError: string index out of range

In [4]: nonempty[0]
Out[4]: 'r'
Fle$h
User
Beiträge: 3
Registriert: Freitag 11. Juli 2014, 17:56

Tschuldige :|

Bin jetzt auf ein viel bessers Tutorial umgestiegen, (byte_of_python)
Da geht zwar alles etwas langsamer aber dafür verständlich :)

Ich danke euch trotzdem, dass ihr mir geholfen habt (ganz besonders wegen Formatierung und Lesbarkeit)
Die Lesbarkeit habe ich wohl sehr unterschätzt
Antworten