Projekt für die Schule
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Hausaufgaben sind dazu da, selbst gemacht zu werden :-) Fang' doch mal was an, und wenn du irgendwo nicht weiterkommst, stelle konkrete Fragen. Niemand wird dir hier deine Schularbeiten machen.
@inamarina: Was hast Du denn schon an Quelltext? Fang doch erst einmal an Umrechnungsfunktionen für °C in die anderen Temperatureinheiten zu schreiben.
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
`raw_input` in Python 2.x und `input` in Python 3.x. Ich würde dann vielleicht erstmal mit einem Tutorial anfangen, für Python 3.x siehe http://tutorial.pocoo.org
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Na ein gewisses Grundwissen brauchst du schon, sonst klappt das nicht :-)
Jetzt hast du ja den Ansatz mit `input` (Python 3).
Jetzt hast du ja den Ansatz mit `input` (Python 3).
@inamarina: Du musst Tutorials nicht nur anschauen und lesen, sondern durcharbeiten. Also die Sachen die da beschrieben werden auch ausprobieren und damit ein wenig herumspielen bis Du sie verstanden hast. Und da stand *immer* etwas drin was Dir für das Projekt etwas nützt -- vorausgesetzt es waren Python-Tutorials. Du musst halt die Grundlagen von Python lernen, wenn Du damit etwas programmieren willst.
Ich würde auch empfehlen mal anzugucken, was ihr im Unterricht dazu gelernt habt. Also ich glaube zumindest nicht, dass der Lehrer eine Hausaufgabe gibt ohne die Grundlagen vemittelt zu haben. In dem Fall wie man Nutzereingaben macht.
Und dann hast Du schon überlegt was Du anzeigst, wenn jemand -1000 eingibt?
Und dann hast Du schon überlegt was Du anzeigst, wenn jemand -1000 eingibt?
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Dann arbeite doch einfach mal ein Tutorial durch.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Kann ich nicht glauben! Sollte ich da unrecht haben, so entschuldige bitte, aber die am meisten genutzte Ausrede von Schülern ist seit jeher "haben wir nicht besprochen"...inamarina hat geschrieben:mein problem ist, dass wir in der Schule nichts darüber gemacht haben
Das wiederum glaube ich Dir SCNRinamarina hat geschrieben: und ich so zusagen bei 0 stehe.
Welche Schulform und Klasse ist denn das? In welchem Rahmen erfolgt denn die Aufgabe? Eigenes Erarbeiten einer Programmiersprache würde ich jetzt mal ins Informatikstudium ab dem 3. Semester einordneninamarina hat geschrieben: Wir müssen uns das selber beibringen und bei mir funktioniert gar nichts
Daher muss doch im Unterricht etwas besprochen worden sein!
So, nun mal wieder konstruktiv: Poste doch mal Deine Ansätze!
Ich würde mir als erstes eine Funktion schreiben, die mir Grad Celsius in Kelvin umwandelt. Diese nimmt als Parameter einen float-Wert in °C entegegen und gibt einen float-Wert mit dem Ergebnis der Berechnung zurück. Die kannst Du z.B. "celsius_to_kelvin()" nennen.
Da Kelvin die physikalische Grundeinheit ist, kannst Du dann im Anschluss eine Funktion "kelvin_to_fahrenheit" schreiben (Theoretisch könntest Du auch von "celsius" ausgehen) . Diese funktioniert letztlich genauso, nur dass die mathematische Berechnung eine andere ist.
Diese Funktionen kannst Du noch in einer Shell entwickeln / testen. Probiere das eben mal mit einigen Zahlen ausprobieren, so wie ich hier in der ipython-Shell:
Code: Alles auswählen
In [2]: celsius_to_kelvin(0)
Out[2]: 273.14999999999998
In [3]: celsius_to_kelvin(10)
Out[3]: 283.14999999999998
In [4]: for value in range(0, 30, 5):
...: print "{0} °C -> {1} °K".format(value, celsius_to_kelvin(value))
...:
...:
0 °C -> 273.15 °K
5 °C -> 278.15 °K
10 °C -> 283.15 °K
15 °C -> 288.15 °K
20 °C -> 293.15 °K
25 °C -> 298.15 °K
In [4] siehst Du, wie ich mittels einer Schleife verschiedene Werte ausrechne. Die range()-Funktion generiert mir die Werte. Wie Du siehst, gibt man Start- und Endwert sowie die Schrittweite an. Genau das suchst Du doch auch!
Letztlich fehlt jetzt noch die Abfrage der Start- und Endwerte, sowie die spezielle Formulierung der Umrechnungsfunktionen. Aber raw_input() bzw. input() wurden Dir ja schon genannt.
Also, auf geht's
Edit: Wir hatten dazu übrigens schon mal was hier im Forum - allerdings wird Dir das nicht so viel nutzen, da dort einige eher fortgeschrittene Konzepte zum Tragen kommen.
@all: Der Thread läd fast dazu ein, das ganze mal wieder in anderen Sprachen umzusetzen, gel
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Es gibt kein Grad Kelvin. *duck*Hyperion hat geschrieben:Code: Alles auswählen
In [4]: for value in range(0, 30, 5): ...: print "{0} °C -> {1} °K".format(value, celsius_to_kelvin(value)) ...: ...: 0 °C -> 273.15 °K 5 °C -> 278.15 °K 10 °C -> 283.15 °K 15 °C -> 288.15 °K 20 °C -> 293.15 °K 25 °C -> 298.15 °K
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Laut wikipedia hast Du recht:Darii hat geschrieben:Es gibt kein Grad Kelvin. *duck*
Ok, hab ich falsch im Kopf gehabtwikipedia hat geschrieben: Bis 1967 lautete der Einheitenname Grad Kelvin, das Einheitenzeichen war °K.
Damit wäre das Hauptproblem des Threads gelöst
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Bei Wikipedia stimmt doch die Formel nicht bei Celsius zu Fahrenheit oder bin ich plem plem???
http://de.wikipedia.org/wiki/Grad_Celsius
Fahrenheit = TC · 1,8 + 32 liefert falsche Werte. Richtig wäre Fahrenheit = ((celsius * 9) / 5) + 32
http://de.wikipedia.org/wiki/Grad_Celsius
Fahrenheit = TC · 1,8 + 32 liefert falsche Werte. Richtig wäre Fahrenheit = ((celsius * 9) / 5) + 32
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das könnte evtl. an der Fließkommaungenauigkeit liegen? In der Shell sieht es zunächst gut aus:peddy hat geschrieben: Fahrenheit = TC · 1,8 + 32 liefert falsche Werte. Richtig wäre Fahrenheit = ((celsius * 9) / 5) + 32
Code: Alles auswählen
In [3]: from __future__ import division
In [4]: 9 / 5
Out[4]: 1.8
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@peddy: Die Abweichungen sind doch aber wohl ein Witz:
Da beides mit Fliesskommaungenauigkeiten behaftet ist, ist am Ende wahrscheinlich auch beides streng genommen falsch.
Die Formel bei Wikipedia stimmt aber, denn 9/5 ist nun einmal *genau* 1,8. Das der Rechner 1.8 intern nicht exakt repräsentiert, dafür kann Wikipedia ja nix.
Code: Alles auswählen
In [100]: ['%.40f' % ((c*1.8+32) - (c*9./5+32)) for c in xrange(3,300,10)]
Out[100]:
['0.0000000000000000000000000000000000000000',
'0.0000000000000071054273576010018587112427',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000000000000000000000000000000',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000000568434188608080148696899414',
'0.0000000000001136868377216160297393798828',
'0.0000000000001136868377216160297393798828',
'0.0000000000000000000000000000000000000000']
Die Formel bei Wikipedia stimmt aber, denn 9/5 ist nun einmal *genau* 1,8. Das der Rechner 1.8 intern nicht exakt repräsentiert, dafür kann Wikipedia ja nix.
Da die Hausaufgaben die gestern abend bis heute morgen noch gemacht werden mussten, wahrscheinlich heute morgen noch schnell abgeschrieben wurden, können wir ja jetzt die Sprachvielfalt wieder aufleben lassen. So hätte ich das wohl zu meiner Schulzeit geschrieben:
Testlauf:
Code: Alles auswählen
10 INPUT"VON";A:INPUT"BIS";B:PRINT"CELSIUS","KELVIN","FAHRENHEIT"
20 FOR C=A TO B STEP 10:PRINT C,C+273.15,C*9/5+32:NEXT
Code: Alles auswählen
RUN
VON? 3
BIS? 30
CELSIUS KELVIN FAHRENHEIT
3 276.15 37.4
13 286.15 55.4
23 296.15 73.4
READY.
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Hier mal in Scheme:
Leider ist die Eingabereihenfolge beliebig, da die Reihenfolge der "assignments" in `let` beliebig ist. `let*`, das geordnete `let`, gibt's aber nicht in der "named" Form (der Name ist hier "loop"). Ich war zu faul, mir das jetzt zu bauen. Außerdem war ich zu faul, mir ein Tabellenformatierungsdings in Scheme zu basteln, und soweit ich weiß, hat die Standard Library da kein `str.xjust`-Äquivalent :-(
Code: Alles auswählen
(define stdin
(transcoded-port (standard-input-port)
(make-transcoder (utf-8-codec))))
(define (get-number-from-stdin msg)
(display msg)
(string->number (get-line stdin)))
(define (celsius->kelvin c)
(+ c 273.15))
(define (celsius->fahrenheit c)
(+ 32 (* c 1.8)))
(define (main)
(let loop [(from (get-number-from-stdin "from: "))
(to (get-number-from-stdin "to: "))]
(unless (= from to)
(printf "C: ~a | K: ~a | F: ~a\n"
from
(celsius->kelvin from)
(celsius->fahrenheit from))
(loop (+ from 1) to))))
(main)
Code: Alles auswählen
to: 30
from: 3
C: 3 | K: 276.15 | F: 37.4
C: 4 | K: 277.15 | F: 39.2
C: 5 | K: 278.15 | F: 41.0
...
C: 28 | K: 301.15 | F: 82.4
C: 29 | K: 302.15 | F: 84.2