Μεταβλητές και τύποι — DedSec Project
Μεταβλητές και τύποι — μετατροπή εισόδου πριν τους υπολογισμούς Η έννοια και το αναμενόμενο αποτέλεσμα Μία μεταβλητή αναφέρεται σε τιμή η οποία στην Python έχει τύπο. Το "12" είναι κείμενο…
Μεταβλητές και τύποι — μετατροπή εισόδου πριν τους υπολογισμούς
Η έννοια και το αναμενόμενο αποτέλεσμα
Μία μεταβλητή αναφέρεται σε τιμή η οποία στην Python έχει τύπο. Το "12" είναι κείμενο, ενώ το 12 είναι ακέραιος· δεν είναι ισοδύναμα στις αριθμητικές πράξεις. Οι φόρμες και τα ορίσματα τερματικού συνήθως δίνουν συμβολοσειρές. Ορίζουμε σαφή μετατροπή: επιτρέπονται μόνο δεκαδικά ψηφία ASCII, χωρίς περιττά αρχικά μηδενικά και με μέγιστη τιμή 50 τεμάχια.
Εκτελέσιμη άσκηση Python 3
Αποθήκευσε ως 02_Variables_and_types.py και εκτέλεσε με Python 3. Πρώτα πρόβλεψε το αποτέλεσμα· όλοι οι έλεγχοι χρησιμοποιούν απλές τεχνητές τιμές χωρίς δίκτυο.
def parse_units(token):
if type(token) is not str or not token.isascii() or not token.isdecimal():
raise ValueError("ASCII decimal text required")
if len(token) > 1 and token.startswith("0"):
raise ValueError("no leading zeros")
number = int(token)
if number > 50: raise ValueError("limit 50")
return number
count = parse_units("12")
label = "pieces"
assert count == 12 and type(count) is int
assert type(label) is str
assert f"{count} {label}" == "12 pieces"
for bad in ("03","-2","2.0","٢",True,"51"):
try: parse_units(bad)
except ValueError: pass
else: raise AssertionError("bad text accepted")
print("PASS typed quantity conversion")
Γιατί λειτουργεί
Η σκέτη int(token) μπορεί να δεχτεί μορφές εκτός των απαιτήσεων της διεπαφής. Ο έλεγχος ASCII απορρίπτει αριθμητικά σύμβολα άλλων αλφαβήτων· είναι επιλογή του συγκεκριμένου προγράμματος, όχι γενική κρίση για όλες τις γλώσσες. Ο type(token) is str δεν αφήνει την True ή έναν ήδη υπάρχοντα ακέραιο να περνούν ως κείμενο. Το τελικό f-string μετατρέπει τον ελεγμένο αριθμό σε κείμενο μόνο όταν σχηματίζεται το μήνυμα εμφάνισης.
Καθοδηγούμενη εξάσκηση
Πριν τρέξεις το πρόγραμμα, πρόβλεψε "12" + "3" και 12 + 3. Εξήγησε γιατί η πρώτη πράξη συνενώνει χαρακτήρες αντί να δίνει 15. Δοκίμασε '0', '50', '51', '03', '٢' και '-1'. Αν μία πραγματική εφαρμογή πρέπει να δέχεται άλλα αριθμητικά σύμβολα, σχεδίασε νέο σαφή αναλυτή. Πρόσθεσε έλεγχο ότι η μεταβλητή label παραμένει str.
Αντιμετώπιση λαθών
Το TypeError συχνά δείχνει ασυμβατότητα μεταξύ τύπων και πράξεων, όχι ανάγκη να μετατρέψεις τα πάντα σε κείμενο. Για απρόβλεπτα ψηφία διατήρησε την αρχική είσοδο και εξήγησε τη σωστή μορφή. Μην αντικαθιστάς κάθε άκυρη τιμή με μηδέν, γιατί το μηδέν μπορεί να είναι έγκυρο.