Seite 1 von 1
kodierung mit fibonacci
Verfasst: Montag 24. März 2014, 13:25
von checknix
also habe kaum python erfahrungen, besuche einen !einsteiger kurs(ohne vorkenntnisse!) und nach dem zweiten Termin (etwa 90 min Lehrinhalt in den erklärt würde was unterschied zwischen for und while schleifen und fruitfullfunctions sind, haben wir folgnede aufgabe bekommen:
Schreibe ein Programm, das ein verschlüsseltes
Passwort erstellt! Der User soll sein Geburtsdatum
eingeben können (erst Tag, dann Monat, dann Jahr).
Den jeweiligen Tag (z.B. 10ter) kodiert das Programm
in Form der jeweiligen Fibonacci-Zahl (hier 10te = 34).
Das gleiche macht es für den Monat und das Jahr und
setzt so das neue Passwort zusammen.
Schreibe zur Übersichtlichkeit eine passende
Fibonacci-Funktion, die vom Programm mehrmals
aufgerufen werden kann!
besten dank für ideen
einfache die ich hin bekomme:
Code: Alles auswählen
def f(n):
if n>=2: return(f(n-1)+f(n-2))
elif n==1 : return 1
elif n==0 : return 0
x=int(raw_input('Eingabe:'))
for i in range(x):
var = (f(i))
print var
Re: kodierung mit fibonacci
Verfasst: Montag 24. März 2014, 13:39
von BlackJack
@checknix: Die erste Idee ist die Fibonacci-Funktion nicht rekursiv zu formulieren, denn das Jahr 2014 wirst Du damit nicht berechnet bekommen.
Erklär doch mal den Sinn der Schleife in Deinem Programm‽
Was sind denn „fruitfullfunctions”?
Re: kodierung mit fibonacci
Verfasst: Montag 24. März 2014, 13:58
von checknix
nun ja nach insgesamt 180 min mit python weiss ich das selber nciht. ich glaube der dozent hat einen knax, das war der inhalt der stunde:
Code: Alles auswählen
zahl = 12
raten = 0
print "bitte raten!"
while raten != zahl:
raten = raw_input("raten: ")
raten =int(raten)
else:
print "richitg"
#Benutzersteurung Benutzerabfrage
while True:
zahl= int(raw_input('zahl: '))
if zahl < 0:
print 'nicht erlaubt'
continue
elif zahl == 'end':
print 'ende'
break
else:
print 'zahl erlaubt'
#Berechnungen
## erg = 1
## while zahl > 0:
##
## erg = erg *zahl
## zahl =zahl -1
## print 'ergebnis: ', erg
erg = 1
for i in range(2,zahl+1):
erg=erg*i
print erg
print 'done'
#Benutzersteurung Benutzerabfrage
while True:
zahl= int(raw_input('zahl: '))
if zahl < 0:
print 'nicht erlaubt'
continue
elif zahl == 'end':
print 'ende'
break
else:
print 'zahl erlaubt'
#Berechnungen
erg = 1
while zahl > 0:
erg = erg *zahl
zahl =zahl -1
print 'ergebnis: ', erg
print 'done'
und das ist die unten genannte hausübung
nun wie kann ich die aufagbe lösen. ich brauch kein skript, nur eine bauplan!
Re: kodierung mit fibonacci
Verfasst: Montag 24. März 2014, 15:08
von BlackJack
@checknix: Na Du brauchst eine Funktion zum berechnen der n-ten Fibonacci-Zahl, und zwar eine die nicht rekursiv arbeitet. Und dann eine Funktion die vom Benutzer eine Zahl abfragt, denn das musst Du ja drei mal machen, und da sollte man natürlich nicht drei mal den gleichen Quelltext schreiben müssen.
Das erstellen des Passworts würde ich auch in eine Funktion stecken. Halt das Gesamtproblem in kleinere Teilprobleme zerlegen, solange bis man die kleinsten Teilprobleme mit kleinen Funktionen lösen kann, aus denen man dann Teillösungen für die Teilprobleme aus höheren Ebenen als einfache Funktionen schreiben kann.
Was bedeutet es denn aus den drei Fibonaccizahlen das neue Passwort zusammenzusetzen? Soll man die Addieren, Multiplizieren, deren Zeichenkettendarstellung einfach aneinander hängen?
Edit: Ich weiss jetzt was „fruitful functions” sind: Das Buch „How to Think Like a Computer Scientist” nennt so Funktionen die einen expliziten Rückgabewert haben, als Abgrenzung zu Funktionen die nur ihres Effektes wegen aufgerufen werden. Also das was man traditionell auch als den Unterschied zwischen (echten) Funktionen und Prozeduren kennt. Das Kapitel könntest Du Dir mal durchlesen:
http://openbookproject.net/thinkcs/pyth ... tions.html
Re: kodierung mit fibonacci
Verfasst: Montag 31. März 2014, 19:25
von checknix
'Und dann eine Funktion die vom Benutzer eine Zahl abfragt, denn das musst Du ja drei mal machen, und da sollte man natürlich nicht drei mal den gleichen Quelltext schreiben müssen. ". Mir ist das nach eineer Woche rumprbieren beim besten Willen nicht gelungen, eine Idee? ich dreh beinahe durch erst recht mit dem Vorwissen.
Besten Dank bis dato
. also Fib sieht jetz so aus:;
Code: Alles auswählen
def Fibonacci(a=200): ## Fibonacci funktion wird definiert mit default Wert --> kann bei Funktionsaufruf abgeaendert werden
Zahl1 = 0
print Zahl1
Zahl2 = 1
print Zahl2
Zahl3 = 0
while (Zahl3 < a):
Zahl3 = Zahl1 + Zahl2
print Zahl3, "Funktion"
Zahl1 = Zahl2
Zahl2 = Zahl3
return Zahl3 ##gibt letzte Zahl der Folge aus
Re: kodierung mit fibonacci
Verfasst: Montag 31. März 2014, 21:24
von BlackJack
@checknix: Woran scheitert es denn? Du kennst ja die eingebaute Funktion `raw_input()`. Was jetzt gefragt ist, wäre eine Funktion die so ähnlich funktioniert, aber keine Zeichenkette liefert, sondern eine Zahl. Und die sollte die Frage solange wiederholen bis der Benutzer tatsächlich eine Zahl eingegeben hat, denn sonst kann das Programm ja nicht weiterarbeiten.
Die Fibonacci-Funktion hat zum iterativen Berechnen schon den richtigen Ansatz, aber das Argument und die Abbruchbedingung passen nicht zur Aufgabenstellung. Man soll ja nicht die erste Fibonacci-Zahl berechnen die grösser als ein gegebenes `a` ist, sondern die `a`-te Zahl. Hier wäre `n` auch ein besserer Name, denn „die `n`-te Zahl” hört sich deutlich vertrauter an.

Re: kodierung mit fibonacci
Verfasst: Montag 31. März 2014, 21:31
von HarteWare
Hallo zusammen,
ich komme ja ungern vom Thema ab, aber ich hab hier diesen Code gelesen und frage mich, wie kann etwas das zu int convertiert wurde ein string ('end') sein? Kenn ich da Python noch nicht so gut?
Code: Alles auswählen
#Benutzersteurung Benutzerabfrage
while True:
zahl= int(raw_input('zahl: '))
if zahl < 0:
print 'nicht erlaubt'
continue
elif zahl == 'end': # hier mein ich
print 'ende'
break
else:
print 'zahl erlaubt'
Ich hoffe da kann mich jemand aufklären
mfg
HarteWare
Re: kodierung mit fibonacci
Verfasst: Montag 31. März 2014, 21:42
von Sirius3
@HarteWare: Da kennst Du Python gut genug. Diese Bedingung kann nie erfüllt werden.