problem beim code zu aufsummieren

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.
Squaller
User
Beiträge: 12
Registriert: Mittwoch 21. November 2007, 18:34
Kontaktdaten:

problem beim code zu aufsummieren

Beitragvon Squaller » Mittwoch 12. Dezember 2007, 19:58

Code: Alles auswählen

def aufsum(i):
    ergebnis = len(i)
    zaehler = len(i[-1])
    x = 1
    summe = 0
    while(ergebnis > 0):
        summe = int(i[zaehler - 1]) * x + summe
        x = x + 1
        ergebnis = ergebnis - 1
        zaehler = zaehler - 1
    return summe
print aufsum("123")


also, mein problem... i-wie bekomme ich nicht das richtige ergebnis...
das programm soll die eingegebenen zahlen aufsummieren, nach dem prinzip 1 * zahl1 + 2* zahl2.... 9*zahl9

zb bei 1956:1*1 + 2*9 +3*5 +4*6
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 12. Dezember 2007, 20:05

Es geht auch noch kürzer, aber wenn wir als Input eine Liste nehmen:

Code: Alles auswählen

def aufsum(l):
    total = 0
    for n, i in enumerate(l):
        total += (n + 1) * i
    return total

print aufsum([1,2,3])

Hilft das?

Gruß,
Christian
Squaller
User
Beiträge: 12
Registriert: Mittwoch 21. November 2007, 18:34
Kontaktdaten:

Beitragvon Squaller » Mittwoch 12. Dezember 2007, 20:08

danke, eig würde es ja so gehn, nur darf ich den befehl enumerate nicht benutzen..
es würde auch rekursiv gehen, jedoch nur mit den befehlen (while, for, if, range, len etc)
sonst hätte ich nicht diese probleme ^^
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 12. Dezember 2007, 20:23

Squaller hat geschrieben:danke, eig würde es ja so gehn, nur darf ich den befehl enumerate nicht benutzen.

Warum?
Squaller
User
Beiträge: 12
Registriert: Mittwoch 21. November 2007, 18:34
Kontaktdaten:

Beitragvon Squaller » Mittwoch 12. Dezember 2007, 20:25

weil wir den befehl noch nicht iom unterricht hatten...
für private zwecke werde ich den benutzen, jedoch muss ich das auch in der klasse aufschreiben und erklären können, dann etsteht ein problem mit den leuten die diesen befehl nicht kennen, das ist bei uns nicht so gern gesehen :(
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 12. Dezember 2007, 20:32

Squaller
User
Beiträge: 12
Registriert: Mittwoch 21. November 2007, 18:34
Kontaktdaten:

Beitragvon Squaller » Mittwoch 12. Dezember 2007, 20:40

Dookie hat geschrieben:Hallo,

leider kommt es immer wieder vor, daß hier manche glauben, wir würden ihre Hausaufgaben lösen. Dafür ist dieses Forum echt nicht gedacht. Wenn einer bei einem Problem Hilfe braucht, geben wir gerne Hilfestellung, aber wenn hier Leute her kommen, die weder von Programmierung noch von Python eine Ahnung haben und glauben wir würden Ihnen fertige Lösungen liefern, so sind die hier falsch!


Gruß

Dookie


aber ich hab aj schon selbst ein programm geschrieben und möchte ja nur wissen wo da der fehler liegt und keine fertige lösung, ich bin mir schon bewusst was da steht, ich habs mir selbst schon durchgelesen, allerdings ist dieses forum doch dazu da hilfestellung zu geben, was für mich bedeutet dass man (auch wenn es eine "hausaufgabe" sein sollte) wenigstens helfen sollte fehler zu finden, ich schreibe ja nicht die aufgabenstellung, sondern nur mein programm hin und möchjte den fehler wissen ;)
BlackJack

Beitragvon BlackJack » Mittwoch 12. Dezember 2007, 20:40

Ohne `enumerate()` (ungetestet):

Code: Alles auswählen

from itertools import count, izip

def aufsummieren(iterable):
    return sum(int(i) * x for i, x in izip(iterable, count(1)))


:-)

Es wird bei euch also nicht gern gesehen, wenn Schüler selbstständig denken und lernen!? Kein Wunder das PISA immer so peinlich ist. ;-)
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Mittwoch 12. Dezember 2007, 20:42

Lustig :3

Code: Alles auswählen

In [7]: sum([(i+1)*int(j) for i, j in enumerate("1458")])
Out[7]: 56


(Gott, ich liebe Generator)
Squaller
User
Beiträge: 12
Registriert: Mittwoch 21. November 2007, 18:34
Kontaktdaten:

Beitragvon Squaller » Mittwoch 12. Dezember 2007, 20:48

hehe^^
ja, is wirklich so... als append benutzt wurde is der lehrer ganz böse geworden :D
sry wenn ich nerven sollte, aber das geht nich :-(
findet keiner den fehler bei mir?
würde schon gern wissen wie mein programm richtig wäre, weil ich es dann auch besser nachvollziehen kann, denn: aus fehlern lernnt man doch am meisten ;)
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Mittwoch 12. Dezember 2007, 20:54

Squaller hat geschrieben:hehe^^
ja, is wirklich so... als append benutzt wurde is der lehrer ganz böse geworden :D
sry wenn ich nerven sollte, aber das geht nich :-(
findet keiner den fehler bei mir?
würde schon gern wissen wie mein programm richtig wäre, weil ich es dann auch besser nachvollziehen kann, denn: aus fehlern lernnt man doch am meisten ;)
Jap. Man merkt dann nämlich, was für'n Driss man gedacht hat und überlegt sich'ne neue, tollere Struktur.

Lass dich nicht von deinem Lehrer tyrannisieren. Wenn er sich aufregt, dass du enumarate benutzt, erklär ihm einfach was das macht und sag ihm, dass du das aus purem Interesse des Unterichts selbst angeeignet hast. Wenn er sich dann noch aufregt, geh zum Rektor.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 12. Dezember 2007, 20:58

Hoi,

hast ja recht: Du hast einen Lösungsvorschlag gegeben, also werde ich mich mal darauf beziehen.

Squaller hat geschrieben:hehe^^
ja, is wirklich so... als append benutzt wurde is der lehrer ganz böse geworden :D

Dann habt ihr schlechten Unterricht. Wenn ein Lehrer nicht akzeptiert, daß seine Schüler eigenmotiviert lernen, sollte man mit ihm reden.

Squaller hat geschrieben:sry wenn ich nerven sollte, aber das geht nich :-(
findet keiner den fehler bei mir?

Doch, vor allem in der Rechschreibung. Sorry, aber es ist einfach schwieriger wilde Grammatik & Phantasiewörter zu entziffern, als jemanden, der sich da etwas mehr Mühe gibt. Möchte ich auch mal sagen dürfen.

Zu Deinem Code:
- Wieso bestimmst Du "Zaehler" so wie Du es tust? Auf diese Weise wird "Zaehler" abhängig von der letzten Ziffer.
- Wieso wird in der Schleife von einem Zähler (ich nehme mal an, es soll eine Zählvariable darstellen) etwas abgezogen?

Wenn ich das berücksichtige komme ich auf

Code: Alles auswählen

def aufsum(i):
    ergebnis = len(i)
    zaehler = 0
    summe = 0
    x = 1
    while(ergebnis > 0):
        summe += int(i[zaehler]) * x
        x += 1
        ergebnis -= 1
        zaehler += 1
    return summe
print aufsum("1956")

Das ist aber immer noch reichlich von hinten durch die Brust ins Auge! Überlege mal, ob Du - selbst ohne die vielen schönen Features von Python - *wirklich* zwei "Zählvariablen", nämlich "ergebnis" und "zaehler" brauchst, die Du verändern mußt. Tipp: In welcher Beziehung könntest Du die beiden Größen stellen? Kannst Du das vielleicht beim Start der Schleife abfragen?

Gruß,
Christian
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Beitragvon BlackVivi » Mittwoch 12. Dezember 2007, 21:06

Hier nochmal eine Version ohne Enumarate :3

Code: Alles auswählen

In [63]: def aufsummieren(liste, enum=1):
    if len(liste) > 1:
        return (liste[0] * enum) + aufsummieren(liste[1:], enum+1)
    else:
        return liste[0] * enum
   ....:     
   ....:     

In [68]: aufsummieren([1,4,5,8])
Out[68]: 56
Squaller
User
Beiträge: 12
Registriert: Mittwoch 21. November 2007, 18:34
Kontaktdaten:

Beitragvon Squaller » Mittwoch 12. Dezember 2007, 21:20

erstmal danke...
ich weiß was du meinst... nur ich komme nicht drauf wie ich nur eine variable verwenden kann...
ich denk dass ich ja jetzt das gröbste habe ist auch schonmal ein großer fortschritt..
aber ich habe eine frage...
die variable zähler, warum wird die jetzt hoch gezählt und ist nicht mehr len(i)... :? überfordert^^ :oops:
Squaller
User
Beiträge: 12
Registriert: Mittwoch 21. November 2007, 18:34
Kontaktdaten:

Beitragvon Squaller » Mittwoch 12. Dezember 2007, 21:32

Code: Alles auswählen

def aufsum(i):
    zaehler = 0
    summe = 0
    x = 1
    while(len(i) > zaehler):
        summe = summe + int(i[zaehler]) * x
        x = x + 1
        zaehler = zaehler + 1
    return summe

so in etwa :)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder