Η Python έχει τρεις διαφορετικούς τύπους ενσωματωμένων αριθμών: ακέραιους (int), κινητής υποδιαστολής (float) και μιγαδικούς (complex).
Τα κλάσματα (fractions.Fraction) και οι δεκαδικοί (decimal.Decimal) είναι επίσης διαθέσιμα μέσω εισαγωγής από την τυπική βιβλιοθήκη.
Οι ακέραιοι αριθμοί, στους οποίους περιλαμβάνονται οι δεκαεξαδικοί (hex()), οι οκταδικοί (oct()) και οι δυαδικοί (bin()) αριθμοί χωρίς δεκαδικά ψηφία, χαρακτηρίζονται επίσης ως ints:
# Ints are whole numbers.
>>> 1234
1234
>>> type(1234)
<class 'int'>
>>> -12
-12
Οι αριθμοί που περιέχουν υποδιαστολή (με ή χωρίς κλασματικά μέρη) χαρακτηρίζονται ως floats:
>>> 3.45
3.45
>>> type(3.45)
<class 'float'>
Η Python υποστηρίζει πλήρως αριθμητικές πράξεις μεταξύ αυτών των διαφορετικών τύπων αριθμών και θα μετατρέψει τους στενότερους αριθμούς ώστε να ταιριάζουν με τους λιγότερο στενούς ομολόγους τους όταν χρησιμοποιούνται με τους δυαδικούς αριθμητικούς τελεστές (+, -, *, /, // και %).
Οι τελεστές πρόσθεσης και αφαίρεσης συμπεριφέρονται όπως στα συνηθισμένα μαθηματικά.
Αν ένας ή περισσότεροι από τους τελεστέους είναι float, οι υπόλοιποι int θα μετατραπούν επίσης σε float:
>>> 5 - 3
2
# The int is widened to a float here, and a float is returned.
>>> 3 + 4.0
7.0
Όπως με την πρόσθεση και την αφαίρεση, ο πολλαπλασιασμός θα μετατρέψει τους στενότερους αριθμούς ώστε να ταιριάζουν με τους λιγότερο στενούς ομολόγους τους:
>>> 3 * 2
6
>>> 3 * 2.0
6.0
Η διαίρεση επιστρέφει πάντα ένα float, ακόμα και αν το αποτέλεσμα είναι ακέραιος αριθμός:
>>> 6/5
1.2
>>> 6/2
3.0
Αν χρειάζεται αποτέλεσμα int, μπορείς να χρησιμοποιήσεις την ακέραια διαίρεση για να περικόψεις το αποτέλεσμα.
Η ακέραια διαίρεση εκτελείται με τον τελεστή //:
>>> 6//5
1
>>> 6//2
3
Ο τελεστής υπολοίπου (%) επιστρέφει το υπόλοιπο της διαίρεσης των δύο τελεστέων:
# The result of % is zero here, because dividing 8 by 2 leaves no remainder
>>> 8 % 2
0
# The result of % is 2 here, because 3 only goes into 5 once, with 2 leftover
>>> 5 % 3
2
Ένας άλλος τρόπος να δεις το 5 % 3:
>>> whole_part = int(5/3)
1
>>> decimal_part = 5/3 - whole_part
0.6666666666666667
>>> whole_remainder = decimal_part * 3
2.0
Η Python παρέχει μια ενσωματωμένη συνάρτηση round(number, <decimal_places>) για να στρογγυλοποιήσεις έναν αριθμό κινητής υποδιαστολής σε έναν δεδομένο αριθμό δεκαδικών ψηφίων.
Αν δεν καθοριστεί αριθμός δεκαδικών ψηφίων, ο αριθμός στρογγυλοποιείται στον πλησιέστερο ακέραιο και επιστρέφει ένα int:
>>> round(3.1415926535, 2)
3.14
>>> round(3.1415926535)
3
Η Python σου επιτρέπει να χρησιμοποιείς παρενθέσεις για να ομαδοποιήσεις εκφράσεις. Αυτό είναι χρήσιμο όταν θέλεις να παρακάμψεις την προεπιλεγμένη σειρά των πράξεων.
>>> 2 + 3 * 4
14
>>> (2 + 3) * 4
20
Η Python ακολουθεί τον κανόνα PEMDAS για την προτεραιότητα των τελεστών.
Αυτό σημαίνει ότι οι υπολογισμοί μέσα σε () έχουν την υψηλότερη προτεραιότητα, ακολουθούμενοι από **, μετά *, /, //, %, + και -:
>>> 2 + 3 - 4 * 4
-11
>>> (2 + 3 - 4) * 4
4
# In the following example, the `**` operator has the highest priority, then `*`, then `+`
# Meaning we first do 4 ** 4, then 3 * 64, then 2 + 192
>>> 2 + 3 * 4 ** 4
770
Οι ακέραιοι στην Python έχουν αυθαίρετη ακρίβεια. Ο αριθμός των ψηφίων περιορίζεται μόνο από τη διαθέσιμη μνήμη του συστήματος υποδοχής.
Οι αριθμοί κινητής υποδιαστολής συνήθως υλοποιούνται χρησιμοποιώντας έναν double στη C (15 δεκαδικά ψηφία ακρίβειας), αλλά η αναπαράστασή τους ποικίλλει ανάλογα με το σύστημα υποδοχής.
Οι μιγαδικοί αριθμοί έχουν ένα real και ένα imaginary μέρος, τα οποία αναπαρίστανται και τα δύο από αριθμούς κινητής υποδιαστολής.
Για πιο λεπτομερείς συζητήσεις των ζητημάτων και των περιορισμών της αριθμητικής κινητής υποδιαστολής σε διάφορες γλώσσες προγραμματισμού, ρίξε μια ματιά στο 0.30000000000000004.com και στο The Python Tutorial.
Η εταιρεία στην οποία εργάζεσαι θέλει να μειώσει το αποτύπωμα άνθρακα της, γι' αυτό θέλει να γράψεις ένα πρόγραμμα που να υπολογίζει την κατανάλωση ισχύος και το κόστος λειτουργίας των ηλεκτρονικών της συσκευών.
Ο εργοδότης σου έχει ένα πρόγραμμα που υπολογίζει τον χρόνο που χρειάζεται για να λειτουργήσουν διάφορες ηλεκτρονικές συσκευές. Προς το παρόν, ο χρόνος αποθηκεύεται σε ώρες. Όταν ο εργοδότης σου πρόσθεσε τις ώρες, παρατήρησε ότι η διάρκεια δεν ήταν σωστή. Θέλει να προσθέσεις 3 επιπλέον ώρες στα δεδομένα χρόνου. Θα ήθελε επίσης να μάθει πόσες "επιπλέον" ώρες απομένουν αφού μετατρέψεις τα δεδομένα σε "ολόκληρες" ημέρες (μια ημέρα είναι 24 ώρες). Ο χρόνος προς μετατροπή μπορεί να μην αντιστοιχεί σε ολόκληρες ημέρες.
Υλοποίησε μια συνάρτηση get_extra_hours() που δέχεται έναν ακέραιο που περιέχει τον αριθμό των ωρών.
Η συνάρτηση πρέπει να κάνει την κατάλληλη προσαρμογή των "επιπλέον ωρών" και στη συνέχεια να κάνει return έναν ακέραιο που αντιπροσωπεύει πόσες ώρες πρέπει να αφαιρεθούν από το σύνολο για να προκύψει ο χρόνος σε "ολόκληρες" ημέρες.
>>> get_extra_hours(25)
4
Ο εργοδότης σου θέλει να μάθει την κατανάλωση ισχύος των διαφόρων ηλεκτρονικών συσκευών σε kW. Το kW σημαίνει κιλοβάτ, όπου το βατ είναι μονάδα ισχύος. Το "kilo" στο όνομα της μονάδας είναι πρόθεμα του μετρικού συστήματος που σημαίνει 1000. Ένα κιλοβάτ == 1000 βατ.
Υλοποίησε μια συνάρτηση get_kW_value() που δέχεται έναν ακέραιο που περιέχει τον αριθμό των βατ.
Η συνάρτηση πρέπει στη συνέχεια να κάνει return τα βατ ως κιλοβάτ, στρογγυλοποιημένα σε 1 δεκαδικό ψηφίο.
>>> get_kW_value(1150)
1.2
Για να μπορεί να υπολογίσει το κόστος λειτουργίας των ηλεκτρονικών συσκευών, ο εργοδότης σου χρειάζεται να ξέρει την κατανάλωση ισχύος σε kWh. Το kWh σημαίνει κιλοβατώρα, όπου η ώρα είναι μονάδα χρόνου. Μία κιλοβατώρα == 1000 βατ για 1 ώρα. Μία ώρα αποτελείται από 60 λεπτά και ένα λεπτό αποτελείται από 60 δευτερόλεπτα. Μία ώρα ισούται με 3600 δευτερόλεπτα. Για να υπολογίσεις την τιμή kWh, πρέπει να μετατρέψεις τα βατ σε kW και στη συνέχεια να κάνεις ακέραια διαίρεση του αποτελέσματος με το 3600.
Υλοποίησε μια συνάρτηση get_kWh_value() που δέχεται έναν ακέραιο που περιέχει τον αριθμό των βατ.
Η συνάρτηση πρέπει στη συνέχεια να κάνει return τις κιλοβατώρες ως ακέραιο.
>>> get_kWh_value(5000000)
1
Οι ηλεκτρονικές συσκευές δεν είναι 100% αποδοτικές. Γι' αυτό, ο εργοδότης σου θέλει να υπολογίσεις την απόδοση των ηλεκτρονικών συσκευών. Για να βρεις την απόδοση, πρέπει να διαιρέσεις τον συντελεστή ισχύος (ένας δεκαδικός αριθμός μεταξύ 0 και 100) με το 100.
Υλοποίησε μια συνάρτηση get_efficiency() που δέχεται έναν δεκαδικό αριθμό που περιέχει τον συντελεστή ισχύος.
Η συνάρτηση πρέπει στη συνέχεια να κάνει return την υπολογισμένη απόδοση ως δεκαδικό αριθμό.
>>> get_efficiency(80)
0.8
Ο εργοδότης σου θέλει να μάθει το κόστος λειτουργίας των ηλεκτρονικών συσκευών. Το κόστος λειτουργίας των ηλεκτρονικών συσκευών είναι η ισχύς που χρησιμοποιείται πολλαπλασιασμένη με το κόστος ανά kWh. Η ισχύς που χρησιμοποιείται είναι η ισχύς που δίνεται διαιρεμένη με την υπολογισμένη απόδοση.
Υλοποίησε μια συνάρτηση get_cost(<watts>,<power_factor>,<price>) που δέχεται έναν ακέραιο που περιέχει τον αριθμό των βατ, έναν δεκαδικό αριθμό που έχει τον συντελεστή ισχύος και έναν δεκαδικό αριθμό που περιέχει το κόστος ανά kWh.
Η συνάρτηση πρέπει στη συνέχεια να κάνει return το κόστος λειτουργίας των ηλεκτρονικών συσκευών ως δεκαδικό αριθμό.
>>> get_cost(5000000, 80, 0.25)
0.3125
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Python με 17 έννοιες146 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.