Προγραμματιστική πρόκληση Νο 16 : Αναζήτηση σε λίστα

Οι προηγούμενες προκλήσεις ήταν μάλλον μαθηματικές, η σημερινή είναι ποιο βατή και χρήσιμη. Θέλουμε να αποθηκεύσουμε σε κάποιο κατάλογο ένα σύνολο ανθρώπων. Κάθε άνθρωπος κατέχει κάποια αντικείμενα. Για παράδειγμα, μπορεί να είναι καθηγητές και τα μαθήματα που κάνουν, ιδιοκτήτες ακινήτων και διευθύνσεις σπιτιών που έχουν. Κάθε «ιδιοκτήτης» μπορεί να κατέχει είτε μηδέν είτε ένα πλήθος «πραγμάτων». Αλλά κάθε πράγμα ανήκει σε ένα μόνο ιδιοκτήτη.

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

Προαιρετικά προσπαθήστε να το κάνετε όσο το δυνατόν ποιο αποδοτικό. Να μπορεί να δεχτεί χιλιάδες καθηγητές και μαθήματα. Αν θέλετε προσθέστε επιπλέον λειτουργίες όπως δυνατότητα προσθήκης ή διόρθωσης των στοιχείων.

Αλλά θα βάλω ένα περιορισμό: Τα δεδομένα θα είναι στη μνήμη του υπολογιστή και μόνο εκεί. Δε θα γίνει χρήση κάποιας βάσης δεδομένων. Και εδώ είναι η πρόκληση. Πως θα τα αναπαραστήσετε στη μνήμη χρησιμοποιώντας ότι σαν παρέχει ή αγαπημένη σας γλώσσα προγραμματισμού.

Θυμηθείτε πως το κάνουμε για την πάρτη μας και για τον χαβαλέ μας. Μην ξεχνάμε πως σκοπός μας εδώ είναι να παίξουμε να βάλουμε προκλήσεις στον εαυτό μας (και μόνον) και να ξεσκουριάσουμε τις γνώσεις μας στον προγραμματισμό. Και το φόρουμ είναι ανοικτό στον καθένα που θέλει να βάλει τις δικές του προκλήσεις :innocent:

Περιμένω τις λύσεις σας.

Δείτε και τις άλλες προκλήσεις εδώ #code_challenge

1 «Μου αρέσει»

Remade
Remade gia search
Inputs :
[search] → search for professor by subject
[f] → search for subject by professor
[p] → add professor and their subjects
[s] → add subject to professor
[a] → show all professors and subjects
[l] → Leave

from pprint import pprint
class Storage:
    def __init__(self):
        self.data = {}

    def add(self,prof,subj):
        if prof not in self.data:
            self.data.update({prof:[subj]})
        else:
            self.data[prof].append(subj)


    def add_professor(self):
        professor = input('Enter professors name: ')
        while True:
            subject = input('\nEnter proffesors subject,\n ONLY one each time\n type stop when you are done \n Subject: ')
            if subject == 'stop':
                break
            self.add(prof=professor,subj=subject)

    def add_subject(self):
         subject = input('Enter Subject: ')
         professor = input('Enter subject\'s professor: ' )
         self.add(prof=professor,subj=subject)

    def show_subjects(self):
        try:
            prof = input('\nSearch for professor\'s subjects\n Enter professor\'s name: ' )
            print('\n Subjects under that professor:')
            subjects = self.data[prof]
            subjects.sort()
            print(subjects)
        except :
            print('Not found')

    def search_subject(self):
        target = input('Enter subject: ')
        for key, val in self.data.items():
            if target in val:
                message = ('Professor: ' + key)
                return message
            else:
                message = 'Not found'
                return message







    def print_data(self):
        pprint(self.data)


    def start(self):
        while True:
            task = input('Choose a task \n Search by subject[Search], Search by professor[F], add Professor[P], add subject[S], show All[A], Leave[L]: ').lower()
            if task == 'a':
                self.print_data()
            if task == 'p':
                self.add_professor()
            if task == 's':
                self.add_subject()
            if task == 'f':
                self.show_subjects()
            if task == 'search':
                self.search_subject()

            if task == 'l':
                break


if __name__ == '__main__':
    storage = Storage()
    storage.start()
6 «Μου αρέσει»

Ένα cheat με αυτή την περιγραφή είναι η χρήση H2 Database :crazy_face: . Πάλι στην μνήμη θα είναι και χωρίς persistency. (Αν και με τον “δεν θα γίνει χρήση βάσης δεδομένων”, βγαίνει η H2 από τις πιθανές επιλογές. )

Να βοηθήσω λίγο με μια πιθανή λύση

Η λύση αυτή δεν είναι η μοναδική, αλλά αν και πολύπλοκη είναι αποδοτική. Τα πάντα είναι ταξινομημένα. Τα βελάκια δείχνουν τι πρέπει να κάνεις για να βρεις τους πελάτες του Ray.