Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Number to Greek

Number to Greek 9 Χρόνια 8 Μήνες πριν #2865

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Έχω ανεβάσει στο PYPI, ένα πρόγραμμα που μετατρέπει αριθμούς (integer ή float), σε ελληνικές λέξεις.
Επειδή είναι ακόμη σε beta έκδοση, θα ήθελα να παρακαλέσω, όποιος μπορεί να το δοκιμάσει και να μου στείλει τις παρατηρήσεις του, ή τα σφάλματα που εντόπισε.

Μπορείτε να το κατεβάσετε από εδώ.
Στον ίδιο σύνδεσμο θα βρείτε και οδηγίες για την εγκατάστασή του. Συνιστώ virtualenv.

Αν κάποιος θέλει να το εγκαταστήσει σε κανονικό περιβάλλον με pip ίσως χρειαστεί να χρησιμοποιήσει την παράμετρο --pre.

Τρόπος Χρήσης:
>>> from numtogreek.numtogreek import n2g # Εισαγωγή.
>>> n2g(848922.01) # Αριθμός.
'Οκτακόσιες Σαράντα Οκτώ Χιλιάδες Εννιακόσια Είκοσι Δύο και Ένα'
>>> n2g(848922.01, True) # Νόμισμα. 
'Οκτακόσιες Σαράντα Οκτώ Χιλιάδες Εννιακόσια Είκοσι Δύο Ευρώ  και Ένα λεπτά'
>>> n2g(848922.01, True, 'lower')# Πεζοί χαρακτήρες.
'οκτακόσιες σαράντα οκτώ χιλιάδες εννιακόσια είκοσι δύο ευρώ  και ένα λεπτά'
>>> n2g(848922.01, True, 'upper') #Κεφαλαίοι χαρακτήρες.
'ΟΚΤΑΚΌΣΙΕΣ ΣΑΡΆΝΤΑ ΟΚΤΏ ΧΙΛΙΆΔΕΣ ΕΝΝΙΑΚΌΣΙΑ ΕΊΚΟΣΙ ΔΎΟ ΕΥΡΏ  ΚΑΙ ΈΝΑ ΛΕΠΤΆ'
>>>
Γράφω σε Python 3
Τελευταία διόρθωση: 9 Χρόνια 2 Μήνες πριν από kamar.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Number to Greek 9 Χρόνια 8 Μήνες πριν #2868

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
Χαχα ωραίο πρόγραμμα. Παρατήρησα ότι πρέπει να κάνεις

from numtogreek import n2g και όχι from numtogreek.numtogreek
import n2g.

Επίσης είδα ότι φτάνει μέχρι εκατό επτάκις εκατομμύρια.Άμα
δώσω αριθμό με ένα περισσότερο μηδενικό με πετάει αυτό το
error:

dol = temp + place[count] + dol
KeyError: 9

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

Πάντως ωραίο, καλή δουλειά :cheer: :cheer: :cheer: :cheer:
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": kamar

Number to Greek 9 Χρόνια 8 Μήνες πριν #2869

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
babaliaris1 έγραψε:
Χαχα ωραίο πρόγραμμα. Παρατήρησα ότι πρέπει να κάνεις

from numtogreek import n2g και όχι from numtogreek.numtogreek
import n2g.

Επίσης είδα ότι φτάνει μέχρι εκατό επτάκις εκατομμύρια.Άμα
δώσω αριθμό με ένα περισσότερο μηδενικό με πετάει αυτό το
error:

dol = temp + place[count] + dol
KeyError: 9

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

Πάντως ωραίο, καλή δουλειά :cheer: :cheer: :cheer: :cheer:


Το πρώτο δεν έχει να κάνει με το ίδιο το πρόγραμμα. Προφανώς έχει να κάνει με τη δομή του καταλόγου. Θα το κοιτάξω.

Όσο για το δεύτερο, όπως γράφω και στο README στο pypi, έχω βάλει άνω όριο τα 99 τρισεκατομμύρια.
Θα το διορθώσω και αυτό.
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Number to Greek 9 Χρόνια 8 Μήνες πριν #2870

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Επίσης είδα ότι φτάνει μέχρι εκατό επτάκις εκατομμύρια.Άμα
δώσω αριθμό με ένα περισσότερο μηδενικό με πετάει αυτό το
error:

dol = temp + place[count] + dol
KeyError: 9

Διορθώθηκε!

Όποιος έχει μεγαλύτερο τραπεζικό λογαριασμό από μερικά οκτάκις εκατομμύρια, να μου δανείσει. :)
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Number to Greek 9 Χρόνια 8 Μήνες πριν #2871

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Δεν το εγκατέστησα, αλλά όσο κοίταξα τον κώδικα φαίνεται ωραία δουλειά.

Επειδή δεν το αναφέρεις στο documentation, και δεν έχεις και test για αυτό, τι γίνεται αν δώσεις ως input κάτι με περισσότερα από 3 δεκαδικά ψηφία;
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": kamar

Number to Greek 9 Χρόνια 8 Μήνες πριν #2872

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
pmav99 έγραψε:
Δεν το εγκατέστησα, αλλά όσο κοίταξα τον κώδικα φαίνεται ωραία δουλειά.

Επειδή δεν το αναφέρεις στο documentation, και δεν έχεις και test για αυτό, τι γίνεται αν δώσεις ως input κάτι με περισσότερα από 3 δεκαδικά ψηφία;

Αν βάλεις πάνω από δύο δεκαδικά, τα επιπλέον απορρίπτονται σιωπηλά. Στο κάτω - κάτω της γραφής, η λογική είναι να μετατρέπει «πραγματικούς αριθμούς» σε λέξεις. Τι θέλω να πω.

Αν γράφεις ένα τιμολόγιο ή απόδειξη, το τελικό ποσό είναι ακέραιος ή δεκαδικός με το πολύ δύο δεκαδικά, ακόμη και αν τα επιμέρους στοιχεία (τιμή μονάδος) έχουν τρία δεκαδικά (π.χ λίτρο βενζίνης).

Τώρα για το test, αν θέλεις, ίσως να μου έγραφες ένα παράδειγμα, πως θα χειριζόσουν το συγκεκριμένο θέμα. Οφείλω να ομολογήσω ότι δεν έχω ασχοληθεί ιδιαίτερα με το θέμα των test.
Γράφω σε Python 3
Τελευταία διόρθωση: 9 Χρόνια 8 Μήνες πριν από kamar. Αιτία: Διόρθωση αφαίρεση διπλής λέξης
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Number to Greek 9 Χρόνια 8 Μήνες πριν #2873

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Για τα tests, προσωπικά, χρησιμοποιώ την βιβλιοθήκη py.test. Πατσάρει την assert και δεν χρειάζεσαι όλες τις συναρτήσεις που χρησιμοποιεί η unittest (πχ assertEqual, assertListEqual κτλ). Χρησιμοποιείς παντού σκέτο assert.

Όπως και αν έχει, εφόσον απορρίπτεις σιωπηλά τα παραπάνω δεκαδικά ψηφία, νομίζω ότι κάτι σαν και το ακόλουθο θα ήταν επαρκές (θεωρώ ότι δεν κάνεις στρογγυλοποίηση!)
self.assertEqual(n2g("27.01", n2g("27.013"))
self.assertEqual(n2g("27.01", n2g("27.019"))

Από εκεί και πέρα, ίσως να είχε νόημα να έχεις δύο modes. Ένα lenient στο οποίο θα έχεις την συμπεριφορά που έχεις τώρα, και ένα strict όπου τα παραπάνω δεκαδικά ψηφία θα πετάνε exception ή έστω ένα warning (pymotw.com/2/warnings/).

Τα παραπάνω φυσικά εξαρτώνται από το τι features χρειάζεσαι.

Α! και όσον αφορά το representation, νομίζω θα είχε νόημα και ένα 3ο mode εκτός των ("upper", "lower"). Πιο συγκεκριμένα κάτι σαν το "sentence"
>>> n2g(848922.01, True, 'sentence')# Πεζοί χαρακτήρες.
'Οκτακόσιες σαράντα οκτώ χιλιάδες εννιακόσια είκοσι δύο ευρώ  και ένα λεπτά'
Όχι ότι είναι δύσκολο να το κάνεις μόνος σου μετά, αλλά δεν είναι και τίποτα να το υλοποιεί η βιβλιοθήκη απευθείας.

Όσον αφορά την απόδοση, αυτή τη στιγμή δημιουργείς τα ίδια dictionaries κάθε φορά που καλείς την «n2g()». Θα μπορούσες να την βελτιώσεις λίγο μετατρέποντας τα dictionaries σε constants και περνώντας τα σαν arguments στις διάφορες συναρτήσεις.
DEKADES = {
    10: "Δέκα",
    11: "Έντεκα",
    12: "Δώδεκα",
    13: "Δεκατρία",
    ...
}
 
 
def _metatropi_dekadon(..., dekades=DEKADES):
    ...


Και μια παρατηρήση όσον αφορά το API. Προσωπικά νοίωθω λίγο περίεργα με τα greeklish στον προγραμματισμό. Πχ η παράμετρος «nomisma», δύσκολα θα είναι κατανοητή από κάποιον που δεν γνωρίζει ελληνικά. Ναι, η συντριπτική πλειοψηφία αυτών που θα χρησιμοποιήσουν την εφαρμογή είναι έλληνες, αλλά γιατί να αποκλείσεις κάποιον;

Τέλος, ίσως η παράμετρος «nomisma» να έχει νόημα να μετατρεπεί από boolean σε string και να έχει default τιμή το «eur». Πχ:
CURRENCIES = {
    "eur": "ευρώ",
    "usd": "δολάρια",
    "aud": "δολάρια Αυστραλίας"
    "zar": "ράντ",
    ...
}
 
>>> n2g(848922.01, "usd", 'sentence')# Πεζοί χαρακτήρες.
'Οκτακόσιες σαράντα οκτώ χιλιάδες εννιακόσια είκοσι δύο δολάρια και ένα λεπτά'
Τελευταία διόρθωση: 9 Χρόνια 8 Μήνες πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Number to Greek 9 Χρόνια 8 Μήνες πριν #2874

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Ωραία! Θα κοιτάξω τις παρατηρήσεις σου.

Όσο για τα warnings ή τα exceptions, δεν θέλω να εκτυπώνεται μήνυμα στη θέση το αποτελέσματος.
Ειδικά για τα greeklish, η σκέψη μου ήταν ότι κατά βάση, η χρήση θα ήταν για ελληνόφωνους, όμως τώρα· σίγουρα θα το διορθώσω.
Επίσης, η ιδέα για το νόμισμα, είναι πολύ καλή. Ίσως προσθέσω και τη δραχμή. :evil:
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Number to Greek 9 Χρόνια 8 Μήνες πριν #2875

  • babaliaris1
  • Το Άβαταρ του/της babaliaris1
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 445
  • Ληφθείσες Ευχαριστίες 75
kamar έγραψε:
Επίσης, η ιδέα για το νόμισμα, είναι πολύ καλή. Ίσως προσθέσω και τη δραχμή. :evil:

Να την προσθέσεις γιατί έτσι όπως παν τα πράματα το βλέπω να
γυρίζουμε στην δραχμή :P
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.403 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου