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

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: 17712
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: 17712
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]
Benutzeravatar
pillmuncher
User
Beiträge: 1483
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Graf2.0: Sowas geht mit zip() und itertools.cycle().
In specifications, Murphy's Law supersedes Ohm's.
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

Danke für die schnelle Antwort. Ich habe Python 2.7 und der erkennt weder itertools.cycle() noch cycle. Muss ich dafür etwas importieren oder woran liegt das?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja. Und das kann man schneller ausprobieren oder googeln , als hier ein Posting erstellen :roll:
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

Natürlich habe ich das gemacht und from itertools import * gefunden. Nur funktioniert das nicht und nahm an das es was anderes sein muss also was liegt näher als denjenigen zu fragen der mir dies empfiehlt.
Graf2.0
User
Beiträge: 23
Registriert: Montag 15. Januar 2018, 21:26
Wohnort: Hamburg

Ok ist schon gut hab herausgefunden das cycle( ) für python 3 gedacht ist. Gibt es denn eine Funktion für python 2 die das selbe macht wie cycle()? Und ja das habe ich auch schon gegoogelt, aber nichts brauchbares gefunden.
Zuletzt geändert von Graf2.0 am Freitag 19. Januar 2018, 12:23, insgesamt 1-mal geändert.
Antworten