BloodyJava Δημοσ. 26 Μαρτίου 2021 Δημοσ. 26 Μαρτίου 2021 Καλησπερα ! Σε ασκηση 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")
bilakos26 Δημοσ. 27 Μαρτίου 2021 Δημοσ. 27 Μαρτίου 2021 (επεξεργασμένο) Εγώ το έβγαλα έτσι. Δεν είναι και ο καλύτερος τρόπος. Λογικά υπάρχει και πιο γρήγορος. Αν το βρεις κάνε έναν κόπο και δώσε μια απάντηση εδώ. #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") Επεξ/σία 27 Μαρτίου 2021 από bilakos26
archer100 Δημοσ. 27 Μαρτίου 2021 Δημοσ. 27 Μαρτίου 2021 Η καλυτερη μεθοδος ειναι η ακολουθη: 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] 1
bilakos26 Δημοσ. 27 Μαρτίου 2021 Δημοσ. 27 Μαρτίου 2021 Στις 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() και στις συμβολοσειρές παρόλο που τα έχω φρεσκομαθημένα. Σε ευχαριστώ πολύ τόσο για την απάντηση στο ερώτημα του φίλου, όσο και για την διόρθωση.
Ψιτ Δημοσ. 27 Μαρτίου 2021 Δημοσ. 27 Μαρτίου 2021 Νομίζω, πως «με ακρίβεια» σημαίνει πως η άσκηση απαιτεί στρογγυλοποίηση και όχι αποκοπή των επιπλέον ψηφίων. Αν αυτή η περίπτωση η λύση στο αρχικό μήνυμα είναι σωστή. 2
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα