Δημοσιεύτηκε: 13 Ιουν 2014, 14:19
από Ilias95
Ωραία και τώρα ώρα να το ξανά-τροποποιήσεις. :P

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

Αυτό που έγραψες παραπάνω είναι πολύ καλύτερα να γίνει:
Κώδικας: Επιλογή όλων
def menu(choices):
for i in choices:
print(i)

def input_check(choices):
while True:
entry = input()
if entry == '1':
print('-', choices[0], '-')
elif entry == '2':
print('-', choices[1], '-')
elif entry == '3':
print('-', choices[2], '-')
elif entry =='4':
print('Thank you for using my program.')
break
else:
print('WARNING: Bad command')

def main():
_tuple = ('1st choice', '2nd choice', '3rd choice', 'Type 4 to close the program')
menu(_tuple)
input_check(_tuple)

main()


Παρατήρησε ότι μετέφερα την tuple στην main και την περνάω σαν όρισμα στην menu() και στην input_check() που την χρειάζονται.

Επίσης θα παρατήρησες ότι άλλαξα το όνομα της από tuple σε _tuple. Αυτό το έκανα γιατί η tuple είναι δεσμευμένη λέξη στην pyhon και μάλιστα είναι συνάρτηση. Πάντα να αποφεύγεις να χρησιμοποιήσεις δεσμευμένα ονόματα όπως list, dict, def, if κτλ. γιατί θα σου δημιουργηθούν «περίεργα» προβλήματα που πιθανόν να δυσκολεύεσαι να τα εντοπίσεις κιόλας:

Κώδικας: Επιλογή όλων
>>> a = (1, 2, 3)
>>> list(a)
[1, 2, 3]
>>> print(list)
<class 'list'>
>>> list = 12
>>> list(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> print(list)
12
>>>


Επίσης για να μην επαναλαμβάνεις κώδικα μπορείς να κάνεις κάτι ακόμα ωραίο.
Το:
Κώδικας: Επιλογή όλων
entry = input()
if entry == '1':
print('-', choices[0], '-')
elif entry == '2':
print('-', choices[1], '-')
elif entry == '3':
print('-', choices[2], '-')
elif entry =='4':
print('Thank you for using my program.')
break
else:
print('WARNING: Bad command')


Να το κάνεις:
Κώδικας: Επιλογή όλων
entry = int(input())
if 0 < entry < 4:
print('-', choices[entry-1], '-')
elif entry == 4:
print('Thank you for using my program.')
break
else:
print('WARNING: Bad command')


Με την συνάρτηση int() μετατρέπεται το string σε integer αν αυτό είναι δυνατόν. Πως να αντιμετωπίσεις τις περιπτώσεις που δεν γίνεται η μετατροπή θα δεις στο κεφάλαιο με τις Exceptions. Δηλαδή τώρα το πρόγραμμα θα δουλεύει μόνο αν δίνει αριθμούς απ' το πληκτρολόγιο.