ziemlich billige anfängerfrage

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.
N17R0
User
Beiträge: 53
Registriert: Samstag 6. März 2004, 23:41

Beitragvon N17R0 » Mittwoch 12. Juli 2006, 15:05

hmm... raw_input ist für Strings, für Zahlenwerte darfste nur input nehmen und schonma um nem fehler vorwegzunehmen, punktrechnung geht vor strichrechnung

//edit:
aso, und zur erklärung von 614. du hast die werte als strings, also text eingelesen., d.h. aus "6"+"1"+"4" wird "614" und die fehlermeldung sagt dir nun, dass er den text "614" nicht durch 3 teilen kann, 1. weil es den operator / bei string meiner meinung nach nicht gibt und 2. weil er jetzt text und zahlen miteinander mischen müsste
krass
User
Beiträge: 13
Registriert: Sonntag 19. März 2006, 12:06

Beitragvon krass » Mittwoch 12. Juli 2006, 15:23

moment hab grad im buch gelesen das man geeignete Strings in zahlen umwandeln kann...

ich glaub ich hab den fehler gefunden
krass
User
Beiträge: 13
Registriert: Sonntag 19. März 2006, 12:06

Beitragvon krass » Mittwoch 12. Juli 2006, 16:16

ich habs geschafft *freu* !! Es funktioniert !! aber laut meinem Buch hätten 6 Variablen gelangt......

Code: Alles auswählen

# Autor: Ich
# Datum: 12.07.2006
# durschnittsberechnung.py

print "Programm zur Notendurchschnittsberechnung"

Name = raw_input("Wie heisst du ?")

Fach = raw_input("In welchen Fach willst du berechnen ?")



print "Noten fuer"

note1 = raw_input("die erste Klassenarbeit")

note2 = raw_input("die zweite Klassenarbeit")

note3 = raw_input("die dritte Klassenarbeit")

### damit ich nicht durcheinander komm :-)

note1 = float(note1)
note2 = float(note2)
note3 = float(note3)

durchschnitt =  (note1 + note2 + note3) /3
durchschnitt = float(durchschnitt)

print "Der Notendurchschnitt von", Name, "in", Fach, "ist", durchschnitt



was hätte man besser machen können ? ich glaube 3 zeilen hätte man sich irgendwie sparen können :?:
ws
User
Beiträge: 65
Registriert: Freitag 16. Juni 2006, 13:19

Beitragvon ws » Mittwoch 12. Juli 2006, 16:26

raw_input() gibt die einen String zurück. Wenn Du Strings mit "+" addierst, werden die einfach hintereinandergehängt.

Deshalb wird aus "6" + "1" + "4"

der String "614".

Dann versuchst Du, "614" durch 3 zu teilen. Eine Division String/Zahl ist aber nicht definiert, deshalb die Fehlermeldung. Wenn Du Zahlen über die Tastatur einlesen willst, musst Du die erhaltenen Strings konvertieren, z.B.

meineZahl = int(raw_input())

wenn Du ganze Zahlen erhalten willst.

Gruss

Wolfgang
N17R0
User
Beiträge: 53
Registriert: Samstag 6. März 2004, 23:41

Beitragvon N17R0 » Mittwoch 12. Juli 2006, 16:59

Code: Alles auswählen

# Autor: Ich
# Datum: 12.07.2006
# durschnittsberechnung.py

print "Programm zur Notendurchschnittsberechnung"

Name = raw_input("Wie heisst du ?")

Fach = raw_input("In welchen Fach willst du berechnen ?")



print "Noten fuer"

note1 = input("die erste Klassenarbeit")

note2 = input("die zweite Klassenarbeit")

note3 = input("die dritte Klassenarbeit")

durchschnitt =  (note1 + note2 + note3) /3.0

print "Der Notendurchschnitt von ", Name, " in ", Fach, " ist ", durchschnitt
BlackJack

Beitragvon BlackJack » Mittwoch 12. Juli 2006, 23:05

krass hat geschrieben:ich habs geschafft *freu* !! Es funktioniert !! aber laut meinem Buch hätten 6 Variablen gelangt......


Man bekommt auch eine Lösung mit 5 hin. Eine Verbesserung wäre es zum Beispiel die Noten in einer Liste zusammen zu fassen und nicht drei einzelne Namen zu verwenden. Dann kann man den Quelltext auch recht einfach unabhängiger von der Anzahl der Klassenarbeiten/Noten machen. Im folgenden muss man nur an einer Stelle etwas ändern um mehr oder weniger Klassenarbeiten in die Berechnung einzubeziehen.

Code: Alles auswählen

print 'Notendurchschnittberechnung'
name = raw_input('Dein Name? ')
subject = raw_input('Welches Fach? ')

grades = list()
print 'Note fuer...'
for number in ('erste', 'zweite', 'dritte'):
    grades.append(float(raw_input('die %s Klassenarbeit: ' % number)))
average = sum(grades) / len(grades)
print 'Der Notendurchschnitt von %s in %s ist %.1f' % (name, subject, average)
Benutzeravatar
newone_XXV.
User
Beiträge: 50
Registriert: Dienstag 20. Juni 2006, 15:03
Wohnort: Direkt vor meinem PC
Kontaktdaten:

Beitragvon newone_XXV. » Donnerstag 13. Juli 2006, 11:08

Du musst versuchen aus dem String einen anderen Datentyp zu machen, der dividieren kann. Probier mal was mit der Eingabe aus, ob Du da was umstellen kannst.

PS: Du wolltest ja nur einen kleinen Tip.... Hoffe mal, das Dir der nicht zu groß ist....
krass
User
Beiträge: 13
Registriert: Sonntag 19. März 2006, 12:06

Beitragvon krass » Donnerstag 13. Juli 2006, 13:58

hi newone_XXV

habs weiter oben schonmal gepostet

Du musst versuchen aus dem String einen anderen Datentyp zu machen



Code: Alles auswählen

# Autor: Ich
# Datum: 12.07.2006
# durschnittsberechnung.py

print "Programm zur Notendurchschnittsberechnung"

Name = raw_input("Wie heisst du ?")

Fach = raw_input("In welchen Fach willst du berechnen ?")



print "Noten fuer"

note1 = raw_input("die erste Klassenarbeit")

note2 = raw_input("die zweite Klassenarbeit")

note3 = raw_input("die dritte Klassenarbeit")

### damit ich nicht durcheinander komm :-)

note1 = float(note1)
note2 = float(note2)
note3 = float(note3)

durchschnitt =  (note1 + note2 + note3) /3
durchschnitt = float(durchschnitt)

print "Der Notendurchschnitt von", Name, "in", Fach, "ist", durchschnitt
[/code=py]


Hab die ergebnisse von den strings in gleitkomma zahlen verwandelt, etwas "exotisch" aber nach niederschmetternden erfahrungen mit anderen programmiersprachen eine mega Erfolgsergebniss für mich !!! :D
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Donnerstag 13. Juli 2006, 21:27

Hi Krass,

eine Sache noch zu deinem Code(Ich gehe nicht genauer auf die Umständlichkeit etc. ein):

du machst 27 und 28 einen Fehler. Ich geb dir nur mal einen kleinen Denkanstos *g*

falsch:

Code: Alles auswählen

x=6/5
float(x)


richtig:

Code: Alles auswählen

x=6/5.0
print x


Einfach mal ausprobieren. Du kommst, denk ich mal von alleine drauf. :D
mfg

Thomas :-)
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Freitag 14. Juli 2006, 01:25

du machst 27 und 28 einen Fehler


Sicher, dass es ein Fehler ist, und nicht nur einfach eine überflüssige Zeile 28? Denn eine Addition aus Floats ergibt ein Float, und

Code: Alles auswählen

x=3.0/6
print x # ergibt 0.5
krass
User
Beiträge: 13
Registriert: Sonntag 19. März 2006, 12:06

Beitragvon krass » Freitag 14. Juli 2006, 10:55

*hüstel* der durchschnitt wird aber richtig berechnet
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Freitag 14. Juli 2006, 13:45

Ups gar nicht gemerkt, das du in Zeile 23-15 die Zahlen in float umwandelst. Sorry war mein Feher. :oops:

Trotzdem kann man einiges vereinfachen. :D

Achja und Variablennamen schreibt man nicht groß! :wink:
mfg



Thomas :-)
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Beitragvon querdenker » Freitag 14. Juli 2006, 13:52

:oops: :oops: :oops:

man sollte einen thread zu Ende lesen....

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]