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

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

Δημοσ.

Καλησπερα !

Σε ασκηση 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

  Στις 26/3/2021 στις 10:03 ΜΜ, 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
Δημοσ.
  Στις 26/3/2021 στις 10:29 ΜΜ, 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

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

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

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

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

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

Σύνδεση

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

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