buchstaben-hochzähl-algorithm erweitern

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
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

Hallo Leute,

ich habe folgenden algorithm aus dem internet kopiert der aa, ba, ca, da ... zählen soll.
leider funktioniert dieser algorithm nur für 3 stellen, ich brauche aber die möglichkeit die stellen einzustellen (2-8)
wie müsste ich den code erweitern?

code: http://pastebin.com/Q9xfkxf4
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Das Stichwort lautet "Rekursion". Oder du machst es dir ganz einfach und schaust ins itertools-Modul.
Das Leben ist wie ein Tennisball.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich hätte jetzt for-Schleife und Modulo gesagt.
@HVTransformator: was hast Du schon versucht?
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

EyDu:
ohoh ihr erwartet nicht das ich die schule beendet habe usw. ? oder ?
ich bin 10 Klasse den Rekursions Scheiß versteh ich nicht.

Sirius3:
nein ich habe es nicht versucht, du musst wissen das ich diese schleife selber nicht verstehe. ich verstehe nur das sie sich immer wieder von selbst aufruft, was heißt das sie unendlich läuft,
da sie nur 3 stellen darstellen kann fängt sie wieder bei 2 an und macht das ganze nochmal. Warum das passiert und wie weiß ich nicht. Also habe ich keine Ahnung wo ich das Modulo oder die for-schleife anbringen soll.
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

Gut,
Fragen wir nochmal anders,

was bedeutet diese Zeile:

Code: Alles auswählen

a = [i for i in letters]
und was bedeutet diese Zeile:

Code: Alles auswählen

a = [x+i for i in letters for x in a]
Zuletzt geändert von Anonymous am Donnerstag 16. Oktober 2014, 15:59, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

Das sind List Comprehensions. Welches Tutorial oder Buch verwendest Du denn um Python zu lernen?

Edit: Wobei die erste eher unsinnig ist, da könnte man auch einfach ``a = list(letters)`` für schreiben.
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

ich habe mal vor 3 Jahren einen Python Kurs belegt, damals war ich 12.
momentan habe ich neben mir eine "Python Gepackt (http://www.amazon.de/Python-GEPACKT-Mic ... 3826607244)" aber ich glaube da kommen
List Comperehensions nur kurz vor und vor allem nicht so kompliziert nur so was wie unten. (ich habe es eher als Nachschlagewerk und habe nur bis Kapitel 4 gelesen weil ich keine zeit hatte)

Was Comprehensions sind weiß ich (Aus dem Buch) man schreibst z.b.

Code: Alles auswählen

a = [x in letters]
Die liste besteht dann aus allen Buchstaben.

ich habe dies hier versucht: (um es zu verstehen)

Code: Alles auswählen

letters = list("123456")
a = [x+i for i in letters for y+x in letters for y in letters]
aber ich kriege eine fehlermeldung. warum?

sie lautet:
can't assign to opperator.
was das bedeutet muss ich nicht fragen, ich versteh nur nicht wo ich versucht habe einem Operator etwas zuzuweisen.
BlackJack

@HVTransformator: Zwischen ``for`` und ``in`` muss etwas stehen dem man einen Wert zuweisen kann. Und einer Addition kann man nichts zuweisen:

Code: Alles auswählen

In [5]: x + y = 42
  File "<ipython-input-5-1c816ec557a2>", line 1
    x + y = 42
SyntaxError: can't assign to operator
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

hmm...

Code: Alles auswählen

a = [x+i for i in letters y+x for x in letters for y in letters]
aus deiner antwort würde ich denn schluss ziehen dass das hier richtig ist,
aber ein syntax error bei "y+x"
jetzt bin ich komplett verwirtt
BlackJack

@HVTransformator: Naja da steht ``letters`` nur durch ein Leerzeichen getrennt vor ``y+x``. Was soll das denn bedeuten? Das macht keinen Sinn.

Vielleicht solltest Du nicht versuchen zu viel in eine LC zu packen.
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

LC meint line oder so. oder?
wie kann ich das ganze den in 2 Zeilen packen?
es soll bedeuten, das das ganze nicht nur 2 mal durchgeführt wird, sondern 3 mal.
nochmal aufs stichwort rekursion zurück, ich seh da nichts sich sebst aufrufendes.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@HVTransformator: da wird auch nichts rekursiv aufgerufen und ich würde für das Problem auch keine Rekursion verwenden. Wenn Dir LCs zu kompliziert sind, dann versuch eben erst eine Lösung ohne LC.
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

ich habe ein bisschen gesucht und nichts gefunden was das ganze ohne LCs löst, und nicht 50 Zeilen hat.
übrigens habe ich das ganze mal ohne mein Login laufen gelassen und dann geht es sehr wohl über 3 stellen hinaus.
ist der aufruf:

Code: Alles auswählen

for password in a:
  login(password)
falsch?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@HVTransformator: Programmieren heißt ja auch nicht, suche solange bis Du die Lösung im Internet gefunden hast. Ein bißchen selber nachdenken hilft vielleicht. Das Problem an sich ist ja nicht so kompliziert.
HVTransformator
User
Beiträge: 12
Registriert: Mittwoch 15. Oktober 2014, 15:17

oh gott ich hasse mich.
nur weil ich einen code mit dem modul itertools gefunden habe der 50 zeilen lang ist,
sollte man nicht alle von der suche ausschließen.
Antworten