Δημοσιεύτηκε: 28 Ιουν 2011, 01:26
από Ilias95
Να συνεχίσω την απορία μου απ' την προηγούμενη σελίδα καθώς βρήκα μια λύση αλλά δεν μπορώ να την χρησιμοποιήσω ακόμα. :?
Σκέφτηκα να χρησιμοποιήσω την συνάρτηση exec.
Έτσι απ' την κλάση που έδειξα και προηγουμένως:

Spoiler: show
Κώδικας: Επιλογή όλων
class Epafes:
global d
d = 1 # Με την μεταβλητή d ορίζω τον αύξων αριθμό μέσα στην __init__.
arithmos_epafwn = 0

def __init__(self, epafi):
global d
print('Εισάγεται στοιχεία της επαφής:\n')
print('Όνομα: ', end='') ; name = input()
print('Επίθετο: ', end='') ; surname = input()
print('e-mail: ', end='') ; mail = input()
print('Διέυθηνση: ', end='') ; address = input()
print('Τηλέφωνο: ', end='') ; telephone = input()
print('Κατηγορία: ', end='') ; category = input()
self.name = name
self.surname = surname
self.mail = mail
self.address = address
self.telephone = telephone
self.category = category
self.k = d # Α/Α - αύξων αριθμός
d += 1
Epafes.arithmos_epafwn += 1
epafi = d

def tell(self):

print('''
{6}. {0} {1}:

Όνομα: {0}
Επίθετο: {1}
e-mail: {2}
Διέυθηνση: {3}
Τηλέφωνο: {4}
Κατηγορία: {5}
'''.format(self.name, self.surname, self.mail, \
self.address, self.telephone, self.category, self.k))


Αν κάνω το παρακάτω και εισάγω Giannis, το πρόγραμμα θα δουλέψει άψογα:

Κώδικας: Επιλογή όλων
Giannis = Epafes(1)

print('Poia epafi theleis na deis?') ; b = input()
symvolosira = b + '.tell()'
exec(symvolosira) # Η exec μετατρέπει το αλφαριθμητικό a στο όνομα της μεταβλητής στην προκειμένη περίπτωση.


Θα εισάγω δηλαδή τα στοιχεία του Giannis και θα τα πάρω πίσω με την tell().

Αν όμως κάνω μια μικρή αλλαγή και εισάγω και στο a και στο b Giannis, θα έχω πρόβλημα:

Κώδικας: Επιλογή όλων
print('Pws na onomastei i epafi?') ; a = input()
a = Epafes(1)
print('Poia epafi theleis na deis?') ; b = input()
symvolosira = b + '.tell()'
exec(symvolosira)


Θα πάρω σφάλμα:

Spoiler: show
Κώδικας: Επιλογή όλων
Traceback (most recent call last):
File "Epafes.py", line 49, in <module>
exec(symvolosira)
File "<string>", line 1, in <module>
NameError: name 'Ilias' is not defined

(Σκέφτηκα ότι αφού το a θα το ορίσω σαν Giannis και το b πάλι σαν Γιάννης θα δουλέψει, αλλά τελικά το Epafes(1) αντιστοιχίζεται στην μεταβλητή a η οποία πριν απλά είχε την τιμή "Giannis".)

Πως θα το κάνω να καταλάβει ότι το b και το a είναι και τα δύο Giannis; :wtf:

Ευχαριστώ εκ των προτέρων για οποιαδήποτε απάντηση!