Projekt für die Schule

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.
inamarina
User
Beiträge: 6
Registriert: Mittwoch 30. März 2011, 09:04

schon erledigt, danke an alle
Zuletzt geändert von inamarina am Mittwoch 30. März 2011, 19:13, insgesamt 1-mal geändert.
Dauerbaustelle
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.
BlackJack

@inamarina: Was hast Du denn schon an Quelltext? Fang doch erst einmal an Umrechnungsfunktionen für °C in die anderen Temperatureinheiten zu schreiben.
inamarina
User
Beiträge: 6
Registriert: Mittwoch 30. März 2011, 09:04

:D ich scheitere schon daran, dass ich nicht weiß, wie ich ein Eingabefeld programmieren kann, damit der Benutzer etwas eingeben kann
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Dann solltest du einfach mit dem Tutorial anfangen.
Das Leben ist wie ein Tennisball.
Dauerbaustelle
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
inamarina
User
Beiträge: 6
Registriert: Mittwoch 30. März 2011, 09:04

ich hab mir schon viele Tutorials angeschaut und auch gelesen, aber da stand nie wirklich das drin, was mir für das Projekt nützt. Aber dankeschön troztdem
Dauerbaustelle
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).
BlackJack

@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.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

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?
inamarina
User
Beiträge: 6
Registriert: Mittwoch 30. März 2011, 09:04

mein problem ist, dass wir in der Schule nichts darüber gemacht haben und ich so zusagen bei 0 stehe. Wir müssen uns das selber beibringen und bei mir funktioniert gar nichts :(
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Dann arbeite doch einfach mal ein Tutorial durch.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

inamarina hat geschrieben:mein problem ist, dass wir in der Schule nichts darüber gemacht haben
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: und ich so zusagen bei 0 stehe.
Das wiederum glaube ich Dir :mrgreen: SCNR
inamarina hat geschrieben: Wir müssen uns das selber beibringen und bei mir funktioniert gar nichts :(
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 einordnen ;-)
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
(Gemein wie ich bin, fehlt die Funktionsdefinition ;-) )
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
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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
Es gibt kein Grad Kelvin. *duck* ;)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Darii hat geschrieben:Es gibt kein Grad Kelvin. *duck* ;)
Laut wikipedia hast Du recht:
wikipedia hat geschrieben: Bis 1967 lautete der Einheitenname Grad Kelvin, das Einheitenzeichen war °K.
Ok, hab ich falsch im Kopf gehabt ;-)

Damit wäre das Hauptproblem des Threads gelöst :mrgreen:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
peddy
User
Beiträge: 121
Registriert: Montag 30. Juni 2008, 13:51

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

peddy hat geschrieben: Fahrenheit = TC · 1,8 + 32 liefert falsche Werte. Richtig wäre Fahrenheit = ((celsius * 9) / 5) + 32
Das könnte evtl. an der Fließkommaungenauigkeit liegen? In der Shell sieht es zunächst gut aus:

Code: Alles auswählen

In [3]: from __future__ import division

In [4]: 9 / 5
Out[4]: 1.8
Je nach Genauigkeit muss man dann eben das decimal-Modul in diesem Kontext nutzen. Aber so dramatisch sollten die Unterschiede hier nicht ausfallen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@peddy: Die Abweichungen sind doch aber wohl ein Witz:

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']
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. ;-)
BlackJack

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:

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
Testlauf:

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.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Hier mal in Scheme:

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)
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

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
Antworten