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

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")

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

5 απαντήσεις σε αυτή την ερώτηση

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

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

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


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

#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
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 1

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

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
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
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()  και στις συμβολοσειρές παρόλο που τα έχω φρεσκομαθημένα.

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

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

  • Like 2
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

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

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.