Seite 1 von 1

Zeitberechnung für ISDN

Verfasst: Sonntag 19. Dezember 2004, 20:33
von Marz
Ich habe mir ein kleines Prog geschieben, dass mir die Downloaddauer mit meiner ISDN berechnet.

Code: Alles auswählen

#!/usr/bin/python
#berechung der downloadzeit
bps=64000 # Bit pro Sekunde
mb=int(raw_input("Bitte die Dateigröße in MB angeben: "))
byte_pm=(bps/mb)*60
datei=mb*10**6 			# acht mal zehn hoch sechs
dauer=datei/byte_pm
print "Der Download dauert", dauer, "Minuten"
Das prog funzt soweit einwandfrei. Aber wen ich 1 eingebe bringt er mir also hab ich es so probiet:

Code: Alles auswählen

dauer=float(datei/byte_pm)
anstatt der erwarteten 0.* (*=irgendwas) kommt 0.0 ! Könnt ihr mir weiterhelfen?

PS:
Bin ganz neu hier und hab schon viele gute lösungsansätze gefunden. Im moment stehe ich noch am anfang mit meinen Python Künsten aber ich will gerne das noch vertiefen vielleicht habt ihr ein paar gute Programierideen mir denen ihr angefangen habt, denn ich stecke mir die Ziele immer zu hoch :wink: .

Thx

Marz

Verfasst: Sonntag 19. Dezember 2004, 20:49
von Leonidas
Bei dir gibt datei/byte_pm einen int, der dann mit float einfach eine Nullstelle bekommt. Mach es so:

Code: Alles auswählen

dauer = float(datei)/float(byte_pm)
Edit: Daduch werden zwei float werte geteilt und raus kommt ein float Wert. Bei Fragen einfach nochmal nachhacken :)

Verfasst: Sonntag 19. Dezember 2004, 21:15
von mawe
Hi!

Bei dem Beispiel von Leonidas würde auch ein float reichen:

Code: Alles auswählen

dauer = datei / float(byte_pm)
In deinem Fall reicht es sogar, wenn Du bps als float angibst:

Code: Alles auswählen

bps = 64000.0
Noch ein kleiner Tipp: wenn Du Fehler suchst, fang damit an, Zwischenergebnisse zu überprüfen. So sieht man leicht wo genau der Fehler auftritt.

Code: Alles auswählen

...
byte_mp = (bps/mb)*60
print byte_mp
datei = mb*10**6
print datei
...
Gruß, mawe

Verfasst: Sonntag 19. Dezember 2004, 21:40
von Leonidas
mawe hat geschrieben:Bei dem Beispiel von Leonidas würde auch ein float reichen:

Code: Alles auswählen

dauer = datei / float(byte_pm)
Genau, hast wieder einmal Recht :) Int durch int gibt int, float durch int gibt float, int durch float gibt float und float durch float gibt float. Sobald ein float vorkommt, gibt es also einen Float als Ergebnis.

Weiterer Tipp, es gibt auch noch einen Teilungsoperator, floordivision: //. Spiel einfach mal ein wenig damit, du merkst wofür das gut ist (eigentlich selten benötigt).

Verfasst: Sonntag 19. Dezember 2004, 22:48
von Marz
Thx es klappt.
damit es mir nich tausend kommastellen zeigt habe ich folgendes gemacht:

Code: Alles auswählen

dauer = str(dauer)
print "Der Download dauert", dauer[0 :5], "Minuten"
gibt es da noch einen zweiten weg ohne die integer in ein string zu verwandeln und das er gleich mit rundet? Frei nach dem motto "there are two ways to do" :D

Ich fang richtig an Python zu mögen.

PS: Unter welche Lizenz soll ich mein Programm sellen ??? *joke!*

--edit--
Ich habe die lösung!

Code: Alles auswählen

dauer=round (dauer,2)
alte Treats können manchmal ganzschön praktisch sein!

Verfasst: Montag 20. Dezember 2004, 00:26
von Dookie
Hi Marz,

die Ausgabe geht auch so:

Code: Alles auswählen

print "Der Download dauert %.2f Minuten" % dauer
siehe auch: http://docs.python.org/lib/typesseq-strings.html


Gruß

Dookie

Verfasst: Montag 20. Dezember 2004, 07:28
von mawe
Hi!
Marz hat geschrieben: Unter welche Lizenz soll ich mein Programm sellen ???
Ich würde es patentieren lassen :D

Gruß, mawe

Verfasst: Montag 20. Dezember 2004, 07:53
von Marz
Ja wunderbar "Softwarepatente" sind ja im kommen :?

Verfasst: Montag 20. Dezember 2004, 07:58
von jens
Dookie hat geschrieben:siehe auch: http://docs.python.org/lib/typesseq-strings.html
Diese Seite hatte ich irgendwann mal gesucht und nicht gefunden :( Nur ein paar Beispiele auf der Seite währe nett...