Ερωτηματολόγιο προγραμματισμού Python

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

Revision:

0.11

Date:

2009-07-12

Author:

Savvas Radevic <vicedar@gmail.com>

Copyright:

© 2009 Savvas Radevic <vicedar@gmail.com>, © 2009 python-gr group <python-gr@googlegroups.com>

Credits:

CREDITS.html

License:

GNU FDL 1.3 <http://www.gnu.org/licenses/fdl-1.3.txt>

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. A copy of the license is included in the file entitled "COPYING-DOCS.txt".

Source:

02-lists-questions.tar.gz

PDF:

02-lists-questions.pdf

Περιεχόμενα




Γλωσσάρι λέξεων

Ελληνικά English
Αντικείμενο / Στοιχείο / Στοιχείο δεδομένων Item
Λίστα / Πίνακας List
Λεξικό Dictionary
Πλειάδα Tuple
Aύξων αριθμός Index number
Δυαδικοί τελεστές Bitwise operators

Σημειώσεις

«Μυστικές» μεθόδοι

Για να δείτε ποιες... «κρυμμένες» μεθόδους σας προσφέρει το κάθε object (εντολή, μεταβλητή, λίστα, πλειάδα, λεξικό, σύνολο, κτλ.) εκτελέστε το με το dir().

$ python3
Python 3.0.1+ (r301:69556, Apr 15 2009, 17:25:52)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> dir(join())
...
>>> a = 0
>>> dir(a)
...
>>> lista = [0, 1, 2, 3, 4]
>>> dir(lista)
...
>>> sinolo = set(range(1,9))
>>> dir(sinolo)
...
>>> dir('string')
...

Κοιτάξτε τα αποτέλεσματα του παραδείγματος στο http://pastebin.ubuntu-gr.org/f61118288

Τις μεθόδους μπορείτε να τις χρησιμοποιήσετε με το object που σας ενδιαφέρει αφού τα συνδέσετε με τελεία. Για παράδειγμα παίρνουμε ένα σύνολο: http://pastebin.ubuntu-gr.org/f7913befe

$ python3
Python 3.0.1+ (r301:69556, Apr 15 2009, 17:25:52)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> sinolo = set(range(1,9))
>>> sinolo
{1, 2, 3, 4, 5, 6, 7, 8}
>>> dir(sinolo)
['__and__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
>>> # Μάλιστα, τώρα γνωρίζουμε τι μεθόδους έχει το κάθε σύνολο!
>>> # Χμ.. για να δούμε πώς λειτουργεί το issuperset()
...
>>> sinolo.issuperset(set(range(3,5)))
True
>>> # Ωραία, δίνει True / False αν είναι υπερσύνολο!!
...
>>> help(set.issuperset)
Help on method_descriptor:

issuperset(...)
    Report whether this set contains another set.

(Πιέστε "q" για να βγείτε από το help())

Εισαγωγή

  1. Οι απαντήσεις θα δοθούν στο τέλος της βδομάδας (δε θα διορθώνονται!).
  2. Στο μεταξύ δικαιούστε να δίνετε τις απαντήσεις στο κατάλληλο θέμα του φόρουμ, βοηθώντας ο ένας τον άλλο.
  3. Προσωπικά, δεν έχω πρόβλημα αν αντιγράφετε ο ένας από τον άλλο!

Ασκήσεις

Λίστες (και εν μέρει πλειάδες)

  1. Θέστε μια λίστα ως μεταβλητή με το όνομα lista.

    Η μεταβλητή να περιέχει τα ακόλουθα στοιχεία:

    • 'Μαρία'
    • 'Κώστας'
    • 'Αντώνης'
    • 1 (ως αριθμό)
    • Την πράξη: 2 επί 3 (ως μαθηματική πράξη, όχι τον αριθμό 6 κατ' ευθείαν)
  1. Πώς θα καλέσετε το στοιχείο δεδομένων με αύξων αριθμό 1 από την παραπάνω λίστα;

  2. Αναφέρετε την εντολή ούτως ώστε να εμφανίσετε/εκτυπώσετε στην οθόνη το στοιχείο με αύξων αριθμό 2.

  3. Ποια εντολή θα χρησιμοποιήσετε για να εκτυπώσετε σε μια γραμμή το πρώτο και τρίτο στοιχείο και την λέξη 'και' ενδιάμεσα, ούτως ώστε να εμφανιστεί ως ακολούθως:

    Μαρία και Αντώνης

  1. Χρησιμοποιώντας τον αύξων αριθμό των αντικειμένων/στοιχείων της λίστας lista (π.χ. lista[1]), δημιουργήστε μια καινούργια λίστα:

    α. Ως μεταβλητή lista3a με τα δύο πρώτα στοιχεία της λίστας lista (ξεχωριστά στοιχεία, όχι υπο-λίστα).

    β. Ως μεταβλητή lista3b με το τελευταίο στοιχείο της λίστας lista (ΧΩΡΙΣ να χρησιμοποιήσετε lista[4]!)

    Σημείωση: Μπορώ να σκεφτώ 2 τρόπους χωρίς το lista[4], εσείς; :)

    γ. Ως μεταβλητή lista3c με τα ακόλουθα στοιχεία:

    • Ως υπο-λίστα το πρώτο και δεύτερο στοιχείο της λίστας lista. Χρησιμοποιήστε το lista[x:y] όπου x και y να είναι οι αύξων αριθμοί που χρειάζονται.
    • Ως υπο-λίστα την λίστα lista3a.
  1. Χρησιμοποιώντας αντικείμενα με τον αύξων αριθμό τους (index number) της λίστας lista, δημιουργήστε μια καινούργια λίστα:

    α. Ως μεταβλητή lista4a με το προτελευταίο στοιχείο της λίστας lista (βοήθεια: αρνητικοί αριθμοί).

    β. Ως μεταβλητή lista4b με τα στοιχεία από το πρώτο μέχρι το προτελευταίο (βοήθεια: ερώτηση 5γ).

  1. Φτιάξτε καινούργια λίστα-αντίγραφο της λίστας lista. Όνομάστε την lista7.

    α. Αναφέρετε την εντολή με την οποία μπορείτε να αλλάξετε/αντικαταστήσετε το τέταρτο στοιχείο της λίστας lista7 (δλδ το στοιχείο με τον αριθμό 1).

    β. Μετατρέψτε και αντικαταστήστε το τέταρτο στοιχείο της λίστας lista7, προσθέστε στην τιμή του +5 (αναφέροντας την μαθηματική πράξη στην εντολή, όχι τον αριθμό 6 κατ' ευθείαν).

  1. Ποια εντολή θα χρησιμοποιήσετε για να δείτε το "μέγεθος" (τον αριθμό των αντικειμένων) της λίστας lista;
  1. Αναφέρετε τρόπο με τον οποίο μπορείτε να καθαρίσετε μια λίστα (δλδ. να σβήσετε όλα τα στοιχεία).
  1. Φτιάξτε μια λίστα ως μεταβλητή lista10:

    lista10 = [1, 2, 3, 4, 5]
    
    

    Ακολούθως:

    α. προσθέστε στη λίστα lista10 μια υπο-λίστα που να περιέχει τα ακόλουθα στοιχεία:

    • 100
    • 200

    β. καλέστε τον αριθμό 100 ως στοιχείο της λίστας lista10.

    γ. Φτιάξτε μια πλειάδα-αντίγραφο της λίστας lista10. Ονομάστε την πλειάδα pleiada10. (βοήθεια: tuple())

  1. Έχουμε την ακόλουθη λίστα:

    #            0         1           2           3           4
    lista11 = ['μήλα', 'αχλάδια', 'αγγούρια', 'μπανάνες', 'κιτρόμηλα']
    
    

    Σημείωση: Για κάθε υπο-ερώτηση που ακολουθεί χρησιμοποιείστε τη λίστα που δημιουργήσατε από το προηγούμενο μέρος της άσκησης, όχι την αρχική lista11! Δηλαδή παίρνετε τη λίστα-αποτέλεσμα που φτιάξατε στο μέρος (α) και την χρησιμοποιείτε στο μέρος (β).

α. χρησιμοποιώντας το lista11.insert(), προσθέστε ΜΕΤΑ τις 'μπανάνες' ένα ΝΕΟ στοιχείο: 'ντομάτες'

β. χρησιμοποιώντας το lista11[0:1] = ... και το lista11[0], προσθέστε ΠΡΙΝ το πρώτο στοιχείο ('μήλα') ένα ΝΕΟ στοιχείο: 'πατάτες'

γ. χρησιμοποιώντας το lista11[-2::] = ... και το lista11[-1], προσθέστε στο ΤΕΛΟΣ (δλδ. σαν τελευταίο στοιχείο) ένα ΝΕΟ στοιχείο: 'κεράσια'

δ. χρησιμοποιώντας το lista11.pop(), αφαιρέστε τα 'κεράσια'.

ε. αφαιρέστε τα στοιχεία που είναι φρούτα, με μια ή περισσότερες εντολές (βοήθεια: Η ντομάτα είναι φρούτο)

  1. Έχουμε την ακόλουθη αριθμητική σειρά:

    0, 13, 4, 26, 8, 39, ...

    lista12 = [0, 13, 4, 26, 8, 39]
    
    

    α. βρέστε ποιος είναι ο επόμενος αριθμός.

    Σημείωση: Είναι ερώτηση λογικής! Δε χρειάζεται κώδικας / αλγόριθμος, απλώς λίγη σκέψη.. :)

    β. προσθέστε τον αριθμό από το μέρος (α) χρησιμοποιώντας το lista12.append().

Λεξικά

  1. Φτιάξτε ένα λεξικό:

    leksiko = {
            'Όνομα'     : 'Savvas',
            'Επίθετο'   : 'Radevic',
            'Πόλη'      : 'Λευκωσία',
            1           : 'Αριθμός!'
    }
    
    

    α. Εκτυπώστε με την εντολή print() ένα οποιοδήποτε κείμενο με τα παραπάνω στοιχεία χρησιμοποιώντας leksiko['Όνομα'] για το όνομα, leksiko['Επίθετο'] για το επίθετο και leksiko['Πόλη'] για την πόλη.

    β. Φτιάξτε λεξικό-αντίγραφο του leksiko, θέστε το ως leksiko2 και αφαιρέστε τα αντικείμενα 'Πόλη' και 1 από το leksiko2.

    γ. Προσθέστε το αντικείμενο 'Ζώδιο' με την τιμή 'Ζυγός'.

    δ. Πώς θα ελέγξετε αν το 'Ζώδιο' είναι αντικείμενο του λεξικού leksiko;

    ε. Αντικαταστήστε την τιμή του αντικειμένου 'Πόλη', από 'Λευκωσία' σε 'Βελιγράδι', στο λεξικό leksiko.

    στ. Δημιουργήστε μια λίστα lista_leksiko με τα στοιχεία 'Όνομα' και 'Επίθετο'.

Σύνολα

  1. Έχουμε την ακόλουθη λίστα:

    #              0         1           2           3           4
    lista_set = ['μήλα', 'αχλάδια', 'αγγούρια', 'μπανάνες', 'κιτρόμηλα']
    
    

    Δημιουργήστε ένα σύνολο fruit με την εντολή set() από την lista_set.

  1. Δημιουργήστε τα σύνολα numbers_negative (αριθμοί από -10 μέχρι 0) και numbers_positive (αριθμοί από 0 μέχρι 10):

    numbers_negative = set(range(-10,1))
    numbers_positive = set(range(0,11))
    
    

    α. Δημιουργήστε το σύνολο numbers_superset, το οποίο είναι υπερσύνολο των συνόλων numbers_negative και numbers_positive. (βοήθεια: χρησιμοποιήστε ένα από τους bitwise operators, που σημαίνει ότι το στοιχείο ανήκει είτε στο πρώτο είτε στο δεύτερο σύνολο)

    β. Δημιουργήστε το σύνολο numbers_common, στο οποίο βρίσκονται αριθμοί που ανήκουν και στα δύο σύνολα, numbers_negative και numbers_positive. (βοήθεια: χρησιμοποιήστε ένα από τους bitwise operators)

    γ. Δημιουργήστε ένα σύνολο numbers_subset:

    numbers_subset = set(range(1,2))
    
    

    Πώς θα ελέγξετε αν το numbers_subset είναι υποσύνολο του numbers_positive;