Python! Λίγη βοήθεια για τα πρώτα βήματα!

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Python! Λίγη βοήθεια για τα πρώτα βήματα!

Δημοσίευσηαπό saviolidis » 02 Μάιος 2012, 11:27

Κώδικας: Επιλογή όλων
#!/usr/bin/python3
# Made by Saviolidis
sum = 0
try:
b = int(input('Δώσε αριθμό μαθημάτων: '))
except ValueError:
print('Invalid Input')
while b<=0:
try:
b = int(input('Λάθος! Δώσε αριθμό μαθημάτων: '))
except ValueError:
print('Invalid Input')

for i in range(1, b+1):
try:
a = int(input('Δώσε βαθμό: '))
except ValueError:
print('Invalid Input')
while a<=0 or a>20:
try:
a = int(input('Λάθος! Δώσε βαθμό: '))
except ValueError:
print('Invalid Input')
sum = sum+a
mo = sum/b
print('Ο μέσος όρος των μαθημάτων είναι: ',mo)
print('Τέλος')


Βέβαια δεν έχω βάλει δομή επανάληψης και έτσι συνεχίζει να βγάζει λάθος! Πως μπορώ να βάλω μία While και να πω:
Κάνε επανάληψη μέχρι η συνθήκη να είναι <> (διάφορη) του Except;
1 Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Pascal ┃ Αγγλικά: Προχωρημένος
2 Λειτουργικό → Ubuntu 11.10 Oneiric Ocelot (Gnome Shell) 32-bit (en_US.utf8)
3 Προδιαγραφές → CPU: 2x Intel Atom CPU N450 1.66GHz ‖ RAM 965 MiB ‖ Hewlett-Packard 3660 - Hewlett-Packard HP Mini 210-1000
4 Κάρτες γραφικών: Intel N10 Family Integrated Graphics Controller ⎨8086:a011⎬
Η ιστοσελίδα μου: http://www.hiphopistas.weebly.com
Άβαταρ μέλους
saviolidis
punkTUX
punkTUX
 
Δημοσιεύσεις: 225
Εγγραφή: 16 Μαρ 2011, 00:11
Τοποθεσία: Σίφνος
IRC: Savio
Εκτύπωση

Re: Python! Λίγη βοήθεια για τα πρώτα βήματα!

Δημοσίευσηαπό Ilias95 » 02 Μάιος 2012, 15:02

Θα χρησιμοποιήσεις την break για να βγεις απ' το loop:
Κώδικας: Επιλογή όλων
while True:
try:
b = int(input('Δώσε αριθμό μαθημάτων: '))
break
except ValueError:
print('Error')


saviolidis έγραψε:η συνθήκη να είναι <> (διάφορη)

Στην python ο τελεστής είναι != και όχι <>:
Κώδικας: Επιλογή όλων
>>> 4 != 99
True
>>>
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Python! Λίγη βοήθεια για τα πρώτα βήματα!

Δημοσίευσηαπό Ilias95 » 02 Μάιος 2012, 15:14

Μπορείς να κάνεις περισσότερες διορθώσεις.
Δες πχ. τον παρακάτω κώδικα:

Μορφοποιημένος Κώδικας: Επιλογή όλων
#!/usr/bin/python3

_sum = 0

while True:
try:
num_lessons = int(input('Δώσε αριθμό μαθημάτων: '))
break
except ValueError:
print('Invalid')

for i in range(num_lessons):
while True:
try:
a = int(input('Δώσε βαθμό: '))
if a > 0 and a <= 20:
_sum += a
break
else:
print('Ο βαθμός πρέπει να είναι μεταξύ 1 και 20')
except ValueError:
print('Invalid')

print('Ο μέσος όρος των μαθημάτων είναι: ', _sum / num_lessons)


Έτσι δεν χρειάζεται να γράψεις δύο φορές τον κώδικα για να ζητήσεις τον βαθμό σε κάποιο μάθημα.

Επίσης παρατήρησε ότι μεταξύ άλλων άλλαξα το όνομα της μεταβλητής sum σε _sum.
Αυτό το έκανα γιατί το όνομα sum αντιστοιχεί σε κάποια built-in function και πιθανότατα μελλοντικά θα αντιμετωπίσεις περίεργα bugs.
Για το λόγο αυτό ποτέ μην χρησιμοποιείς τέτοια ονόματα στα προγράμματα σου.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Python! Λίγη βοήθεια για τα πρώτα βήματα!

Δημοσίευσηαπό saviolidis » 03 Μάιος 2012, 20:51

Ευχαριστώ πολύ φίλε! Αλλά αν μπορείς να μου εξηγήσεις λίγο πιο αναλυτικά την Break και πως ακριβώς χρησιμοποιήτε ώστε να καταλάβω. Ευχαριστώ και πάλι!
1 Γνώσεις → Linux: Μέτριος ┃ Προγραμματισμός: Pascal ┃ Αγγλικά: Προχωρημένος
2 Λειτουργικό → Ubuntu 11.10 Oneiric Ocelot (Gnome Shell) 32-bit (en_US.utf8)
3 Προδιαγραφές → CPU: 2x Intel Atom CPU N450 1.66GHz ‖ RAM 965 MiB ‖ Hewlett-Packard 3660 - Hewlett-Packard HP Mini 210-1000
4 Κάρτες γραφικών: Intel N10 Family Integrated Graphics Controller ⎨8086:a011⎬
Η ιστοσελίδα μου: http://www.hiphopistas.weebly.com
Άβαταρ μέλους
saviolidis
punkTUX
punkTUX
 
Δημοσιεύσεις: 225
Εγγραφή: 16 Μαρ 2011, 00:11
Τοποθεσία: Σίφνος
IRC: Savio
Εκτύπωση

Re: Python! Λίγη βοήθεια για τα πρώτα βήματα!

Δημοσίευσηαπό pmav99 » 03 Μάιος 2012, 21:08

@saviolidis
Σαν γενική αρχή καλό είναι να μη βάζεις πολλά πράγματα μέσα στο block του "try". Ιδανικά μόνο ένα. Ο λόγος είναι για να είναι πιο εύκολο το debugging. Σκέψου πχ την περίπτωση, το ValueError να μη γίνει raised από την input αλλά από κάποια άλλο εντολή που βρίσκεται μέσα στο try block. Πως θα ξέρεις τι πήγε στραβά?

Για το λόγο αυτό στο τέλος του try/except μπορείς προαιρετικά να βάλεις και τα else/finally. Δηλαδή o κώδικας θα γίνει κάπως έτσι.
Μορφοποιημένος Κώδικας: Επιλογή όλων
#!/usr/bin/env python3

net = 0

while True:
try:
num_courses = int(input('Give number of courses: '))
except ValueError:
print('Invalid input. Please enter an integer.')
else:
break

for i in range(num_courses):
while True:
try:
grade = int(input("enter a grade (0 - 20)")
except ValueError:
print("Invalid grade. Please retry!")
else:
if 0 <= grade <= 20:
net += integer_value
break

print("your average is %.2f" % net / num_courses)

Το else εκτελείται μόνο αν δε σηκωθεί το exception ενώ το finally εκτελείται ότι και να γίνει (είτε δηλαδή υπάρχει exception είτε όχι).

ps. To code highlight πως μπαίνει?
ps2. Το σωστό είναι το shebang να δείχνει στο env και όχι απευθείας στην Python.
Τελευταία επεξεργασία από pmav99 και 03 Μάιος 2012, 22:44, έχει επεξεργασθεί 1 φορά/ες συνολικά
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Python! Λίγη βοήθεια για τα πρώτα βήματα!

Δημοσίευσηαπό pmav99 » 03 Μάιος 2012, 21:13

@saviolidis
Η Break πρακτικά είναι ένα GOTO που σε πετάει στο τέλος του Loop. Πχ έστω ότι έχεις μια λίστα με πραγματικούς αριθμούς και ψάχνεις τον πρωτο αρνητικό.

Μορφοποιημένος Κώδικας: Επιλογή όλων
mylist = [3, 4, 5, 6, 8, 9, -20, 2, 3, 4, 3, 4, -30, 2, 3, 3]

for number in mylist:
if number < 0:
negative = number
break

try:
print("The first negative number is : " negative)
except NameError:
print("There is no negative number")


To try/except το βάζω γιατί μπορεί η λίστα να μην έχει αρνητικό αριθμό μέσα και η μεταβλητή negative να μη δημιουργηθεί ποτέ.
Τελευταία επεξεργασία από pmav99 και 03 Μάιος 2012, 22:45, έχει επεξεργασθεί 1 φορά/ες συνολικά
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Python! Λίγη βοήθεια για τα πρώτα βήματα!

Δημοσίευσηαπό Ilias95 » 03 Μάιος 2012, 22:42

Πω πω, else και finally σε try-except!
Ούτε που το θυμόμουν! :P

Ερώτηση: Το finally statement μπορεί να χρησιμοποιηθεί και αλλού εκτός από κάποια try-except πλοκάδα;

pmav99 έγραψε:Το σωστό είναι το shebang να δείχνει στο env και όχι απευθείας στην Python.

Γιατί έτσι;
pmav99 έγραψε:To code highlight πως μπαίνει?

[ z_code]...[/ z_code]
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Python! Λίγη βοήθεια για τα πρώτα βήματα!

Δημοσίευσηαπό pmav99 » 03 Μάιος 2012, 22:52

Ilias95 έγραψε:Ούτε που το θυμόμουν! :P

To γύρισες στη C για αυτό :P
Ilias95 έγραψε:
Ερώτηση: Το finally statement μπορεί να χρησιμοποιηθεί και αλλού εκτός από κάποια try-except πλοκάδα;

Για το try και τη χρήση δες εδω. Στην ίδια σελίδα έχει και τη σύνταξη και των άλλων compound statements. Όπως θα δεις, finally υπάρχει μόνο στα try, στα άλλα δεν έχει νόημα άλλωστε. Αυτό που δεν είναι τόσο συνηθισμένο είναι τα else στα for και στα while loops τα οποία εκτελούνται μόνο αν τελειώσουν επιτυχώς, δηλαδή δεν εκτελεστεί κάποιο break μέσα στο block τους.
Ilias95 έγραψε:
[ z_code]...[/ z_code]

ty
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Python! Λίγη βοήθεια για τα πρώτα βήματα!

Δημοσίευσηαπό pmav99 » 03 Μάιος 2012, 23:27

Ilias95 έγραψε:
pmav99 έγραψε:Το σωστό είναι το shebang να δείχνει στο env και όχι απευθείας στην Python.

Γιατί έτσι;

http://mail.python.org/pipermail/tutor/ ... 54816.html
pmav99
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 574
Εγγραφή: 05 Ιούλ 2008, 14:29
Εκτύπωση

Re: Python! Λίγη βοήθεια για τα πρώτα βήματα!

Δημοσίευσηαπό Ilias95 » 03 Μάιος 2012, 23:44

pmav99 έγραψε:
To γύρισες στη C για αυτό :P

Όχι. Στην πραγματικότητα δεν έχω χρησιμοποιήσει ποτέ else και finally σε try-except γιατί δεν είχα συνειδητοποιήσει πόσο σημαντικό είναι αυτό που λες πιο πάνω.
Ούτε σε for ή while έχω χρησιμοποιήσει ποτέ else γιατί δεν παρουσιάστηκε ανάγκη.

pmav99 έγραψε:http://mail.python.org/pipermail/tutor/2007-June/054816.html

Προφανής η απάντηση. :/

Ευχαριστώ.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι