Σελίδα 2 από 4

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

ΔημοσίευσηΔημοσιεύτηκε: 14 Ιούλ 2009, 03:02
από sokoban4ever
@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

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

ΔημοσίευσηΔημοσιεύτηκε: 14 Ιούλ 2009, 12:03
από DarkLord
@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

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

ΔημοσίευσηΔημοσιεύτηκε: 14 Ιούλ 2009, 14:21
από sokoban4ever
@DarkLord
Σωστά το λέει και ο Python interpreter
Κώδικας: Επιλογή όλων
NameError: name 'a' is not defined

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

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

ΔημοσίευσηΔημοσιεύτηκε: 14 Ιούλ 2009, 21:37
από malos
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

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

ΔημοσίευσηΔημοσιεύτηκε: 14 Ιούλ 2009, 21:47
από medigeek
Βλέπω λύθηκε το θέμα :)

malos, DarkLord, sokoban4ever: :bow:

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

ΔημοσίευσηΔημοσιεύτηκε: 14 Ιούλ 2009, 22:07
από cyberpython
@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: Προστέθηκαν μερικά σχόλια στον κώδικα

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

ΔημοσίευσηΔημοσιεύτηκε: 07 Οκτ 2009, 00:49
από demiscy
μια βοήθεια αν μπορεί κανείς...
από την σελίδα 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

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

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

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

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

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

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

δίνεις κανονικά την είσοδο σου και δουλεύει μια χαρά

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

ΔημοσίευσηΔημοσιεύτηκε: 07 Οκτ 2009, 18:26
από sokoban4ever
@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