Quersumme eines Namen ermitteln

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.
Jankie
User
Beiträge: 340
Registriert: Mittwoch 26. September 2018, 14:06

Freitag 3. April 2020, 14:06

So wie du über den String iterierst ist es ein Anti-Pattern, ein einfaches:

Code: Alles auswählen

for char in text:
    print(char)


macht das Gleiche.

Quersumme muss vorher erst definiert werden, sonst kommt es zu einen NameError, also musst du VOR der Schleife die Variable Quersumme definieren, also Quersumme = 0

Jetzt kommst du ja an jedes Zeichen ran, dann musst du einfach nur noch jedes Zeichen in einen Integer umwandeln mit int() und diese konvertierte Zahl dann auf Quersumme draufrechnen.

Die Zeile

Code: Alles auswählen

Quersumme = (Quersumme + string_to_iterate)
ist auch Falsch. Du möchtest ja auf die Quersumme jeden char addieren, nicht den gesamten String. Das muss auch in den Schleifenkörper. Am Ende musst du alles natürlich noch mit print() ausgeben.
Sirius3
User
Beiträge: 12008
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 3. April 2020, 14:16

Ich frage mich gerade, ob die Aufgabenstellung wirklich so gemeint ist, wie Jankie das beschreibt.

@phythonkid: wenn Du Dir die erste Seite der Grundlagen von Python angeschaut hast, dann sollte klar sein, warum Quersumme nicht definiert ist.
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

Freitag 3. April 2020, 14:22

@Jankie ich glaube ich habe gerade echt blödsin gemacht aber ich habe es versucht..

Code: Alles auswählen

Name = "Phythonkid"
l = map(str,(map(ord, Name)))
n = ""
for x in l: n+=x 
Quersumme = 0
int(x)

for char in Name:
    print(char)
Quersumme = Quersumme + int(x)

print Quersumme   
Jankie
User
Beiträge: 340
Registriert: Mittwoch 26. September 2018, 14:06

Freitag 3. April 2020, 14:25

das obere int(x) kann weg, Die Zeile Quersumme = Quersumme + int(x) ist nicht richtig eingerückt, es muss im Schleifenkörper sein. Du Iterierst auch über den falschen String(du musst über den iterieren der die vorher erzeugete lange Zahl enthält) und wandelst das falsche Zeichen in einen Integer um.
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

Freitag 3. April 2020, 14:28

über welchen string muss ich denn itereieren und welches zeichen muss in den interger? muss "n" in den interger
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

Freitag 3. April 2020, 14:31

Das Ergebnis was hier rauskommt ist auch sehr komisch:
P
y
s
o
n
k
i
d
1000
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

Freitag 3. April 2020, 14:34

@Jankie und wenn ich oben beim Namen jetzt was anderes eingeben zum Beispiel Max dann kommt:
M
a
x
360
Benutzeravatar
noisefloor
User
Beiträge: 2899
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Freitag 3. April 2020, 14:34

Hallo,

ergänzend:

Code: Alles auswählen

for x in l: n+=x 
    Quersumme = 0
    int(x)
Bei _jedem_ Schleifendurchlauf wird `Quersumme` neu mit 0 definiert -> willst du nicht, ist auch überflüssig. Außerdem wird im gezeigten Code `Quersumme` in der Schleife nicht benutzt, also brauchst du es auch in der Schleife nicht definieren.

`int(x)` wandelt zwar x in einen Integer-Wert, aber der ist direkt wieder weg, weil das Ergebnis des Funktionsaufrufs an nichts gebunden wird.

Tipp: Programmieren != Raten

Gruß, noisefloor
Jankie
User
Beiträge: 340
Registriert: Mittwoch 26. September 2018, 14:06

Freitag 3. April 2020, 14:49

n ist doch dein String "80104121116104111110107105100" da musst du drüber iterieren, um an jedes Zeichen zu kommen. Und jedes Zeichen von diesem String muss in ein int konvertiert werden und auf die Quersumme aufaddiert werden.
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

Freitag 3. April 2020, 14:56

??? ich verzweifel gerade ???

Code: Alles auswählen

Name = "Max"
l = map(str,(map(ord, Name)))
n = ""
for x in l: n += x 
Quersumme = 0
int(n)

for char in Name:
    Quersumme = Quersumme + int(x)

print (Quersumme + int(n))
Jankie
User
Beiträge: 340
Registriert: Mittwoch 26. September 2018, 14:06

Freitag 3. April 2020, 15:00

Glaub mir, ich auch haha.

Du iterierst ja immer noch in der unteren Schleife über den falschen String. Die Zeile Quersumme = Quersumme + int(x) stimmt fast, du musst allerdings jeden char vom String n umwandeln, nix mit x.

Am ende musst du nur Quersumme ausgeben, ohne + irgendwas. Das int(n) hat keine Wirkung und kann komplett weg.
Sirius3
User
Beiträge: 12008
Registriert: Sonntag 21. Oktober 2012, 17:20

Freitag 3. April 2020, 15:02

@Jankie: Du hast ein Stipendium verdient.
phythonkid
User
Beiträge: 31
Registriert: Donnerstag 2. April 2020, 11:08

Freitag 3. April 2020, 15:06

@Sirius3 ja!
@Jankie ich hab es jetzt danke für die hilfe von dir und auch von allen anderen
Jankie
User
Beiträge: 340
Registriert: Mittwoch 26. September 2018, 14:06

Freitag 3. April 2020, 15:07

@Sirius3:
eine Packung Beruhigungsmittel würde mir eher helfen.

@phythonkid:
Dann zeig mal bitte her den fertigen Code. Und wie hast du eigentlich diese Zeile hier hinbekommen? l = map(str,(map(ord, Name)))
Benutzeravatar
/me
User
Beiträge: 3362
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Freitag 3. April 2020, 17:02

Jankie hat geschrieben:
Freitag 3. April 2020, 15:07
@phythonkid:
Dann zeig mal bitte her den fertigen Code. Und wie hast du eigentlich diese Zeile hier hinbekommen? l = map(str,(map(ord, Name)))
Wenn der Fragesteller diesen Code wirklich geschrieben hat, dann sollte es ihm ein leichtes sein das Ergebnis mit der join Methode von Strings zu einem String zusammenzuführen, dann mittels map wiederum alle darin enthaltenen Ziffern in Integer-Werte zu überführen um anschließend mit `sum` das Ergebnis zu ermitteln. Die ganze Aufgabe kann als Einzeiler gelöst werden.

Da wir es hier aber anscheinend mit jemandem zu tun haben der sich nicht verstandene Codeschnipsel von überall zusammensucht, um sie dann durch Raten zu einem lauffähigen Programm zu verbinden, wird das wohl doch eher schwer.
Antworten