Pruefziffernrechner

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.
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Pruefziffernrechner

Beitragvon nightm4r3^ » Samstag 16. Februar 2008, 11:29

:twisted:
Seit mir nicht böse wenn ich schon wieder schreib, aber ich wollte mal eure Meinungen hören, wie ihr einen Prüfziffernrechner machen würdet.

Für alle die nicht wissen was das ist:

1. Ihr habt eine Nummer z.B.
29958247

2. Jetzt rechnet ihr die letzte Ziffer mal 2, die vorletzte mal 1, die drittletzte wieder mal 2 und so weiter und bildet dann aus jeder neu entstandenen Zahl die Quersumme. In unsrem Beispiel dann:
29918445

3. Jetzt alle Ziffern Zusammenrechnen:
42

4.Und jetzt diese Zahl von der nächst größeren 10-er Zahl abziehen:
50-42=8

Damit wäre die Prüfziffer 8. Ich find es ist eine spannende Aufgabe und (für mich jedenfalls) nicht so leicht. Also wenn ihr Lösungsvorschläge habt, immer raus damit
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Samstag 16. Februar 2008, 11:41

Schon mal auf Wikipedia oder bei Google vorbeigeschaut? Da gibt es nämlich eine Menge an Verfahren zur Erzeugung von Prüfziffern, welche auch mathematisch einen Sinn machen.
ne0h
User
Beiträge: 115
Registriert: Samstag 16. Februar 2008, 11:35

Beitragvon ne0h » Samstag 16. Februar 2008, 11:44

Hi,

ich weiss nicht so recht, worauf Du hinaus willst mit der Frage, "Wie würdet Ihr einen Prüfziffer Rechner machen", aber so wirklich viel lässt sich da nicht "neu" erfinden.

Die Formeln dazu gibt findet man überall, der Aufbau selbst bleibt ja jedem selber überlassen (Konsolenprogramm, grafische Oberfläche) und die Funktionalität ist ja eigentlich nur simples Übernehmen der Funktionen in Programmcode.

Wir haben diesen Prüfziffernrechner seinerzeit in der Schule als Übung geschrieben und wie gesagt, es ist nicht viel mehr dahinter als die Rechenfunktionen einfach umzuschreiben in der erforderlichen Syntax.

Beginn doch einfach mal damit, die Funktionalität zu implementieren (schreib Dir einfach ne Funktion die erstmal alles beinhaltet), dann lagerst Du einzelne Teile aus, programmierst darum einen sinvollen Aufbau (Menü, usw.) und dann kannst Du das ganze ja noch irgendwie erweitern mit anderen Prüfsummenrechnern.

Spass macht es auf jeden Fall und es ist eine sehr gute Übung, grade zu Beginn...


ne0h
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Beitragvon nightm4r3^ » Samstag 16. Februar 2008, 11:45

Es geht mir hier aber nicht darum die Lösung zu erfahren, sonst würde ich nicht seit Tagen daran sitzen so einen Rechner zu machen.
Ich wollte
1. Hier wenn überhauptverbesserungsvorschläge bekommen.
2. Falls jemand nichts zu tun hat, ihm eine "nette kleine" Aufgabe stellen.



Da gibt es nämlich eine Menge an Verfahren zur Erzeugung von Prüfziffern



Ja mathematische Verfahren. Aber schon mal versucht das in Python umzusetzten?

mfg nightm4r3^ :roll:
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Samstag 16. Februar 2008, 11:52

Zeig doch erst mal, was du an Code hast, dann kann man dir auch einfacher weiterhelfen.

Ist das Problem nun, dass du keine Verfahren zu Berechnung findest, oder bekommst du ein Verfahren nicht implementiert?
Gnushi
User
Beiträge: 77
Registriert: Dienstag 12. Dezember 2006, 09:49

Re: Pruefziffernrechner

Beitragvon Gnushi » Samstag 16. Februar 2008, 11:52

nightm4r3^ hat geschrieben:Also wenn ihr Lösungsvorschläge habt, immer raus damit


Die Summe von Ziffern in einer Liste bekommst Du mit

Code: Alles auswählen

sum(liste)
heraus. Hast du eine liste, dann kann man sie mit

Code: Alles auswählen

 liste.reverse()
einfach umdrehen, andererseits bietet

Code: Alles auswählen

liste[::-1]
auch die Möglichkeit, alle Ziffern "von hinten" aufzuführen. Ob ein Index der Liste gerade oder ungerade ist, bekommst Du mit dem Modulo-Operator heraus. Die Anzahl der 10er einer Zahl ist ein Einsatzgebiet der div-Operation.

Liebe Grüße

Gnushi
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Beitragvon nightm4r3^ » Samstag 16. Februar 2008, 11:54

Ich weiß nicht ob ihr mich recht Versteht. Ich bin mit meinem Programm schon weiter. Ich habe schon Lösungswege und ich wollte mit dem Post keine Hilfe, sondern allen Python usern (wenn sie Spass darn haben) eine Aufgabe zeigen an der ich momentan am knobeln bin.
ne0h
User
Beiträge: 115
Registriert: Samstag 16. Februar 2008, 11:35

Beitragvon ne0h » Samstag 16. Februar 2008, 12:01

Zeig doch mal ein wenig Code, damit wir etwas "Handfestes" haben worauf man sich beziehen kann.

Wenns Dir nicht um Hilfe geht dann kann man trotzdem ein wenig gemeinsam dran knobeln, nur wäre es wirklich interessant zu sehen, wie der Code bei Dir aussieht und welchen Weg Du genommen hast.


ne0h
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Beitragvon nightm4r3^ » Samstag 16. Februar 2008, 12:05

Da ich noch nicht ganz fertig bin, ist es vllt ein bisschen Schwer zu verstehen. Gerade deswegen, weil ich mir auch keine mühe mit den Variablen bezeichnungen gegeben hab:

Code: Alles auswählen


#Definition der Quersumme:
def Quersumme(a):
    quersumme=sum([int(p) for p in str(a)])
    print quersumme

#Definition der Prüfziffer
def pruefziffer(a):
    Liste1=map(int, str(a))
    Listeungerade=[]
    i=len(Liste1)
    for n in range (0,i):
        if Liste1[n]%2==0:
            quersumme=Quersumme(Liste1[n]*2)
            print quersumme



Bis jetzt gibt er nur Bis zu Schritt 2 die Zahlen alle untereinander aus und auch nur bis jetzt von den Geraden Zahlen.
Gnushi
User
Beiträge: 77
Registriert: Dienstag 12. Dezember 2006, 09:49

Beitragvon Gnushi » Samstag 16. Februar 2008, 12:08

Hi!

nightm4r3^ hat geschrieben:Ich habe schon Lösungswege und ich wollte mit dem Post keine Hilfe, sondern allen Python usern (wenn sie Spass darn haben) eine Aufgabe zeigen an der ich momentan am knobeln bin.


Na, dann habe ich Dich wohl falsch verstanden.

Unter http://www.pythonchallenge.com/index.htm findest du weitere Knobelaufgaben.

GnuShi
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Beitragvon nightm4r3^ » Samstag 16. Februar 2008, 12:11

Danke GnuShi
die Seite sieht wirlkkch gut aus. Die werd ich wohl mal öfter besuchen :wink:
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 16. Februar 2008, 13:59

In Quersumme würde in statt ``print`` ``return`` schreiben und die ``range``-Konstruktion in der anderen Funktion mit enumerate() ersetzen. Oder einem anderen Generator der 1 und 0 zurückgibt. Lässt sich mit itertools' ``izip`` und ``cycle`` vermutlich recht elegant zusammenbauen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Beitragvon BlackJack » Samstag 16. Februar 2008, 17:54

Zum Beispiel so:

Code: Alles auswählen

def checksum(n):
    x = sum(sum(divmod(a * b, 10))
            for a, b in izip(imap(int, reversed(str(n))), cycle((2, 1))))
    return x  # Hier fehlt noch was.


Bei dem ``return`` fehlt noch der 4. Schritt, da möchte ich den Spass beim selber lösen (der Hausaufgaben?) nicht vorwegnehmen. Andererseits kann sich der OP das auch aus dieser Scheme-Lösung rauslesen (wenn er das lesen kann :-)): http://paste.pocoo.org/show/28155/
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Samstag 16. Februar 2008, 18:09

Wie gemein, jetzt fehlem ihm noch 6 Zeichen zur Lösung -- zumindest fällt mir nichts kürzeres ein ...:P
nightm4r3^
User
Beiträge: 83
Registriert: Montag 11. Februar 2008, 15:43
Kontaktdaten:

Beitragvon nightm4r3^ » Montag 18. Februar 2008, 15:56

Das ist ja alles gut und schön, aber würde es nicht gehen mit meinem Ansatz weiter zu machen? Unser Lehrer wäre nicht so erfreut wenn ich so viele Befehle benutze, die wir noch nicht besprochen haben...

Also ich würde eure Lösung halt gern verstehen^^

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], de_tom