variablen falsch?

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
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

Ich habe versucht mein programm aus der letzten frage zu verfollständigen.

Code: Alles auswählen

from sys import *
from itertools import *


x="aba"
y = list(x)


shapes = ['a', 'b', 'c']
result = combinations_with_replacement(shapes, 3)
for i in result:
     a = list(i)
     print(a)
     if a == y:
            print("passwort: ", y)
            exit()

Bei zum beispiel aab funktioniert es aber bei aba kommt als ausgabe:
['a', 'a', 'a']
['a', 'a', 'b']
['a', 'a', 'c']
['a', 'b', 'b']
['a', 'b', 'c']
['a', 'c', 'c']
['b', 'b', 'b']
['b', 'b', 'c']
['b', 'c', 'c']
['c', 'c', 'c']

Also die Buchstaben wiederholen sich an stelle 1 und 2 oder 2 und 3 aber nicht bei 1 und 3.
Hat jemand eine Idee wie man das beheben kann?

Danke schonmal
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Champ8888: Sternchenimporte sind schlecht, weil man nicht kontrollieren kann, was denn da in den Namensraum geladen wird. Imporiere immer konkrete Namen. Statt `exit` solltest Du `break` benutzen. Was Du suchst ist `product`.
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

Danke mit dem import tip.
Aber wenn ich diese kombinationen in verschiedenen längen ausgeben möchte, geht product ja nicht.
Gibt es da auch eine Lösung
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ging mit `combinations_with_replacement` genausowenig, Du mußt halt eine Schleife über die Längen machen.
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

Aber dann müsste ich ja irgendwie die Liste erweitern oder?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du das "repeat"-Argument in product nicht gesehen?
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

Ja, aber nicht ganz verstanden
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die haben da ein Beispiel. Und wenn du es nicht verstehst, dann kannst du doch einfach mal damit rumspielen. Und schaun was passiert.
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

Ok, vielen dank
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

Ich habe es jetzt mit repeat versucht
d = product('ABCD', 'ABCD', repeat=1)
aber wenn ich für repeat 2 einsetze macht er es 2 mal und damit habe ich eine 4er kompi. Ich möchte aber kombinationen mit 1,2,3,4...
Vielleich weiß ja jemand wie das geht
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du *zwei* Alphabete reingibst, und dann sagst, dass du die zweimal wiederholen willst, dann kommst du auf 2*2 = 4 Wiederholungen.

Woran kannst du jetzt wohl schrauben, wenn du repeat auf n setzen willst, und auch n Zeichen dabei rumkommen sollen?
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

Ich habe versucht 1,5 einzusetzen aber es wird nicht akzeptiert
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

:shock:

Und auf die Idee, nur ein statt zwei Alphabete reinzugeben bist du nicht gekommen? Das repeat wiederholt die uebergebenen Alphabete. Wenn du 1000 uebergibst, bekommst du auch 1000-Elementige Produkte. Wenn du das dann mal zwei nimmst, dann 2000.
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

Dann habe ich aber das Problem dass wenn ich in der 1. liste a und in der 2. b habe nur ab und nicht ba rauskommt
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Champ8888: Du hast aber nur EINE Liste.
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

Ich meinte die beiden Teile der Liste
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Welche beiden Teile?
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

result = product('ABCD', 'EFGH')
Die beiden Teile die mitenander verbunden werden
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Du brauchst nur eine Liste:

Code: Alles auswählen

product("ABV", repeat=3)
Champ8888
User
Beiträge: 30
Registriert: Mittwoch 11. Oktober 2017, 15:53

ohh :roll:

Vielen dank
Antworten