Και τωρα ένα τρομερο κολπο που μπορουμε να κάνουμε με συμβολοσειρές:
def shout(string): for character in string: print "Gimme a "+character print "'"+character+"'" shout("Lose") def middle(string): print "The middle character is:",string[len(string)/2] middle("abcdefg") middle("The Python Programming Language") middle("Atlanta")
Με αποτέλεσμα:
Gimme a L 'L' Gimme a o 'o' Gimme a s 's' Gimme a e 'e' The middle character is: d The middle character is: r The middle character is: aΤα προγραμματα αυτα δειχνουν οτι οι συμβολοσειρές έχουν πολλες ομοιοτητες με τους καταλογους σε πολλα σημεια. Η διαδικασια shout δείχνει οτι οι βρογχοι for μπορουν να χρησιμοποιηθουν σε συμβολοσειρες οπως και στους καταλογους. Η διαδικασια middle μας δειχνει οτι οι συμβολοσειρες μπορουν να χρησιμοποιησουν την συνάρτηση len καθως και ευρετηρια και φετες απο πινακες. Οι περισσοτερες δυνατοτητες που εχουμε με τους καταλογους ισχυουν και για τις συμβολοσειρες.
Το επομενο παραδειγμα μας δείχνει καποιες συγκεκριμενες δυνατοτητες που εχουμε για τις συμβολοσειρές:
def to_upper(string): ## Converts a string to upper case upper_case = "" for character in string: if 'a' <= character <= 'z': location = ord(character) - ord('a') new_ascii = location + ord('A') character = chr(new_ascii) upper_case = upper_case + character return upper_case print to_upper("This is Text")with the output being:
THIS IS TEXTΤο προγραμμα δουλευει επειδη ο υπολογιστης βλεπει τους χαρακτηρες μιας συμβολοσειρας σαν αριθμους απο το 0 ως το 255. Η Python έχει μια συνάρτηση που λεγεται ord (συντομευση του ordinal) η οποια επιστρεφει εναν χαρακτηρα σαν αριθμο. Υπαρχει επισης η αντιστροφη συνάρτηση που λεγεται chr και μετατρεπει έναν αριθμο σε γραμμα. Γνωρίζοντας πλεον αυτα, το προγραμμα πρεπει να αρχιζει να ξεκαθαρίζει . Η πρώτη λεπτομέρεια ειναι η γραμμη:
if 'a' <= character <= 'z':
που ψαχνει να μαθει αν το γραμμα είναι πεζο.
Αν είναι οι πεομενες γραμμες τρεχουν. Πρωτα
μετατρεπεται σε μια περιοχη που a=0,b=1,c=2 κλπ με την γραμμή: location = ord(character) - ord('a')
.
Μετά εντοπιζεται η νέα τιμη με την γραμμη new_ascii = location + ord('A')
. Η νεα αυτη τιμη μετατρεπεται ξανά
σε γράμμα που είναι πλεον κεφαλαιο.
Παμε τωρα για μια ασκηση πληκτρολογησης:
>>> #Integer to String ... >>> 2 2 >>> repr(2) '2' >>> -123 -123 >>> repr(-123) '-123' >>> #String to Integer ... >>> "23" '23' >>> int("23") 23 >>> "23"*2 '2323' >>> int("23")*2 46 >>> #Float to String ... >>> 1.23 1.23 >>> repr(1.23) '1.23' >>> #Float to Integer ... >>> 1.23 1.23 >>> int(1.23) 1 >>> int(-1.23) -1 >>> #String to Float ... >>> float("1.23") 1.23 >>> "1.23" '1.23' >>> float("123") 123.0
Αν δεν το εχετε μαντεψει ακομα, η συνάρτηση repr
μετατρεπει έναν ακεραιο σε συμβολοσειρα και η
συνάρτηση int
το αντίστροφο, δηλαδη, έναν χαρακτηρα σε αριθμο. Η συνάρτηση float μπορεί να μετατρεψει έναν χαρακτήρα σε
αριθμο κινητης υποδιαστολης. Η συνάρτηση repr
επιστρεφει μια εκτυπωσιμη αναπαράσταση από ...κάτι.
Να κάποια παραδειγματα:
>>> repr(1) '1' >>> repr(234.14) '234.14' >>> repr([4,42,10]) '[4, 42, 10]'Η συνάρτηση
int
προσπαθεί να μετατρεψει μια συμβολοσειρά (η έναν αριθμο κινητης υποδιαστολης) σε ακεραιο.
Υπαρχει μια παρομοια συάρτηση, η float
, που μετατρεπει έναν ακεραιο ή μια συμβολοσειρα σε αριθμο κινητής υποδιαστολης.
Μια άλλη συνάρτηση που περιλαμβάνεται στην Python είναι η eval
. Η eval
παιρνει μια συμβολοσειρα και επιστρεφει
δεδομένα του τυπου που η python νομιζει οτι βρηκε. Για παράδειγμα:
>>> v=eval('123') >>> print v,type(v) 123 <type 'int'> >>> v=eval('645.123') >>> print v,type(v) 645.123 <type 'float'> >>> v=eval('[1,2,3]') >>> print v,type(v) [1, 2, 3] <type 'list'>Αν χρησιμοποιητε την συναρτηση
eval
θα πρεπει να ελεγχετε το αν επιστρεφει τον τυπο των δεοδομένων
που περιμένετε.
Μια πολυ χρησιμη συνάρτηση συμβολοσειρων ειναι η split
. Να ενα παραδειγμα:
>>> import string >>> string.split("This is a bunch of words") ['This', 'is', 'a', 'bunch', 'of', 'words'] >>> string.split("First batch, second batch, third, fourth",",") ['First batch', ' second batch', ' third', ' fourth']Προσεξτε πως η
split
μετατρεπει μια συμβολοσειρα σε κατάλογο συμβολοσειρων. Η συμβολοσειρα χωριζεται εξ ορισμου με τα
κενά η με κάποια άλλη προσθετη παράμετρο (εδω με το κομμα).
#This program requires a excellent understanding of decimal numbers def to_string(in_int): "Converts an integer to a string" out_str = "" prefix = "" if in_int < 0: prefix = "-" in_int = -in_int while in_int / 10 != 0: out_str = chr(ord('0')+in_int % 10) + out_str in_int = in_int / 10 out_str = chr(ord('0')+in_int % 10) + out_str return prefix + out_str def to_int(in_str): "Converts a string to an integer" out_num = 0 if in_str[0] == "-": multiplier = -1 in_str = in_str[1:] else: multiplier = 1 for x in range(0,len(in_str)): out_num = out_num * 10 + ord(in_str[x]) - ord('0') return out_num * multiplier print to_string(2) print to_string(23445) print to_string(-23445) print to_int("14234") print to_int("12345") print to_int("-3512")
Το αποτελεσμα ειναι:
2 23445 -23445 14234 12345 -3512