Variable etwas anders ausgeben

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.
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

schön, aber was bedeutet das was ist string und von wo kommen auf einmal i und k. Kannst du mir das erkläre.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Graf2.0: bei Dir sind das Spalte und Zeile.
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

Ahh verstehe. hab es schon ausprobiert aber was genau tun diese zwei Zeilen
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

Gunnar hat geschrieben:Ja Kathrin,

den Fehler habe ich letzt auch gemacht und dazu sagte modelnine :
Iterieren ü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).
Bei dir wurde der Schleifeninhalt nur zweimal ausgeführt, weil der Liste die items unter'm Hintern weggerissen wurden :wink:

Gruss,
Gunnar
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.
Danke für die viele Hilfe an dieser Stelle :D
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

sebastian0202 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.
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 aus
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 :oops:
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

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='')
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

wow danke wie genial einfach!! Manchmal sieht man denn Wald vor lauter Bäumen nicht :lol:
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

nur habe ich Python2 und das sep='' will nicht. gibt es das in 2 nicht?
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Graf2.0: kbr zeigt Dir auch keine fertige Lösung, weil wir hier keine Hausaufgaben für andere machen. Das Portieren auf Dein Problem bleibt Deine Aufgabe; Du willst ja eine neue Liste, und keine Ausgabe.
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

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 :lol: Naja für mich ist es schon spät ich geh schlafen. Mal schauen was ich morgen alles schaffe.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

@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.
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

Graf2.0 hat geschrieben:
sebastian0202 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.
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 aus
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 :oops:
Könnte jemand mir wenigstens das mit der .pop() funktion erklaren, also warum die nicht funktioniert...
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Graf2.0: Du benutzt pop falsch und hängst das falsche hinten an. Lies Dir die Dokumentation dazu mal durch.
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

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.
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

@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:

Code: Alles auswählen

d = {"foo": "bar", "baz": "bar"}
print(d.index("bar"))
Als Lektüre würde ich noch das Tutorial empfehlen. Da sind die Grunddatentypen alle beschrieben.
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

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.
sebastian0202
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
narpfel
User
Beiträge: 643
Registriert: Freitag 20. Oktober 2017, 16:10

@Graf2.0: `dict`s haben aber keine Ordnung. In anderen Worten:

Code: Alles auswählen

print({"foo": "bar", "baz": "bar"} == {"baz": "bar", "foo": "bar"})
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.
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

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]
Antworten