Προς το περιεχόμενο

Python με ακριβεια 3ου δεκαδικου σε ασκηση


BloodyJava

Προτεινόμενες αναρτήσεις

Καλησπερα !

Σε ασκηση python μου ζητειται να παραξω αρχειο κατοπιν αναγνωσης αλλου txt file με διαφορες τιμες, που θα περιλαμβανει υπολογισμο μεσου ορου και τυπικης αποκλισης με ακριβεια 3 δεκαδικου ψηφιου. Με τον παρακατω κωδικα που εχω γραψει, διαρκως στρογγυλοποιει στο 3ο δεκαδικο. Υπαρχει τροπος να αποφεχθει η στρογγυλοποιηση και απλα να τυπωθει το 3ο δεκαδικο ? 

import statistics

with open("inputdata.txt",'r') as data:
    myfile=data.readlines()


for i in range (0,len(myfile),1):
    n =len(myfile[i])-1 
                                    
    num=myfile[i]       
    num = num[0:n]      
    myfile[i] = float(num)

mesos_oros=statistics.mean(myfile)      
apoklisi=statistics.stdev(myfile)               

with open("outputdata.txt",'w') as out:
    out.write ("Μέσος όρος = " + '{0:0.3f}'.format(mesos_oros) +"\n")    
    out.write ("Τυπική απόκλιση = " + '{0:0.3f}'.format(apoklisi) + "\n")

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Εγώ το έβγαλα έτσι.


Δεν είναι και ο καλύτερος τρόπος. Λογικά υπάρχει και πιο γρήγορος. 
Αν το βρεις κάνε έναν κόπο και δώσε μια απάντηση εδώ.

#3o δεκαδικό για τον Μέσο Όρο
list_average = [str(mesos_oros)]
index_list_avg = list_average[0].index(".")
list_average = list_average[0][:index_list_avg + 4]

#3ο δεκαδικό για την Τυπική Απόκλιση
list_apoklisi = [str(apoklisi)]
index_list_apoklisi = list_apoklisi[0].index(".")
list_apoklisi = list_apoklisi[0][:index_list_apoklisi + 4]

with open("outputdata.txt",'w') as out:
    out.write(f"Μέσος όρος = {list_average}" + "\n")    
    out.write(f"Τυπική απόκλιση = {list_apoklisi}" + "\n")

 

Επεξ/σία από bilakos26
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η καλυτερη μεθοδος ειναι η ακολουθη:

import math

math.floor(apoklisi* 10 ** 3) / 10 ** 3

30 λεπτά πριν, bilakos26 είπε

Εγώ το έβγαλα έτσι.


Δεν είναι και ο καλύτερος τρόπος. Λογικά υπάρχει και πιο γρήγορος. 
Αν το βρεις κάνε έναν κόπο και δώσε μια απάντηση εδώ.


#3o δεκαδικό για τον Μέσο Όρο
list_average = [str(mesos_oros)]
index_list_avg = list_average[0].index(".")
list_average = list_average[0][:index_list_avg + 4]

#3ο δεκαδικό για την Τυπική Απόκλιση
list_apoklisi = [str(apoklisi)]
index_list_apoklisi = list_apoklisi[0].index(".")
list_apoklisi = list_apoklisi[0][:index_list_apoklisi + 4]

with open("outputdata.txt",'w') as out:
    out.write(f"Μέσος όρος = {list_average}" + "\n")    
    out.write(f"Τυπική απόκλιση = {list_apoklisi}" + "\n")

 

Ωραια λυση, αλλα δεν χρειαζεται να δουλευεις με το [str(apoklisi)]
Μπορεις να δουλεψεις κατευθειαν με το str(apoklisi):

list_apoklisi = str(apoklisi)

index_list_apoklisi = list_apoklisi.index(".")

list_apoklisi = list_apoklisi[:index_list_apoklisi + 4]

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

1 ώρα πριν, archer100 είπε

Η καλυτερη μεθοδος ειναι η ακολουθη:

import math

math.floor(apoklisi* 10 ** 3) / 10 ** 3

Ωραια λυση, αλλα δεν χρειαζεται να δουλευεις με το [str(apoklisi)]
Μπορεις να δουλεψεις κατευθειαν με το str(apoklisi):

list_apoklisi = str(apoklisi)

index_list_apoklisi = list_apoklisi.index(".")

list_apoklisi = list_apoklisi[:index_list_apoklisi + 4]

Πολύ έξυπνη λύση φίλε, θα ανατρέξω σε αυτήν ξανά στο μέλλον σίγουρα.

Έχεις απόλυτο δίκιο.

Δεν μου πέρασε καθόλου από το μυαλό ότι θα μπορούσα να χρησιμοποιήσω την index()  και στις συμβολοσειρές παρόλο που τα έχω φρεσκομαθημένα.

Σε ευχαριστώ πολύ τόσο για την απάντηση στο ερώτημα του φίλου, όσο και για την διόρθωση.
 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Νομίζω, πως «με ακρίβεια» σημαίνει πως η άσκηση απαιτεί στρογγυλοποίηση και όχι αποκοπή των επιπλέον ψηφίων. 
Αν αυτή η περίπτωση η λύση στο αρχικό μήνυμα είναι σωστή. 

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...