Variable etwas anders ausgeben
Es scheint dass das nicht ungewöhnlich ist. In dem Forum steht zwar das sowas passieren kann aber nicht wie man das beheben denn ich finde das ist für einen Computer schon ein seltsamer Fehler. Hoffentlich könnt ihr mir sagen was der Grund ist warum bei der .pop Funktion nur die hälfte gelöscht wird.Gunnar hat geschrieben:Ja Kathrin,
den Fehler habe ich letzt auch gemacht und dazu sagte modelnine :
Bei dir wurde der Schleifeninhalt nur zweimal ausgeführt, weil der Liste die items unter'm Hintern weggerissen wurdenIterieren über ein Objekt was verändert wird hat meißtens nicht die gewünschten Konsequenzen (bei Listen werden dann eine entsprechende Anzahl von Elementen übersprungen, bei Dicts bricht das Programm mit einer Exception ab).
Gruss,
Gunnar
Danke für die viele Hilfe an dieser Stelle
@Graf2.0: das was Du da aus dem Archiv ausgegraben hast, hat nichts mit Deinem Problem zu tun. Versuch mal zu erklären, was Du mit der while-Schleife zu tun versuchst, was das gewünschte und was das tatsächliche Ergebnis ist.
Ich versuche das was sebastian0202 beschrieben hat umzuätzen. Gedacht habe ich mir wenn sagen wir die Variable x eine Position von sagen wir "h" (7) gespeichert hat das von einer schon vorher gefertigte liste (abc) alle Buchstaben von a-h gelöscht werden und eben diese gelöschten Buchstaben hinten ran gedockt werden. Ich möchte das aussebastian0202 hat geschrieben:Hallo,
um die vielen Listen zu vermeiden, könntest du dir ja eine Funktion schreiben,
die deine ursprüngliche Variable abc nutzt und, um dein Beispiel zu nutzen, die Buchstaben um 19 Stellen verschiebt.
Die pop() und append() Funktionen von Listen kannst du dafür nutzen und mit der For-Schleife sorgst du auch für 19 Durchgänge.
Am Ende der Funktion gibst du dein neues abc zurück mit dem du dann deinen Text verschlüsseln kannst.
abc = a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
abc = h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,e,f,g
entsteht.
Damit hätte ich mir die Tabelle bzw. Zeile von anfangs selbst generiert und kann damit arbeiten.
Das hinten randocken klappt aber das löschen von a-h nicht. Ich habe es mit .pop versucht aber der löscht nicht alles von a-h sondern nur jedes zweite. Darum auch dieser alte Beitrag, denn da hat jemand das selbe Problem mit .pop aber da wir es nicht gelöst sondern nur eine alternative vorgeschlagen.
Ich hoffe du hast mit mir ein wenig Nachsicht
Hier eine kleine Hilfestellung (Python 3):
Code: Alles auswählen
import string
abc = string.ascii_lowercase
print(abc)
x = 7
print(abc[x:], abc[:x], sep='')
ja ich habs gerade bemerkt und ausprobiert so weit war ich schon das von kbr ist schöner geschrieben. Natürlich weiß ich das und verlange das auch nicht nur eine Lösung für mein .pop() Problem würde mich einen riesen Schritt näher ans Ziel bringen. Und außerdem würde ich euch dann auch nicht mehr nerven Naja für mich ist es schon spät ich geh schlafen. Mal schauen was ich morgen alles schaffe.
@Graf2.0: Du nervst nicht – wenn Du nervst, wird Dir einfach keiner mehr antworten. Aber gib Dir Mühe und versuche die Hilfestellung auf Dein Problem anzuwenden. Und dann noch: die deutsche Sprache kennt Interpunktion. Nutze diese.
Könnte jemand mir wenigstens das mit der .pop() funktion erklaren, also warum die nicht funktioniert...Graf2.0 hat geschrieben:Ich versuche das was sebastian0202 beschrieben hat umzuätzen. Gedacht habe ich mir wenn sagen wir die Variable x eine Position von sagen wir "h" (7) gespeichert hat das von einer schon vorher gefertigte liste (abc) alle Buchstaben von a-h gelöscht werden und eben diese gelöschten Buchstaben hinten ran gedockt werden. Ich möchte das aussebastian0202 hat geschrieben:Hallo,
um die vielen Listen zu vermeiden, könntest du dir ja eine Funktion schreiben,
die deine ursprüngliche Variable abc nutzt und, um dein Beispiel zu nutzen, die Buchstaben um 19 Stellen verschiebt.
Die pop() und append() Funktionen von Listen kannst du dafür nutzen und mit der For-Schleife sorgst du auch für 19 Durchgänge.
Am Ende der Funktion gibst du dein neues abc zurück mit dem du dann deinen Text verschlüsseln kannst.
abc = a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
abc = h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,e,f,g
entsteht.
Damit hätte ich mir die Tabelle bzw. Zeile von anfangs selbst generiert und kann damit arbeiten.
Das hinten randocken klappt aber das löschen von a-h nicht. Ich habe es mit .pop versucht aber der löscht nicht alles von a-h sondern nur jedes zweite. Darum auch dieser alte Beitrag, denn da hat jemand das selbe Problem mit .pop aber da wir es nicht gelöst sondern nur eine alternative vorgeschlagen.
Ich hoffe du hast mit mir ein wenig Nachsicht
Ich habe mich mit dictionary auseinandergesetzt und frage mich man eine variable in Anführungszeichen setzten kann aber so das der Wert auf der Variable nicht verloren geht.
Zuletzt geändert von Graf2.0 am Mittwoch 17. Januar 2018, 15:47, insgesamt 1-mal geändert.
@Graf2.0: Da `dict`s keine Reihenfolge haben, kann man keinen sinnvollen Index zu einem Wert definieren. Außerdem: Was sollte deiner Meinung nach dabei rauskommen:
Als Lektüre würde ich noch das Tutorial empfehlen. Da sind die Grunddatentypen alle beschrieben.
Code: Alles auswählen
d = {"foo": "bar", "baz": "bar"}
print(d.index("bar"))
Stimmt, hast recht. So würde das keinen Sinn machen, allerdings sollte der index von einem Schlüssel doch möglich sein. Bezogen auf dein Beispiel müsste print(d.index("baz")) doch Funktionieren und mir 2 liefern, denn ein Schlüssel darf doch nicht doppelt vorkommen, außer man möchte den Wert überschreiben.
-
- User
- Beiträge: 168
- Registriert: Montag 9. Mai 2016, 09:14
- Wohnort: Berlin
Probiere es doch mal aus und schaue was passiert:
Code: Alles auswählen
>>> d = {"t" : "a", "b" : "a", "t" : "c"}
>>> d.index("t")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'index'
>>> print d["t"]
c
@Graf2.0: `dict`s haben aber keine Ordnung. In anderen Worten:
wird `True` ausgeben, weil die Reihenfolge der Schlüssel-Wert-Paare im `dict` keine Bedeutung hat. Man kann also nicht sagen, dass `"baz"` später im `dict` vorkommt als `"foo"` und deswegen einen höheren Index haben muss.
Code: Alles auswählen
print({"foo": "bar", "baz": "bar"} == {"baz": "bar", "foo": "bar"})
Ok vielen dank nochmal das ihr mir helft da wäre nämlich noch was, und zwar frage ich mich wie ich dem Skript sagen kann das in einer for-schleife gerade das letzte Element ausgewählt wurde. Ein Beispiel:
a = [1, 2, 3, 4]
b = [3, 4, 5, 6, 7, 8, 9]
for x, y in zip(a,b):
print x # b ist länger als a daher möchte das a so oft wiederholt wird wie b inhalt hat sprich das len(a)=len(b) ist
print y
Mein erster Gedanke war es x zu sagen das x gerade das letzte Element von a bekommen hat und es wieder von vorn beginnen zu lassen. Da der inhalt der Listen a und b sich ständig ändert kann ich mich auch nicht darauf verlassen.
Natürlich bin ich auch für andere Vorschläge offen.
Ich möchte Grunde dass a so aussieht:
a = [1, 2, 3, 4, 1, 2, 3]
b = [3, 4, 5, 6, 7, 8, 9]
a = [1, 2, 3, 4]
b = [3, 4, 5, 6, 7, 8, 9]
for x, y in zip(a,b):
print x # b ist länger als a daher möchte das a so oft wiederholt wird wie b inhalt hat sprich das len(a)=len(b) ist
print y
Mein erster Gedanke war es x zu sagen das x gerade das letzte Element von a bekommen hat und es wieder von vorn beginnen zu lassen. Da der inhalt der Listen a und b sich ständig ändert kann ich mich auch nicht darauf verlassen.
Natürlich bin ich auch für andere Vorschläge offen.
Ich möchte Grunde dass a so aussieht:
a = [1, 2, 3, 4, 1, 2, 3]
b = [3, 4, 5, 6, 7, 8, 9]