likoyrgos Δημοσ. 11 Δεκεμβρίου 2015 Δημοσ. 11 Δεκεμβρίου 2015 Χρησιμοποιώ Python 2.7.10 . Ο τελεστής διαίρεσης είναι ο ' / '΄. Σύμφωνα με αυτά που έχω διαβάσει βγάζει το πηλίκο της διαίρεσης δύο αριθμών. Όταν όμως πληκτρολογώ πχ print 7/3 βγάζει αποτέλεσμα 2 και όχι 2,33333.. που είναι το κανονικό. Δηλ βγάζει μόνο το ακέραιο μέρος του πηλίκου. Αν όμως πληκτρολογήσω 7.3 / 2 βγάζει κανονικά το αποτέλεσμα 3.65. Πώς θα κάνω να βγάζει κανονικά το πηλίκο ανεξάρτητα αν ο διαιρετέος είναι ακέραιος ή όχι;
Moderators Kercyn Δημοσ. 11 Δεκεμβρίου 2015 Moderators Δημοσ. 11 Δεκεμβρίου 2015 http://stackoverflow.com/questions/1267869/how-can-i-force-division-to-be-floating-point-in-python Μάλλον πρέπει να κάνεις update την python. Η ερώτηση είναι από το 2009 και από τότε του λένε ότι αυτό που θέλει γίνεται αυτόματα στην python 3.
akis_fc Δημοσ. 11 Δεκεμβρίου 2015 Δημοσ. 11 Δεκεμβρίου 2015 Δοκίμασε 7.0/3 ή 7/3.0 γνκ πρέπει το ένα από τα δύο να είναι float για να σου δώσει δεκαδικά. Ή python3 1
likoyrgos Δημοσ. 12 Δεκεμβρίου 2015 Μέλος Δημοσ. 12 Δεκεμβρίου 2015 Δοκίμασε 7.0/3 ή 7/3.0 γνκ πρέπει το ένα από τα δύο να είναι float για να σου δώσει δεκαδικά. Ή python3 Κατάλαβα μάλλον πάω σε έκδοση 3. Ευχαριστώ.
parsifal Δημοσ. 12 Δεκεμβρίου 2015 Δημοσ. 12 Δεκεμβρίου 2015 Διαφορετικά, μπορείς να πολλαπλασιάζεις είτε τον αριθμητή είτε τον παρονομαστή με 1.0 (βλ. και το link από SO που δόθηκε πιο πάνω).
Ilias95 Δημοσ. 12 Δεκεμβρίου 2015 Δημοσ. 12 Δεκεμβρίου 2015 Στην python υπάρχουν τα future imports για καλύτερο compatibility python2-python3. Η λογική είναι ότι φέρνεις χαρακτηριστικά της νεότερης python3 στην python2.Οπότε για να έχεις τον division operator της python3 στην python2, όπως φαίνεται και στο link του Kercyn θα γράψεις στην αρχή, αρχή του αρχείου σου: from __future__ import division Προφανώς δεν "χρειάζεται" να πας σε python3 για τέτοιο λόγο. Αν όμως τώρα μαθαίνεις python δεν βλέπω κανένα λόγο να γράφεις σε python2. Μάλλον πρέπει να κάνεις update την python. Υπάρχει η python 2.x series και η python 3.x series οι οποίες αναπτύσσονται παράλληλα, οπότε τυπικά όταν κάνεις update την python2 πας σε νέα έκδοση της python2.x, όχι στην python3 η οποία μπορεί να είναι εγκατεστημένη παράλληλα. Πιθανόν να το γνωρίζεις, αλλά just saying. 1
Moderators Kercyn Δημοσ. 12 Δεκεμβρίου 2015 Moderators Δημοσ. 12 Δεκεμβρίου 2015 Υπάρχει η python 2.x series και η python 3.x series οι οποίες αναπτύσσονται παράλληλα, οπότε τυπικά όταν κάνεις update την python2 πας σε νέα έκδοση της python2.x, όχι στην python3 η οποία μπορεί να είναι εγκατεστημένη παράλληλα. Πιθανόν να το γνωρίζεις, αλλά just saying. Όχι, δεν το ήξερα αυτό. Υπέθεσα ότι ο OP απλώς έχει πολλή παλιά έκδοση
web_alex Δημοσ. 12 Δεκεμβρίου 2015 Δημοσ. 12 Δεκεμβρίου 2015 Δεν χρειάζεται να κάνεις κανένα update, Η python κάνει διαίρεση ανάλογα με το είδος των μεταβλιτών, αν είναι Intergers (ακέραιοι) τότε και το αποτέλεσμα θα είναι ακέραιο (καταλήγει δηλαδή να κάνει 'div'). Για να σου δώσει δεκαδικά πρέπει ένας απο τους 2 αριθμούς να είναι float(να έχει δηλαδή δεκαδικά). Οπότε, ή κάνεις 5.0/2 ή 5/2.0 ή αν έχεις μεταβλητές x / float(y). 2
M2000 Δημοσ. 12 Δεκεμβρίου 2015 Δημοσ. 12 Δεκεμβρίου 2015 Δεν γνωρίζω, παρά ελάχιστα την python, το ερώτημα εδώ είναι αν μπορώ να ορίσω float ή double ή single τα Α και Β και να περιμένω Α/Β να δίνει πραγματικό;
ggeo1 Δημοσ. 12 Δεκεμβρίου 2015 Δημοσ. 12 Δεκεμβρίου 2015 Στην python δεν ορίζεις types ( float ,int .. ). Όπως ειπώθηκε και παραπάνω ή θα χρησιμοποιήσεις υποδιαστολή , ή την python3 ή from __future__ import division εφόσον χρησιμοποιείς python2.
akis_fc Δημοσ. 12 Δεκεμβρίου 2015 Δημοσ. 12 Δεκεμβρίου 2015 Δεν γνωρίζω, παρά ελάχιστα την python, το ερώτημα εδώ είναι αν μπορώ να ορίσω float ή double ή single τα Α και Β και να περιμένω Α/Β να δίνει πραγματικό; Ότι λέει ο από πάνω + να τα κάνεις casting σε float ή ότι άλλο θέλεις a = 7 b = 3 a/b ---> 2 a/float( ---> 2.3333333333333335
M2000 Δημοσ. 12 Δεκεμβρίου 2015 Δημοσ. 12 Δεκεμβρίου 2015 Δηλαδή δεν ορίζουμε τύπο; Και όμως αν δώσεις αρχική τιμή με δεκαδικό, ορίζεις τύπο...
akis_fc Δημοσ. 12 Δεκεμβρίου 2015 Δημοσ. 12 Δεκεμβρίου 2015 Ναι δεν ορίζουμε είπαμε όχι δεν υπάρχουν. Φυσικά και η μεταβλητή παίρνει κάποιον τύπο αναλόγως με την τιμή που της θέτεις. Site: ρίξε εδώ μία ματιά αν θέλεις
M2000 Δημοσ. 12 Δεκεμβρίου 2015 Δημοσ. 12 Δεκεμβρίου 2015 οκ, το κατάλαβα! Απλά βλέποντας ένα Α/Β δεν ξέρεις αφενός αν είναι διαίρεση ακεραίων ή πραγματικών και αφετέρου αν θα δώσει πραγματικό ή ακέραιο. Η σταθερά που βάζουμε παίζει ρόλο στο τι θα βγάλει μια έκφραση. Και όταν ορίζουμε μεταβλητή ουσιαστικά έχουμε ανάθεση σε όνομα ενός αποτελέσματος έκφρασης! Δεν συμπαθώ ιδιαίτερα τη γλώσσα Python (με εκνευρίζουν τα underscore και οι εσοχές που παίζουν ρόλο μπλοκ χωρίς να υπάρχει σημάδι τερματισμού του μπλοκ)
Ilias95 Δημοσ. 12 Δεκεμβρίου 2015 Δημοσ. 12 Δεκεμβρίου 2015 Απλά βλέποντας ένα Α/Β δεν ξέρεις αφενός αν είναι διαίρεση ακεραίων ή πραγματικών και αφετέρου αν θα δώσει πραγματικό ή ακέραιο. Αυτό βέβαια σου δίνει πολύ μεγάλη ευελιξία. Δες πχ. ένα παράδειγμα με άλλον τελεστή: In [1]: def add(a, : ...: return a + b ...: In [2]: add(1, 5) Out[2]: 6 In [3]: add(2.4, 1.9) Out[3]: 4.3 In [4]: add("abc", "def") Out[4]: 'abcdef' In [5]: add([1, 2, 3], [4, 5, 6]) Out[5]: [1, 2, 3, 4, 5, 6] In [6]: add((1, 2), (3, 4)) Out[6]: (1, 2, 3, 4) In [7]: Ορίζεις μία add() και καθάρισες. Δεν χρειάζεσαι ούτε overloading, ούτε περίεργα macros, ούτε να ορίζεις 10 συναρτήσεις. Ποια underscores σε εκνευρίζουν; 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα