Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

...ασύγχρονα μαθήματα python

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό sokoban4ever » 14 Ιούλ 2009, 03:02

@malos
Μπορείς και να αποδόσεις default τιμές -άκα (f=0,g=100) -( "προεπιλεγμένες") σε περίπτωση που θα καλέσεις μια συνάρτηση χωρίς παραμέτρους αυτή να έχει τουλάχιστον κάποια τιμή και να μην σου πετάει TypeError

Κώδικας: Επιλογή όλων
>>> def lol(f=0,g=100):
...     return f,g


Κώδικας: Επιλογή όλων
>>> lol()
(0, 100)


Εδώ η συνάρτηση καλέστηκε σκέτη και είχε τιμές από πρίν οπότε αυτές μας έδωσε
προφανώς μας επιτρέπει να βάλουμε και τις δικές μας
Κώδικας: Επιλογή όλων
>>> lol(11,22)
(11, 22)


Χωρίς την προ-απόδοση τιμή στις παραμέτρους θα μας έλεγε:

Κώδικας: Επιλογή όλων
>>> lol()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: lol() takes exactly 2 arguments (0 given)


:P
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό DarkLord » 14 Ιούλ 2009, 12:03

@malos
πιστεύω ότι σε κάλυψε ο cyberpython τα περιέγραψε πολύ καλά
όσο για το κώδικά που σου είχα δώσει
malos έγραψε:Ευχαριστώ για τις απαντήσεις.
Έχω όμως ακόμα απορία. Αν δεν βαριέστε ( δε βαριέστε ε; :D ) σας παρακαλώ κάντε ακόμα ένα κόπο.

Κατ' αρχάς να πω ότι δεν μου δούλεψε ο κώδικάς σου DarkLord !

Κώδικας: Επιλογή όλων
pal@malos:~$ ~/fro
Traceback (most recent call last):
File "/home/pal/fro", line 3, in <module>
lista = [a, b, c, d, e, f]
NameError: name 'a' is not defined



Το έκανα και με 4 κενά όπως είπε ο δάσκαλός.

Κώδικας: Επιλογή όλων
#!/usr/bin/python3


lista = [a,b,c,d,e,f]

def sinartisi(obgect):
for i in obgect:
print (i)
else:
print('Ο βρόχος loop τερματίστηκε')

sinartisi(lista)

έχω την εντύπωση ότι δεν έχεις ορίσει τις τιμές
malos έγραψε:a = 5
b = 15
c = 25
d = 35
e = 45
f = 55
DarkLord
babeTUX
babeTUX
 
Δημοσιεύσεις: 81
Εγγραφή: 24 Ιαν 2009, 15:26
Τοποθεσία: Karvasaras
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό sokoban4ever » 14 Ιούλ 2009, 14:21

@DarkLord
Σωστά το λέει και ο Python interpreter
Κώδικας: Επιλογή όλων
NameError: name 'a' is not defined

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

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό malos » 14 Ιούλ 2009, 21:37

cyberpython έγραψε:
Άρα ως παραμέτρους στην Python μπορείς να ορίσεις οποιοδήποτε τύπο αντικειμένου θέλεις, αλλά την πραγματική παράμετρο (π.χ. αριθμητική τιμή) την καθορίζεις όταν καλείς τη συνάρτηση και όχι όταν την ορίζεις.


Ευχαριστώ ! Σα να είμαι καλύτερος από χθες. Βλέποντας τον πρώτο σου κώδικα ( στο post σου) ....... είπα να κάνω
αυτό :
Κώδικας: Επιλογή όλων
#!/usr/bin/env python3


def f(a,b):
    c = a + b
   
    print("Το άθροισμα είναι:", c)
x = input("Δώσε :")
y = input("πάλι :")
   
f(x, y)


Έβαζα όταν μου το ζήταγε το πρόγραμμα :
για χ το 3 και για y το 6 !!!! Μου έβγαζε το 36 :wtf: αντί του 9 που περίμενα ! Λέω γιατί αυτουνού (εσένα) του το κάνει άθροισμα ρε γ***** ; Μετά κατάλαβα ότι έτσι πως είναι ο κώδικάς μου ... μπορώ για χ να βάλω και το Σάκης και για y το Ρουβάς . Εσένα στα έκανε άθροισμα επειδή ακριβώς .... είχες αριθμούς. Το 12 και το 4. Ενώ το χ και το y που είχα εγώ το έπαιρνε ως συμβολοσειρά. Το διόρθωσα λοιπόν έτσι :
Κώδικας: Επιλογή όλων
#!/usr/bin/env python3


def f(a,b):
    c = int(a) + int(b)
   
    print("Το άθροισμα είναι:", c)
x = input("Δώσε :")
y = input("πάλι :")
   
f(x, y)


Έβαλα το int λοιπόν και τα δούλεψε ως πρόσθεση τα x και y στη γραμμή
Κώδικας: Επιλογή όλων
c = a + b


.......... έφαγα μια ώρα να καταλάβω το post σου (δεν είχα διαβάσει τη τελευταία γραμμή).
.......... Πάω τώρα να διαβάσω και των άλλων :D :D :D :D
Δεν θέλω να πω τι μηχανήματα έχω. Είναι προσωπικά δεδομένα ΕΝΤΑΞΕΙ ; !!!
Άβαταρ μέλους
malos
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 1128
Εγγραφή: 02 Νοέμ 2008, 12:00
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό medigeek » 14 Ιούλ 2009, 21:47

Βλέπω λύθηκε το θέμα :)

malos, DarkLord, sokoban4ever: :bow:
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό cyberpython » 14 Ιούλ 2009, 22:07

@malos: Επίσης μόλις διάβασα οτι αυτό που ήθελες να κάνεις αρχικά είναι να φτιάξεις το δικό σου αντίστοιχο της range(x), αλλά να ξεκινά από ένα δικό σου αριθμό και να αυξάνει με βήμα που καθορίζεις εσύ μέχρι να φτάσει ένα άνω(ή κάτω) όριο. Αυτό μπορείς να το κάνεις εύκολα με μία συνάρτηση που επιστρέφει μία λίστα. Για την κατασκευή της λίστας κάνεις μία επαναληπτική διαδικασία και κάθε φορά προσθέτεις ένα στοιχείο στη λίστα μέχρι να φτάσεις το όριο:
Κώδικας: Επιλογή όλων
#!/usr/bin/env python3

def myrange(start, end, step): #start=αρχή, end=τέλος, step=βήμα
   result = []   

   if(step>0): #το βήμα είναι θετικό άρα έχουμε άνω όριο
      current = start # η μεταβλητή current κρατά την τρέχουσα τιμή και κάθε φορά αυξάνεται κατά το βήμα - στην αρχή παίρνει την πρώτη τιμή
      while(current<end): #ελέγχουμε αν ξεπεράσαμε το άνω όριο
         result.append(current) # προσθέτουμε στη λίστα την τρέχουσα τιμή
         current = current + step # αυξάνουμε την τρέχουσα τιμή
   elif(step<0): #το βήμα είναι αρμητικό άρα έχουμε κάτω όριο
      current = start
      while(current>end):
         result.append(current)
         current = current + step #Το βήμα είναι αρνητικό οπότε προσθέτοντάς το μειώνεται η τρέχουσα τιμή
         
   return result    #επιστρέφουμε τη λίστα-αποτέλεσμα
         #αν το βήμα ήταν 0 δεν κάναμε τίποτα άρα θα επιστρέψουμε μία άδεια λίστα

li = myrange(5,60,10)
print(li)



Edit: Προστέθηκαν μερικά σχόλια στον κώδικα
Κοινότητα ΕΛ/ΛΑΚ Οικονομικού Πανεπιστημίου Αθηνών / Ubuntu-gr / My Web Log
Επίπεδο Γνώσεων Linux: Μέτριο, Προγραμματισμός: Ναι, Aγγλικά: Καλά
Λειτουργικό : Ubuntu 10.04 - 32bits
Η/Υ : Intel Core2 4400@2 GHz / 2GB DDR2 RAM / GeForce 8400 GS 512MB / Creative SB Audigy SE
Άβαταρ μέλους
cyberpython
seniorTUX
seniorTUX
 
Δημοσιεύσεις: 733
Εγγραφή: 14 Μάιος 2008, 13:22
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό demiscy » 07 Οκτ 2009, 00:49

μια βοήθεια αν μπορεί κανείς...
από την σελίδα 36 του pdf προσπαθώ να τρέξω τον κώδικα αυτό:
Κώδικας: Επιλογή όλων
while True:
    s = (input('Enter something : '))
    if s == 'quit':
        break
    print('Length of the string is', len(s))
print('Done')

και μου βγάζει αυτό:
Κώδικας: Επιλογή όλων
Enter something : aaaaaaaaaaaaa
Traceback (most recent call last):
  File "breakstat.py", line 2, in <module>
    s = (input('Enter something : '))
  File "<string>", line 1, in <module>
NameError: name 'aaaaaaaaaaaaa' is not defined
demiscy
babeTUX
babeTUX
 
Δημοσιεύσεις: 34
Εγγραφή: 08 Δεκ 2008, 13:44
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό sokoban4ever » 07 Οκτ 2009, 01:54

@demiscy
βγάλε την παρένθεση πριν και μετά την input
κάνε το έτσι :
Κώδικας: Επιλογή όλων
>>> while True:
...     s = input('Enter something : ')
...     if s == 'quit':
...         break
...     print('Length of the string is', len(s))
...     print('Done')
...
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό demiscy » 07 Οκτ 2009, 16:03

@sokoban4ever ευχαριστώ αλλά βρήκα λύση στο πρόβλημα και δεν ήταν η παρένθεση γιατί το δοκίμασα και αυτό...με λίγο ψάξιμο μέσω google κατάλαβα αυτό:
όταν δίνεις
Κώδικας: Επιλογή όλων
s = input('Enter something : ')

τότε χρειάζεται στη είσοδο να βάζεις ' ' για να την δεκτεί
Κώδικας: Επιλογή όλων
Enter something : 'aaaaaaaaaaaaa'

αν όμως δίνεις
Κώδικας: Επιλογή όλων
s = raw_input('Enter something : ')

δίνεις κανονικά την είσοδο σου και δουλεύει μια χαρά
demiscy
babeTUX
babeTUX
 
Δημοσιεύσεις: 34
Εγγραφή: 08 Δεκ 2008, 13:44
Εκτύπωση

Re: Μάθημα 3 - Έλεγχος ροής και συναρτήσεις

Δημοσίευσηαπό sokoban4ever » 07 Οκτ 2009, 18:26

@demiscy
παρακαλώ :)
Σωστή παρατήρηση για τα quotes ' ' :thumbup:
Αναφερόμουν στην python 3
όπου δουλεύει μια χαρά καθώς το input() φροντίζει να τα κάνει όλα inputs σε strings
όμως το raw_input() δεν υπάρχει στην python 3 όλα τα κάνει το input()
Στην python 2.χχ το input δεν αλλάζει τον τύπο δεδομένων που δέχεται έπρεπε ο χρήστης να είναι προσεκτικός αλλιώς
o προγραμματιστής έπρεπε να είναι προσεχτικός και να κάνει σωστό casting στις μεταβλητέ ώστε να μην πετάξει runtime error
(για αυτό υπήρχε το raw_input())
προφανώς δούλευες σε python 2.XX

πχ
παράδειγμα στην python 2.6
Κώδικας: Επιλογή όλων
>>> while True:
...     s= input('Dwse ')
...     if s == 'q':
...             break
...     print (type(s))
...
Dwse 1
<type 'int'>
Dwse 2
<type 'int'>
Dwse 'a'
<type 'str'>
Dwse (1,2)
<type 'tuple'>
Dwse [1,2]
<type 'list'>
Dwse 'q'

και παράδειγμα στην python 3

Κώδικας: Επιλογή όλων
>>> while True:
...     s =input('Dwse ')
...     if s == 'q':
...             break
...     print (type(s))
...
Dwse 1
<class 'str'>
Dwse 2
<class 'str'>
Dwse 'a'
<class 'str'>
Dwse a
<class 'str'>
Dwse (1,2)
<class 'str'>
Dwse [1,2]
<class 'str'>
Dwse q
Θέλουμε και μπορούμε να έχουμε μια καλύτερη ζωή και όσο θα ζούμε θα προσπαθούμε να την αποκτήσουμε ακόμα και αν πεθάνουμε προσπαθώντας, και αν κάποια στιγμή λιγίσουμε έχουμε το επίπεδο να πούμε κουράστηκα λίγο να ,να ξαποστάσουμε , ώστε να συνεχίσουμε πάλι δυνατοί ξανά.

Μήνυμα με αγάπη και αληλλεγγύη σε όλους τους ανθρώπους από όλους τους λαούς , ιδίως του Ελληνικού.
Άβαταρ μέλους
sokoban4ever
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 2331
Εγγραφή: 13 Φεβ 2009, 02:22
Εκτύπωση

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

Επιστροφή στο Μαθήματα python