Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

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

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό midkin » 09 Ιουν 2014, 00:10

Νέα απορία! Σε αυτό το πρόγραμμα του βιβλίου:
Κώδικας: Επιλογή όλων
name = 'Swaroop' # This is a string object
if name.startswith('Swa'):
    print('Yes, the string starts with "Swa"')
if 'a' in name:
    print('Yes, it contains the string "a"')
if name.find('war') != -1:
    print('Yes, it contains the string "war"')
delimiter = '_*_'
mylist = ['Brazil', 'Russia', 'India', 'China']
print(delimiter.join(mylist))


Δεν καταλαβαίνω το:
Κώδικας: Επιλογή όλων
if name.find('war') != -1:
    print('Yes, it contains the string "war"')


Έχω διδαχθεί ψευδογλώσσα στο λύκειο και αυτό με μπερδεύει...
Δοκίμαδα αντί για name.find('war') να το κάνω name.find('waar'), οπότε και δεν εκτύπωνε κάτι... ενώ το βιβλίο λέει πως θα έπρεπε να εκτυπώνει "-1".

Μόλις δοκίμασα το εξής:
Κώδικας: Επιλογή όλων
name = 'Nick'
if name.find('ic') != -1:
    print('yes')
else:
    print('no')


Το μόνο που συνεχίζω και δεν καταλαβαίνω γιατί συγκρίνω πάντα με την ψευδογλώσσα είναι αυτό το: != -1 ...
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό Ilias95 » 09 Ιουν 2014, 00:28

Για όποια μέθοδο δεν ξέρεις τι κάνει απλά ψάξε στο google για την τεκμηρίωση της.
Η μέθοδος find επιστρέφει την θέση που βρέθηκε ένα substring μέσα σε ένα string ή -1 αν δεν βρεθεί καθόλου.

Spoiler: show
Κώδικας: Επιλογή όλων
>>> "abc".find("a")
0
>>> "abc".find("b")
1
>>> "abc".find("bc")
1
>>> "abc".find("bcd")
-1
>>>


Οπότε το παρακάτω σημαίνει, αν βρεις το string "war" μέσα στο string name, εκτύπωσε το μήνυμα.
Κώδικας: Επιλογή όλων
if name.find('war') != -1:
    print('Yes, it contains the string "war"')


ενώ το βιβλίο λέει πως θα έπρεπε να εκτυπώνει "-1".

Δεν λέει ότι πρέπει να εκτυπώνει -1, αλλά ότι η συνάρτηση επιστρέφει -1 (δεν ξέρω αν έχεις δει ακόμα για συναρτήσεις).

Φυσικά και υπάρχει το else statement απλά συνέχισε να διαβάζεις.
Κώδικας: Επιλογή όλων
if a == 5:
    print('bla bla bla')
elif a == 7:
    print('blu blu blu')
else:
    print('ble ble ble')


Το μόνο που συνεχίζω και δεν καταλαβαίνω γιατί συγκρίνω πάντα με την ψευδογλώσσα είναι αυτό το: != -1 ...

Ο τελεστής != ελέγχει αν δύο τιμές είναι διάφορες μεταξύ τους:
Κώδικας: Επιλογή όλων
>>> 2 != 5
True
>>> 2 != 4
True
>>> 2 != 2
False
>>>
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό midkin » 09 Ιουν 2014, 00:42

Δηλαδή το:
Κώδικας: Επιλογή όλων
if name.find('war') != -1:
    print('Yes, it contains the string "war"')

Σημαίνει: Να ψάξει μέσα στο string name το "war" και ΑΝ η συνάρτηση find δεν επιστρέψει -1 (που σημαίνει πως βρήκε το "war") εκτύπωσε ένα μήνυμα...

Υπάρχει σύνταξη χωρίς το != -1 ???
κάτι που να σημαίνει: ψάξε στο name και αν βρεις το "war" εκτύπωσε κάτι; Π.χ.
Κώδικας: Επιλογή όλων
if name.find('war'):
    print('Yes, it contains the string "war"')
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό Ilias95 » 09 Ιουν 2014, 00:52

midkin έγραψε:Σημαίνει: Να ψάξει στο μέσα string name το "war" και ΑΝ η συνάρτηση find δεν επιστρέψει -1 (που σημαίνει πως βρήκε το "war") εκτύπωσε ένα μήνυμα...

Ακριβώς.

midkin έγραψε:Υπάρχει σύνταξη χωρίς το != -1 ???
Π.χ.

Κώδικας: Επιλογή όλων
if name.find('war'):
    print('Yes, it contains the string "war"')


Αυτό που έγραψες είναι ισοδύναμο με αυτό:
Κώδικας: Επιλογή όλων
if name.find('war') != 0:
    print('Yes, it contains the string "war"')


κάτι που να σημαίνει: ψάξε στο name και αν βρεις το "war" εκτύπωσε κάτι;

Μπορείς να χρησιμοποιήσεις τον in operator:
Κώδικας: Επιλογή όλων
>>> if "wst" in "Kwstas":
...     print("Yes!")
...
Yes!
>>>


PS. Απ' το βιβλίο του Swaroop διαβάζεις;
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό midkin » 09 Ιουν 2014, 00:59

αυτό:
Κώδικας: Επιλογή όλων
if name.find('war') != -1:
    print('Yes, it contains the string "war"')


δεν είναι ισοδύναμο με αυτό:
Κώδικας: Επιλογή όλων
if name.find('war'):
    print('Yes, it contains the string "war"')


Στη δεύτερη περίπτωση αν μέσα στην παρένθεση βάλεις πχ: "wafwdesaf" ΠΑΛΙ θα εκτυπώσει το μήνυμα. Δηλαδή εκτελεί την print σε κάθε περίπτωση! Άρα το != -1 χρειάζεται...

Όντως μάλλον στην περίπτωση μου το "in" είναι προτιμότερο!!!

Διαβάζω από το a_byte_of_python-el.pdf
το βρήκα εδώ:
Spoiler: show
http://lambrosbouk.wordpress.com/2012/08/18/e-book-%CE%B3%CE%B9%CE%B1-%CF%84%CE%B7%CE%BD-python-%CF%83%CF%84%CE%B1-%CE%B5%CE%BB%CE%BB%CE%B7%CE%BD%CE%B9%CE%BA%CE%AC/
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό Ilias95 » 09 Ιουν 2014, 01:12

Προφανώς δεν είναι ισοδύναμα. Με το != 0 σου είπα ότι είναι ισοδύναμα, όχι με το != 1.
Γενικά ισχύει αυτό όταν συγκρίνεις αριθμούς. Όλα τα αντικείμενα έχουν ένα boolean value.
Το:
Κώδικας: Επιλογή όλων
>>> if 5:
...     print("I'm not zero")
...
I'm not zero

είναι το ίδιο με:
Κώδικας: Επιλογή όλων
>>> if 5 != 0:
...     print("I'm not zero")
...
I'm not zero

Και προτιμούμε το 1ο συνήθως.

Προσωπικά δεν θα πρότεινα το Byte of Python για εκμάθηση της python σε κάποιον αρχάριο.
Θα ποστάρω αργότερα κάποια προτεινόμενα από μένα βιβλία/tutorials αν σε ενδιαφέρει.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Μάθημα 2 - Λίστες, λεξικά, πλειάδες και σύνολα

Δημοσίευσηαπό midkin » 09 Ιουν 2014, 01:18

Καταρχάς με την ταχύτητα που διάβαζα δεν πρόσεξα ότι είχες γράψει != 0 :P οπότε sry
Κατά δεύτερον ευχαριστώ για πολλοστή φορά για τη βοήθεια σου και την υπομονή σου!

Αν έχεις κατά νου κάποιο άλλο βιβλίο, αλλά μεταφρασμένο, θα με ενδιέφερε πολύ.
Είχα αρχίσει να διαβάζω ένα στα αγγλικά αλλά δεν μπορούσα καν να καταλάβω τα αγγλικά... Φαντάσου τα διάβαζα σε ένα φίλο αμερικάνο και μου έλεγε: " Δεν καταλαβαίνω τίποτα φίλε "

Οπότε αν έχει κάτι υπ' όψην στα ελληνικά με ενδιαφέρει πολύ ;)
Γνώσεις ⇛ Linux: Χαμηλό ┃ Προγραμματισμός: Χαμηλό ┃ Αγγλικά: Πολύ Καλά
Λειτουργικό: Laptop Lenovo G505s με Windows 8.1 / Ubuntu 14.10 & Mac OS X 10.10 μέσω VirtualBox
Προδιαγραφές ⇛ AMD A8 τετραπύρηνος │ 8 GB RAM |
Άβαταρ μέλους
midkin
babeTUX
babeTUX
 
Δημοσιεύσεις: 44
Εγγραφή: 05 Σεπ 2009, 21:14
Τοποθεσία: Κομοτηνή
Εκτύπωση

Προηγούμενη

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