Python berücksichtigt Argument nicht?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Die if expression wo das Kommentar steht ist bisschen komisch. Ich nehme an du willst überprüfen ob Groß, Klein Buchstaben und Zahlen im Password sind.

Die Expression gehört bisschen angepasst und ich empfehle dir noch Sonderzeichen hinzuzufügen.(/*()'$" usw.)

Aber dein Code gehört so geändert:

while counter < times:
    counter = counter + 1
    chars=string.ascii_letters + string.digits
    password = "".join(random.choice(chars) for _ in range(length))
    
    if any(p in string.ascii_uppercase for p in password) and any(p in string.ascii_lowercase) and any(p in string.digits for p in password) and password not in store:
        store.append(password)
    else:
        l += 0   
Dein If
if [string.ascii_uppercase and string.ascii_lowercase and string.digits in password] and password not in store:

string.ascii_uppercase evaluiert zu True

string.ascii_lowercase evaluiert auch zu True

string.digits in password ist False

True and True and False ist False

und das ganze in einem Array ist ein Array mit False also das: [False]. Jedoch ist das ganze in einem if True.

Die abfrage macht gar keinen sinn. Um Strings zu addieren kannst du ein + verwenden aber kein and. Die abfrage macht dann trotzdem keinen Sinn

string.ascii_uppercase + string.ascii_lowercase + string.digits

Im Endeffekt steht hier:

[False] and password not in store
ryz3n 
Fragesteller
 08.02.2022, 09:37

So macht das ganze schon wieder mehr Sinn, allerdings bekomme ich nun die Fehlermeldung, dass "p" nicht definiert wäre.

0
ryz3n 
Fragesteller
 08.02.2022, 11:37
@ryz3n

Nvm, ich habe "p in" am anfang der Klammern rausgenommen und nun funktioniert alles :)

if any(p in string.ascii_uppercase for p in password) and any(p in string.ascii_lowercase) and any(p in string.digits for p in password) and password not in store:

0
Hairgott  08.02.2022, 13:13
@ryz3n
any(p in string.ascii_lowercase)

Das gehört zu dem geändert:

any(p in string.ascii_lowercase for p in password)

sonst checkt es nur den letzten Buchstaben und nicht alle

1
ryz3n 
Fragesteller
 08.02.2022, 15:01
@Hairgott

jap, nachdem ich deine Zeile nochmal reingeschrieben hab, wurde das p erkannt und jetzt geht alles. Auch den Fehler, dass mein Counter nicht in der Schleife integriert war, sodass das passwort - wenns den Kriterien nicht entspricht - einfach nochmal generiert wird habe ich behoben. Vielen Dank :D

0

also wenn ich nur

for i in password:
       if [string.digits in password]:
           store.append(password)

mache

dann fällt dir auf das das egal was man da macht immer wahr ergibt . den [ ] scheint keine boolean true or false zu ergeben sondern irgendwas was immer wahr ist .

zweitens fällt mir auf

das du jeden buchstaben so testet i in password ? also jeden einzelnen buchstaben meinst du zu überprüfen ob der sowohl ein groß klein zahl ist . da zeig mir mal ein zeichen was sowohl groß als auch klein als auch eine zahl ist. also irgendwas stimmt in der logik doch nicht .

ähhh , das kann ja gar nichts werden , ergo [ ] führt halt zu gar nichts und ist immer wahr .

tip : lass dir doch mal [string.digits in password] ausgeben und guck was für ein wert rauskommt .

btw :

string.ascii_uppercase and string.ascii_lowercase and string.digits in password

verstehe ich noch weniger ??? and and in ?? du merkst aber schon das verketungen so nicht funktionieren . btw in keiner sprache

Hairgott  07.02.2022, 14:52

[string.digits in password] ist immer True weil jedes Array true ist, das mehr als 1 Element hat.

bool([1]) ist auch True weil das array nicht leer ist.

1
TechPech1984  07.02.2022, 14:55
@Hairgott

danke , ich programmier nie in python . gut das du das erklärt hast .

0