ΔΟΜΗ ΑΠΟΦΑΗ Στα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε: Όταν το if που χρθςιμοποιοφμε παρζχει μόνο μία εναλλακτικι διαδρομι εκτζλεςθ, ο τφποσ δομισ απόφαςθσ ονομάηεται δομι απόφαςθσ μίασ εναλλακτικι διαδρομισ. if ςυνκικθ: κτλ Μπλοκ (Block) εντολϊν. Πιο ςτοιχιςμζνο (απαραίτθτoγια να καταλάβει θ Python τθν αρχι και το τζλοσ του block) Όταν το if που χρθςιμοποιοφμε ζχει δφο πικανζσ διαδρομζσ εκτζλεςθσ μία που ακολουκείται όταν θ ςυκικθ είναι αλθκισ και μία που ακολουκείται όταν θ ςυνκικθ είναι ψευδισ, ονομάηεται δομι απόφαςθσ διπλισ εναλλακτικισ διαδρομισ. if ςυνκικθ: κτλ κτλ Αν θ ςυνκικθ είναι αλθκισ εκτελείται αυτό το μπλοκ εντολϊν Αν θ ςυνκικθ είναι ψευδισ εκτελείται αυτό το μπλοκ εντολϊν Οποιοδιποτε κομμάτι τθσ if και να εκτελεςτεί θ ροι ςυνεχίηεται εδϊ. ΠΡΟΟΧΗ! Όταν γράφετε μία εντολι if-else πρζπει να ακολουκείτε τισ εξισ οδθγίεσ όςον αφορά τισ εςοχζσ του κϊδικα: Οι εντολζσ του if και else πρζπει να είναι ςτοιχιςμζνεσ, δθλαδι να ζχουν τθν ίδια εςοχι. Οι εντολζσ if και else ακολουκοφνται από αντίςτοιχα μλοκ εντολϊν. Η εςοχι των εντολϊν του κάκε μλοκ πρζπει να είναι του ίδιου επιπζδου, δθλαδι το κάκε μπλοκ πρζπει να είναι ςτοιχιςμζνο ςε ςυγκεκριμζνθ εςοχι. Επιπλζον, είδαμε ότι θ Python παρζχει μία δομι απόφαςθ γνωςτι ωσ if-elif-else, θ οποία κάνει τθ ςφνταξθ τθσ λογικισ αυτισ ευκολότερθ. Άςκθςθ 1 Να γραφεί μία εντολι if που να εκχωρεί ςτο x το 0 εάν το y ιςοφται με 20. ΛΤΗ x=int(input( Δώσε το x: )) y=int(input( Δώσε το y: )) if y==20 x=0 Άςκθςθ 2 Να μετατραπεί ο κϊδικασ που ακολουκεί ςε μία εντολι if-elif-else. if number==1: print( Ενα ) if number==2: print( Δύο ) if number==3:
print( Τρία ) print( Άγνωστο ) number=int(input("δώζε έναν αριθμό:")) if number==1: print("εναb") elif number==2: print("δύοb") elif number==3: print("τρίαb") print("άγνωζηοb") Άςκθςθ 3 Υποκζςτε ότι οι μεταβλθτζσ a=2, b=4, c=6. Σθμειϊςτε εάν κάκε μια από τισ προτάςεισ είναι αλθκισ ι ψευδισ: a==4 or b>2 6<=c and a>3 1!=b and c!=3 a>=-1 or a<=b not(a>2) ΠΡΟΠΑΘΗΣΕ ΝΑ ΑΝΣΙΛΗΦΘΕΙΣΕ ΓΙΑΣΙ ΠΡΟΚΤΠΣΕΙ ΚΑΘΕ ΑΠΟΣΕΛΕΜΑ!!! a=2 b=4 c=6 print("ερώηημα 1") if a==4 or b>2: print("ερώηημα 2") if c==6 and a>3: print("ερώηημα 3") if 1!=b and c!=3: print("ερώηημα 4") if a>=-1 or a<=b: print("ερώηημα 5") if not(a>2):
Άςκθςθ 4 Α) Να γραφεί μία εντολι που να εμφανίηει το μινυμα «Ο αρικμόσ είναι ζγκυροσ» αν θ τιμι ςτθν οποία αναφζρεται θ μεταβλθτι speed είναι εντόσ του διαςτιματοσ 0 εϊσ 200. Β) Να γραφεί μία εντολι που να εμφανίηει το μινυμα «Ο αρικμόσ δεν είναι ζγκυροσ» αν θ τιμι ςτθν οποία αναφζρεται θ μεταβλθτι speed είναι εκτόσ του διαςτιματοσ 0 εϊσ 200. speed=int(input("δώζε ηιμή για ηο speed:")) if speed>=0 and speed<=200: print("ο αριθμός είναι έγκσρος") if speed<0 or speed>200: print("ο αριθμός δεν είναι έγκσρος") Η ςυγκεκριμζνθ άςκθςθ κα μποροφςε να λυκεί με if-else όμωσ χρθςιμοποιιςαμε δφο if γιατί ζτςι ζχει ηθτθκεί από τθν άςκθςθ. Άςκθςθ 5 A) Σι κάνει θ εντολι που ακολουκεί; if x<20 or x>40 : print( mpla mpla mpla ) Εμφανίηει mpla mpla mpla ςτθ περίπτωςθ που δοκεί αρικμόσ για το x που να είναι ζξω από το διάςτθμα 20 εϊσ 40. B) Σι κάνει θ εντολι που ακολουκεί; if x<20 and x>40 : print( mpla mpla mpla ) Η εντολι που δόκθκε είναι λάκοσ, αφοφ δε μπορεί ταυτόχρονα μία τιμι να είναι και μικρότερθ από 20 και μεγαλφτερθ από 40. Θα τρζξει, αλλά δε κα εμφανίηει τίποτε. Άςκθςθ 6 Γράψτε μία εντολι if-else που να εκχωρεί το 0 ςε μία μεταβλθτι b αν θ μεταβλθτι a είναι μικρότερθ του 10. Διαφορετικά, να εκχωρεί τθν τιμι 99 ςτθ μεταβλθτι b. a=int(input("δώζε ηιμή για ηο a:")) if a<10: b=0 print("η ηιμή ηοσ b είναι:", b) b=99 print("η ηιμή ηοσ b είναι:", b) Σε κάκε μπλοκ εντολϊν ςτθν if και τθν else τοποκετικθκε και μία print για να επιβεβαιϊςουμε το αποτζλεςμα. Άςκθςθ 7 Να γραφεί εντολι if-else που να εμφανίηει το μινυμα «Η ταχφτθτα είναι κανονικι» αν θ μεταβλθτι speed ανικει ςτο διάςτθμα 40 εϊσ 90. Αν είναι εκτόσ του διαςτιματοσ να εμφανίηει το μινυμα «Η ταχφτθτα δεν είναι κανονικι». speed=int(input("δώζε ηιμή για ηο speed:")) if speed>=40 and speed <=90: print("η ηατύηηηα είναι κανονική")
print("η ηατύηηηα δεν είναι κανονική") Άςκθςθ 8 Να γραφεί εντολι if-else που να προςδιορίηει εάν θ μεταβλθτι points είναι εκτόσ του διαςτιματοσ 9-51. Αν θ τιμι τθσ μεταβλθτισ είναι εκτόσ αυτοφ του διαςτιματοσ να εμφανίηει το μινυμα «Μθ-Ζγκυρα ςθμεία», διαφορετικά α εμφανίηει το μινυμα Ζγκυρα ςθμεία». Μία λφςθ που μοιάηει με τθ προθγοφμενθ είναι θ ακόλουκθ: points=int(input("δώζε ηιμή για ηο points:")) if points>=9 and points <=51: print("έγκσρα ζημεία") print("μη - έγκσρα ζημεία") Η ςωςτι απάντθςθ όμωσ είναι: points=int(input("δώζε ηιμή για ηο points:")) if points<9 or points >51: print("μη -έγκσρα ζημεία") print("έγκσρα ζημεία") Άςκθςθ 9 Να γραφεί ζνκετθ δομι απόφαςθσ που να πραγματοποιεί το εξισ: Αν το amount1 είναι μεγαλφτερο του 10 και το amount2 είναι μικρότερο του 100, εμφάνιςε το μεγαλφτερο των amount1 και amount2. amount1=int(input( Δώζε ηιμή για ηο amount1: )) amount2=int(input( Δώζε ηιμή για ηο amount2: )) if amount1>10 and amount2 <100: print(max(amount1,amount2)) Ο πιο πάνω κϊδικασ λφνει το πρόβλθμα, δεν το λφνει όμωσ όπωσ το ηθτιςαμε. Εμείσ χρθςιμοποιιςαμε το λογικό τελεςτι and δε χρθςιμοποιιςαμε όμωσ ζνκετθ δομι. Γι αυτό το λόγο κα πρζπει να χρθςιμοποιιςουμε και ζνκετθ δομι, όπωσ: amount1=int(input("δώζε ηιμή για ηο amount1:")) amount2=int(input("δώζε ηιμή για ηο amount2:")) if amount1>10: if amount2 <100: print(max(amount1,amount2)) Άςκθςθ 10 Μία εταιρεία λογιςμικοφ πουλάει μία εφαρμογι (app) θ οποία ζχει λιανικι τιμι 99 ευρϊ. Γίνονται εκπτϊςεισ με βάςθ τθ ποςότθτα που κα αγοράςει κάποιοσ, ςφμφωνα με τον ακόλουκο πίνακα: Ποσότητα Έκπτωση 10-19 20% 20-49 30% 50-99 40%
100 και πάνω 50% Γράψτε ζνα πρόγραμμα που να ηθτάει από το χριςτθ τθν είςοδο του αρικμοφ των εφαρμογϊν που αγοράςτθκαν και να εμφανίηει το ποςό τθσ ζκπτωςθσ (αν υπάρχει) και το ςυνολικό κόςτοσ τθσ αγοράσ μετά τθν ζκπτωςθ. lianikitimi=99 posotita=int(input("δώζε ποζόηηηα:")) sinolo=posotita*lianikitimi if posotita < 10: ekptosi=0 telikitimi=sinolo-ekptosi*sinolo print("το ποζό ηης έκπηωζης είναι μηδέν και ηο ζσνολικό κόζηος ίζο με", elif posotita<20: ekptosi = 0.2 print("το ποζό ηης έκπηωζης είναι:",0.2*100,"% και ηο ζσνολικό κόζηος ίζο με", elif posotita<50: ekptosi = 0.3 print("το ποζό ηης έκπηωζης είναι:",0.3*100,"% και ηο ζσνολικό κόζηος ίζο με", elif posotita<100: ekptosi = 0.4 print("το ποζό ηης έκπηωζης είναι:",0.4*100,"% και ηο ζσνολικό κόζηος ίζο με", ekptosi = 0.5 print("το ποζό ηης έκπηωζης είναι:",0.5*100,"% και ηο ζσνολικό κόζηος ίζο με", ΛΟΓΙΚΕ ΜΕΣΑΒΛΗΣΕ Μζχρι τϊρα ζχουμε αςχολθκεί με μεταβλθτζσ τφπου int, float, string. Υπάρχουν όμωσ και οι λογικζσ μεταβλθτζσ. Μία λογικι μεταβλθτι μπορεί να αναφζρεταιςε μία από δφο πικανζσ τιμζσ: True ι False. Οι λογικζσ μεταβλθτζσ χρθςιμοποιοφνται ςυχνά ωσ μεταβλθτζσ flag.