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

Python και διαίρεση


likoyrgos

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

Χρησιμοποιώ Python 2.7.10 .

Ο τελεστής διαίρεσης είναι ο ' / '΄.

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

Όταν όμως πληκτρολογώ πχ print 7/3 βγάζει αποτέλεσμα 2 και όχι 2,33333.. που είναι το κανονικό.

Δηλ βγάζει μόνο το ακέραιο μέρος του πηλίκου.

Αν όμως πληκτρολογήσω 7.3 / 2 βγάζει κανονικά το αποτέλεσμα 3.65.

Πώς θα κάνω να βγάζει κανονικά το πηλίκο ανεξάρτητα αν ο διαιρετέος είναι ακέραιος ή όχι;

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

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

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

  • Moderators

http://stackoverflow.com/questions/1267869/how-can-i-force-division-to-be-floating-point-in-python

 

Μάλλον πρέπει να κάνεις update την python. Η ερώτηση είναι από το 2009 και από τότε του λένε ότι αυτό που θέλει γίνεται αυτόματα στην python 3.

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

Δοκίμασε 7.0/3 ή 7/3.0 γνκ πρέπει το ένα από τα δύο να είναι float για να σου δώσει δεκαδικά. Ή python3 :P

Κατάλαβα μάλλον πάω σε έκδοση 3. Ευχαριστώ.
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Διαφορετικά, μπορείς να πολλαπλασιάζεις είτε τον αριθμητή είτε τον παρονομαστή με 1.0 (βλ. και το link από SO που δόθηκε πιο πάνω).

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

Στην 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.

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

  • Moderators

Υπάρχει η python 2.x series και η python 3.x series οι οποίες αναπτύσσονται παράλληλα, οπότε τυπικά όταν κάνεις update την python2 πας σε νέα έκδοση της python2.x, όχι στην python3 η οποία μπορεί να είναι εγκατεστημένη παράλληλα. Πιθανόν να το γνωρίζεις, αλλά just saying.

 

Όχι, δεν το ήξερα αυτό. Υπέθεσα ότι ο OP απλώς έχει πολλή παλιά έκδοση :P

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

Δεν χρειάζεται να κάνεις κανένα update, Η python κάνει διαίρεση ανάλογα με το είδος των μεταβλιτών, αν είναι Intergers (ακέραιοι) τότε και το αποτέλεσμα θα είναι ακέραιο (καταλήγει δηλαδή να κάνει 'div'). Για να σου δώσει δεκαδικά πρέπει ένας απο τους 2 αριθμούς να είναι float(να έχει δηλαδή δεκαδικά). Οπότε, ή κάνεις 5.0/2 ή 5/2.0 ή αν έχεις μεταβλητές x / float(y).

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

Δεν γνωρίζω, παρά ελάχιστα την python, το ερώτημα εδώ είναι αν μπορώ να ορίσω float ή double ή single τα Α και Β και να περιμένω Α/Β να δίνει πραγματικό;

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

Στην python δεν ορίζεις types  ( float ,int .. ).

 

Όπως ειπώθηκε και παραπάνω ή θα χρησιμοποιήσεις υποδιαστολή , ή την python3 ή from __future__ import division εφόσον χρησιμοποιείς python2.

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

Δεν γνωρίζω, παρά ελάχιστα την python, το ερώτημα εδώ είναι αν μπορώ να ορίσω float ή double ή single τα Α και Β και να περιμένω Α/Β να δίνει πραγματικό;

 

Ότι λέει ο από πάνω + να τα κάνεις casting σε float ή ότι άλλο θέλεις

a = 7
b = 3
a/b ---> 2
a/float( ---> 2.3333333333333335

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

Ναι δεν ορίζουμε είπαμε όχι δεν υπάρχουν. Φυσικά και η μεταβλητή παίρνει κάποιον τύπο αναλόγως με την τιμή που της θέτεις. 

Link.png Site: ρίξε εδώ μία ματιά αν θέλεις

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

οκ, το κατάλαβα!

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

Η σταθερά που βάζουμε παίζει ρόλο στο τι θα βγάλει μια έκφραση. Και όταν ορίζουμε μεταβλητή ουσιαστικά έχουμε ανάθεση σε όνομα ενός αποτελέσματος έκφρασης!

Δεν συμπαθώ ιδιαίτερα τη γλώσσα Python (με εκνευρίζουν τα underscore και οι εσοχές που παίζουν ρόλο μπλοκ χωρίς να υπάρχει σημάδι τερματισμού του μπλοκ)

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

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

 

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

 

 

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 σε εκνευρίζουν;

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

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

  • Δημιουργία νέου...