Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Python Runden und Tabelle erstellen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Python Runden und Tabelle erstellen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Python Runden und Tabelle erstellen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo.
Ich soll ein Programm schreiben das eine beliebige Punktzahl von 0-60 in einen bestimmten Notenwert konvertiert(wobei für <12 immer 6 und für größer >57 immer 1 rauskommen sollte), das ging auch noch soweit .Das Problem ist dann das die Werte zwischen 12 und 57 gerundet werden sollten,so dass für 15 z.B. 5.5 rauskommt oder für 46 2.0 . Ich habe das dann versucht mit round zu beheben. Das Problem ist das er dann für p=46 2.2 rauskriegt und für 15 5.7. Deshalb wollte ich fragen wie ich es anstellen könnte das er nur auf .5 und .0 rundet.

So würde mein Programm im Moment aussehen.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
def lineargrade(p):
	if 0<=p<=12:
		t=6.0
	elif 12<p<=56:
		t=-5/45*(p-57)+1
		round(t,0)	        
	else:
		t=1.0
	return(round(t,1))

Und das andere Problem das damit zusammenhängt ist das ich basierend auf dem Programm eine Tabelle konstruieren soll ,die nochmal alle Werte auflistest. Das ganze sollte dann so ungefähr aussehen.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
grade points
--------------
6.0     0
5.5    15
5.0    19
4.5    24
4.0    28
3.5    33
3.0    37
2.5    42
2.0    46
1.5    51
1.0    55

Dafür hab ich leider noch keinen Ansatz gefunden ,da Tabellen in Python zu erstellen etwas komplett neues für mich ist.
Könnte mir vielleicht jemand einen Hinweis geben,da ich ansonsten komplett auf dem Schlauch stehe.

Vielen Dank schon mal .
lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

28.05.2016 09:46 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zum Runden:
code:
1:
2:
3:
4:
5:
6:
7:
>>> t=5.7
>>> round(2*t)/2
5.5
>>> t=5.8
>>> round(2*t)/2
6.0


Eine formatierte Ausgabe kriegst du z.B. mit
code:
1:
print '{0:.1f}   {1:2d}'.format(6.0, 0)

{0:.1f} heißt: Argument 0 (also die 6.0), mit einer Stelle nach dem Komma (.1) und als Gleitpunktzahl (f).
{1:2d} heißt: Argument 1 (die 0) mit zwei Stellen (es wird vorne mit Leerzeichen gefüllt) als Dezimalzahl (d).

__________________
Syntax Highlighting fürs Board (Link)
28.05.2016 10:05 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Das runden klappt jetzt fehlerfrei , danke dir.
Zum Format, interessant ,das kannte ich nicht. Aber ich fürchte es hadert noch an der Umsetzung. Wenn ich deinen Code übernehme und noch Klammern drum mache erscheint das gewünschte Ergebnis. Wenn ich jetzt aber versuche die Werte zu verändern gibt er mir eine Fehlermeldung aus. Ich fürchte ich bin noch nicht ganz aus dem Code schlau geworden.
code:
1:
2:
3:
4:
5:
6:
>>>print( '{15:.1f}   {1:2d}'.format(5.5, 1))
 Traceback (most recent call last):
  File "<pyshell#66>", line 1, in <module>
    print( '{15:.1f}   {1:2d}'.format(5.5, 1))
IndexError: tuple index out of range 

Ähnliche Varianten scheitern ebenfalls.

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

28.05.2016 16:52 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Du musst ja auch hinten ändern.
print '{0:.1f} {1:2d}'.format(6.0, 0)
Die grüne 0 steht als Platzhalter für Argument 0 in den Klammern. Und rot ist Argument 1.
Du hast vorne eine 15. Das heißt, du müsstest 16 Parameter übergeben.

__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 28.05.2016 18:34.

28.05.2016 18:33 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich bin mir nicht sicher ob dich jetzt richtig verstanden habe.
Heißt das ich muss das so schreiben:
print {15:,1f} {16:2d}'.format{5.5,1}
?
Ich erhalte nämlich noch immer die selbe Fehlermeldung,egal was für Kombinationen und Zahlen ich verwende. Entschuldige,aber ich stehe fürchte ich, komplett auf der Leitung.

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

29.05.2016 09:00 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ja, du stehst auf der Leitung.
Kurze Antwort: RTFM

Lange Antwort:
Der Aufruf geht so:
code:
1:
string.format(arg0, arg1, arg2, arg3, ..., argn)

Wenn du jetzt innerhalb des strings auf arg0 zugreifen willst, machst du das mit {0}. Auf argn kannst du folglich mit {n} zugreifen.
Üblichweise sieht das dann so aus (aus der Hilfe kopiert):
code:
1:
'{0}, {1}, {2}'.format('a', 'b', 'c')

Du siehst, die Zahlen in der Klammern werden von 0 aus hochgezählt. Du kannst die Reihenfolge auch tauschen:
code:
1:
'{2}, {1}, {0}'.format('c', 'b', 'a')
erzeugt die selbe Ausgabe, ist aber nicht leserlicher.

Wenn du jetzt angeben willst, wie ein Argument formatiert werden soll, geht das mit {index:formatter}, also z.B. {0:.1f}. Die 0 steht für Argument 0. Der Doppelpunkt ist einfach ein Trennzeichen. '.1f' sagt, dass die Zahl als Gleitpunktzahl mit einer Nachkommastelle ausgegeben werden soll.
'2d' ist eine Ganzzahl, die mit mindestens 2 Stellen ausgegeben wird. Ist die Zahl einstellig, wird vorne mit einem Leerzeichen aufgefüllt. Das erhält die Formatierung, wenn du mehrere Zahlen untereinander schreibst.

__________________
Syntax Highlighting fürs Board (Link)
29.05.2016 09:22 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Danke erstmal für deine Hilfe. Ich glaube es jetzt raus zu haben .Durch deine Erklärung verstehe ich es schon besser und ich habe jetzt folgendes probiert

print('{0:.1f} {1:2d}'.format(5.5, 15))
.
Das würde das doch gewünschte Ergebnis bringen ,wenn ich mich nicht irre.

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

29.05.2016 15:43 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Dann probiere es doch einfach aus.
Wenn du mehr Abstand zwischen den Zahlen haben willst, kannst du den Formatierungsstring auch mit Leerzeichen auffüllen:
code:
1:
print('{0:.1f}       {1:2d}'.format(5.5, 15))


__________________
Syntax Highlighting fürs Board (Link)
29.05.2016 18:04 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Oh, entschuldige,mein Fehler, das habe ich schon.
Es kommt
5.5 15
raus. Ich war mir nur nicht sicher ob das so in Ordnung geht. Das könnte man ja dann theoretisch mehrfach kopieren ,mit unterschiedlichen Angaben. Tatsächlich habe es jetzt dadurch auch geschafft das die Werte tabellarisch aufgelistet werden. Nur noch eine letzte Sache ,dann bin ich auch fertig. In der Musterlösung wird ja als Schmankerl noch so eine gestrichelte Trennlinie eingefügt und ich frage mich doch wie man sowas oder etwas ähnliches in Python einbaut,sofern das nicht zu kompliziert ist.

So oder so, großen Dank für deine Geduld und deine Hilfe.

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

29.05.2016 18:48 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Spontan würde ich es so machen:
code:
1:
print('-'*20)


__________________
Syntax Highlighting fürs Board (Link)

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von eulerscheZahl: 29.05.2016 18:53.

29.05.2016 18:52 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Dr.Java Dr.Java ist männlich
Foren As


images/avatars/avatar-71.jpg

Dabei seit: 21.03.2016
Beiträge: 99

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ah ,das ist natürlich eine gute Idee. Dann sage ich nochmal vielen dank,ich habe es dann endlich.

lg

__________________
Zitat:
"Ich glaube, es gibt einen weltweiten Bedarf an vielleicht fünf Computern."
-Thomas Watson

29.05.2016 19:00 Dr.Java ist offline Beiträge von Dr.Java suchen Nehmen Sie Dr.Java in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Python Runden und Tabelle erstellen