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

Άσκηση Python


rs16206

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

Γεια σας, 

Πρόσφατα έχω ξεκινήσει online μαθηματα Python...και αντιμετωπίζω ενα  μικρό προβλημα σε μια άσκηση...

Η άσκηση λοιπον μου δίνει τα εξής δεδομένα και με αυτή τη σειρά:

1.5
2
3.78
4.1
5.28
6.5
7.2
8.89
9.23
10.5

και θα πρέπει να φτιάξω ένα πρόγραμμα το οποίο να διαβάζει ένα αρχείο με τους παραπανω αριθμους (τυπου data.txt), στη συνέχεια να υπολογίζει τον Μ.Ο και την τυπική απόκλιση από αυτό το αρχείο και τέλος το πρόγραμμα να δημιουργεί ένα αρχείο τυπου outdata.txt και να αποθηκευει εκει τις τιμες του μεσου όρου και της τυπικης αποκλισης...

Σαν επιλυση έχω γράψει τα εξής:

#Χρήση της βιβλιοθήκης Statistics
import statistics

#Αναγνωση των δεδομένων εισοδου
with open('inputdata.txt','r') as f:
    data=f.read()
    data=float()

#ypologismos tou mesou orou kai ths typikhs apoklishs
m=statistics.mean(data)
st=statistics.stdev(data)
#Δημιουργια του αρχειου outputdata για την αποθηκευση του Μ.Ο & Τυπικής απόκλισης  
with open('outputdata.txt','w') as f:
    f.writelines(['Μέσος όρος = ',str(m),'\n'])
    f.write(['Τυπικη απόκλιση = ',str(st)])
        
    και οταν το τρεχω μου βγαζει το εξης TypeError: 'float' object is not iterable....εχω δοκιμάσει αρκετά πράγματα αλλα δεν μου εμφανιζει σωστα δεδομενα στο αρχειο outputdata...

Όποιος γνωρίζει ας δώσει ενα χέρι βοηθειας ..ευχαριστω πολυ για το χρονο σας :)

 

 

 

 

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

  • Απαντ. 38
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

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

Αν και δεν είναι σωστό να σου λύνουν τα μαθήματα, γιατί εσύ δεν θα μάθεις αυτά που πρέπει...

Επισυνάπτω μια βρώμικη και γρήγορη λύση... δεν έχω ηδέα αν είναι σωστή :)

parse.zip

Επεξ/σία από dovecotDev
spelling mistake, oops
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στο βγάζει λόγο του float() που έχεις βάλει, βέβαια και να το βγάλεις με ένα print θα δεις ότι το data είναι της μορφής "1.5\n2\n3.78\n4.1\n"  που δε βοηθάει.

Κάνε manually προσπέλαση του αρχείου ανά γραμμή και splitαρε το newline απ' το τέλος. Για να αποφύγεις άλλα errors στο mean και το stdev κάνε και typecast σε float.

Αυτά για αρχή

 

1 λεπτό πριν, dovecotDev είπε

Αν και δεν είναι σωστό να σου λύνουν τα μαθήματα, γιατί εσύ δεν θα μάθεις αυτά που πρέπει...

Επισυνάπτω μια βρόμικη και γρήγορη λύση... δεν έχω ηδέα αν είναι σωστή :)

parse.zip 938 B · 0 downloads

Μόλις μου ψόφησες τα hints 😛

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

12 λεπτά πριν, dovecotDev είπε

Αν και δεν είναι σωστό να σου λύνουν τα μαθήματα, γιατί εσύ δεν θα μάθεις αυτά που πρέπει...

Επισυνάπτω μια βρώμικη και γρήγορη λύση... δεν έχω ηδέα αν είναι σωστή :)

parse.zip 938 B · 3 downloads

Σε ευχαριστω πολυ...☺️☺️☺️ Ναι νμζ καταλαβα τι λαθος ειχα κανει στον κωδικα μου...

13 λεπτά πριν, SOADNICK είπε

Στο βγάζει λόγο του float() που έχεις βάλει, βέβαια και να το βγάλεις με ένα print θα δεις ότι το data είναι της μορφής "1.5\n2\n3.78\n4.1\n"  που δε βοηθάει.

Κάνε manually προσπέλαση του αρχείου ανά γραμμή και splitαρε το newline απ' το τέλος. Για να αποφύγεις άλλα errors στο mean και το stdev κάνε και typecast σε float.

Αυτά για αρχή

Μόλις μου ψόφησες τα hints 😛

Σε ευχαριστωω πολλυυυυ 🙏🙏🙏

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

Κανένα πρόβλημα. Προσοχή: Σε πύθωνα 2 το map() επιστρέφει list ενώ σε πύθωνα 3 επιστρέφει iterator, άρα κάνω μετατροπή σε list.

Ο πύθωνας 2 πιάστηκε στην φάκα, μαγειρεύτηκε και τον έδωσαν σε ιθαγενείς Αβορίγινους για βραδινό (μετάφραση: καταργήθηκε, άρα λειτουργούμε με έκδοση 3.x).

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

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

Μιας και υπάρχει λύση βάζω μια ακόμη πιο βρώμικη και pythonic

import statistics
data=[]		# Δημιουργία κενής λίστας για αποθήκευση των δεδομένων
								
with open('inputdata.txt','r') as file:
    for i in file.readlines():			# Μετατροπή απευθείας του string
        data.append(float(i))			# σε float και ένταξη αυτού στη λίστα
   
file = open('outputdata.txt', 'w')		# άνοιγμα αρχείου για εγγραφή και χρήση της format για απεικόνιση των αποτελεσμάτων
file.writelines("Μέσος όρος = {} \nTυπική απόκλιση = {}".format(statistics.mean(data),statistics.stdev(data)))

 

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

Βρωμιάρηδες όλοι.... Ούτε λίγο over-engineering... :P :D

 

import functools
import statistics

from pathlib import Path
from typing import Callable
from typing import List
from typing import Tuple
from typing import TypeVar


T = TypeVar("T")  # pylint: disable=invalid-name


OUTPUT = """
Μέσος όρος = {mean}
Tυπική απόκλιση = {stdev}
""".strip()


def parse_file(path: Path, cast: Callable[[str], T]) -> List[T]:
    input_data = [cast(num) for num in path.read_text().splitlines()]
    return input_data


# pylint: disable=invalid-name
parse_booleans = functools.partial(parse_file, cast=bool)
parse_floats = functools.partial(parse_file, cast=float)
parse_integers = functools.partial(parse_file, cast=int)
# pylint: enable=invalid-name


def analyze(input_data: List[float]) -> Tuple[float, float]:
    mean = statistics.mean(input_data)
    stdev = statistics.stdev(input_data)
    return mean, stdev


def write_output(path: Path, mean: float, stdev: float) -> None:
    contents = OUTPUT.format(mean=mean, stdev=stdev)
    path.write_text(contents)


def get_user_input() -> Tuple[Path, Path]:
    # hardcoding for now
    input_path = Path("input_data.txt")
    output_path = Path("output_data.txt")
    return input_path, output_path


def main() -> None:
    input_path, output_path = get_user_input()
    input_data = parse_floats(input_path)
    # ignoring mypy due to: https://github.com/python/mypy/issues/8341
    mean, stdev = analyze(input_data)  # type: ignore
    write_output(output_path, mean, stdev)


if __name__ == "__main__":
    main()

 

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

Αποδεδειγμένα όχι και τόσο μεγάλος δάσκαλος, καθώς απέτυχε να ακολουθήσει τις προδιαγραφές της άσκησης, π.χ. τα ονόματα των txt αρχείων δεν είναι σωστά. Η άσκηση δεν βαθμολογείται σε αυτή την περίπτωση.

Σε εταιρικό επίπεδο, είναι σημαντικό ο κώδικας να είναι κατανοητός από όλα τα τωρινά μέλη της ομάδας προγραμματιστών, αλλά και από προγραμματιστές που θα ασχοληθούν με το εν λόγο έργο στο μέλλον. Να αναφέρω πως “κόλπα” που κάνουν τον κώδικα αδιάβαστο ή γενικά δύσκολο στην κατανόηση (τύπου pythonic ή over engineering), είναι αφορμή για άμεση απόλυση. Ακατανόητος κώδικας δημιουργεί σοβαρά προβλήματα σε ένα μακροχρόνιο έργο.
 

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

  • Moderators
1 ώρα πριν, dovecotDev είπε

Αποδεδειγμένα όχι και τόσο μεγάλος δάσκαλος, καθώς απέτυχε να ακολουθήσει τις προδιαγραφές της άσκησης, π.χ. τα ονόματα των txt αρχείων δεν είναι σωστά. Η άσκηση δεν βαθμολογείται σε αυτή την περίπτωση.

Σε εταιρικό επίπεδο, είναι σημαντικό ο κώδικας να είναι κατανοητός από όλα τα τωρινά μέλη της ομάδας προγραμματιστών, αλλά και από προγραμματιστές που θα ασχοληθούν με το εν λόγο έργο στο μέλλον. Να αναφέρω πως “κόλπα” που κάνουν τον κώδικα αδιάβαστο ή γενικά δύσκολο στην κατανόηση (τύπου pythonic ή over engineering), είναι αφορμή για άμεση απόλυση. Ακατανόητος κώδικας δημιουργεί σοβαρά προβλήματα σε ένα μακροχρόνιο έργο.
 

Επίτηδες είναι έτσι.

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

Δημοσ. (επεξεργασμένο)
3 ώρες πριν, stefanos90_K είπε

Ο άλλος στην ίδια άσκηση απλά έκανε screenshot, ούτε μπήκε στον κόπο να την γράψει. 
 

Νομίζω ότι ήρθε η στιγμή για νέα κατηγορία στο κλασικό πινακάκι...

"Έχω αντισηπτικό στα χέρια και δε μπορώ να πληκτρολογήσω"...😃

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

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

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

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

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

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

Σύνδεση

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

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