# Ποιος είναι εκεί;

Εισαγωγή και Μεταβλητές

Νομίζω πως ήρθε η ώρα για ένα πραγματικά πολύπλοκο πρόβλημα. Νά 'το!

print "Halt!"

s = raw_input("Who

goes there?")

print "You may pass, ", s

Όταν εγώ έτρεξα το πρόγραμμα, εμφανίστηκαν στην οθόνη μου τα παρακάτω:

    Halt!

Who goes there? Josh

You may pass, Josh

Φυσικά όταν τρέξετε εσείς το πρόγραμμα το αποτέλεσμα στην οθόνη σας θα είναι διαφορετικό λόγω της δήλωσης στην `raw_input`. Όταν τρέξατε το πρόγραμμα (το τρέξατε, έτσι δεν είναι;), θα παρατηρήσατε ότι έπρεπε να πληκτρολογήσετε το όνομά σας και μετά να πατήσετε Enter. Ύστερα το πρόγραμμα εμφάνισε κάμποσο κείμενο ακόμα και μαζί και το όνομά σας. Αυτό είναι ένα παράδειγμα εισαγωγής. Το πρόγραμμα φτάνει σε ένα σημείο και από εκεί περιμένει τον χρήστη να εισάγει δεδομένα που θα χρησιμοποιήσει αργότερα.

Bέβαια, θα ήταν άχρηστα τα δεδομένα που θα πέρναμε από τον χρήστη αν δεν υπήρχε ένα μέρος να τα βάλουμε -σε αυτό το σημείο εμφανίζονται οι μεταβλητές. Στο παραπάνω πρόγραμμα το `s` είναι μια μεταβλητή. Οι μεταβλητές είναι σαν κουτάκια που μπορούμε να κρατήσουμε δεδομένα. Να ένα πρόγραμμα που δείχνει παραδείγματα με μεταβλητές:

a = 123.4

b23 = 'Spam'

first_name = "Bill"

b = 432

c = a + b

print "a

+ b is", c

print "first_name is", first_name

print "Sorted Parts, After Midnight or",b23

Και να τα αποτελέσματα:

    a + b is 555.4

first_name is Bill

Sorted Parts, Afte Midnight or Spam

Οι μεταβλητές κρατούν δεδομένα. Οι μεταβλητές του παραπάνω προγράμματος είναι `a`, `b32`, `first_name`, `b`και `c`. Οι βασικοί τύποι είναι κείμενο (string) και αριθμοί(numbers).

Το κείμενο είναι μια ακολουθία γραμμάτων, αριθμών και άλλων χαρακτήρων. Στο παράδειγμά μας τα `b23` και `first_name` είναι μεταβλητές που κρατούν δεδομένα κειμένου. Τα `Spam, Bill, a + b is` και `fisrt_name is` είναι το κείμενο μέσα στο πρόγραμμα. Οι χαρακτήρες περικλείονται από `"` ή `'`. Ο άλλος τύπος μεταβλητών είναι οι αριθμοί.

Ωραία. Έχουμε λοιπόν αυτά τα "κουτάκια" που λέγονται μεταβλητές και δεδομένα που μπορούν να μπαίνουν στις μεταβλητές. Ο υπολογιστής θα διαβάσει την γραμμή `first_name` = "Bill" και θα καταλάβει ``Βάλε το κείμενο `Bill` μέσα στο κουτάκι (της μεταβλητής) `first_name`''. Ύστερα, όταν δει την πρόταση `c = a + b` θα καταλάβει ``Βάλε `a + b` ή `123.4 + 432` ή `555.4` στο `c`''. Να άλλο ένα παράδειγμα με χρήση μεταβλητών:

a = 1

print a

a = a + 1

print a

a = a * 2

print a

Όπως περιμένουμε η απάντηση:

1

2

4

Aκόμη και αν είναι η ίδια μεταβλητή και στις δύο μεριές μιας σχέσης ο υπολογιστής πάλι θα την διαβάσει σαν να του λέει: ``Πρώτα βρες τα δεδομένα που θα κρατήσεις και μετά το που θα πάνε''.

Άλλο ένα πρόγραμμα προτού αποτελειώσουμε το κεφάλαιο:

    num = input("Type in a Number: ")

    str = raw_input("Type in a String: ")

    print "num =", num

    print "num is a ",type(num)

    print "num * 2 =",num*2

    print "str =", str

    print "str is a ",type(str)

    print "str * 2 =",str*2

H απάντηση που εμφανίστηκε σε εμένα:

    Type in a Number: 12.34

    Type in a String: Hello

    num = 12.34

    num is a  <type 'float'>

    num * 2 = 24.68

    str = Hello

    str is a  <type 'string'>

    str * 2 = HelloHello

Προσέξτε ότι το `num` συντάσσεται με `input` ενώ το `str` με `raw_input`. Το

`raw_input` επιστρέφει ένα κείμενο ενώ το `input` επιστρέφει έναν αριθμό. Όταν θέλετε ο χρήστης να πληκτρολογήσει έναν αριθμό χρησιμοποιήστε `input` ενώ αν περιμένετε από αυτόν κείμενο, χρησιμοποιήστε `raw_input`.

Το δεύτερο μισό του προγράμματος χρησιμοποιεί την έκφραση `type` για να περιγράψει τον τύπο της μεταβλητής. Οι αριθμοί είναι του τύπου `int` ή `float` (που είναι συντμήσεις των integer -ακέραιος- και floating point -κινητής υποδιαστολής- αντίστοιχα). Το κείμενο είναι τύπου `string`. Οι ακέραιοι και οι αριθμοί κινητής υποδιαστολής μπορούν να χρησιμοποιηθούν σε μαθηματικές συναρτήσεις ενώ αντίθετα το κείμενο όχι. Θα παρατηρήσετε πως όταν η python πολλαπλασιάζει ένα κείμενο επί έναν ακέραιο το ευκταίο επιτυγχάνεται. Ωστόσο όταν ένα κείμενο πολλαπλασιάζεται επί έναν ακέραιο, τότε αυτό αποκτά τόσα αντίγραφα του εαυτού του. πχ: `str * 2 = HelloHello` .

# Παραδείγματα

Rate_times.py

    #This programs calculates rate and distance problems

    print "Input a rate and a distance"

    rate = input("Rate:")

    distance = input("Distance:")

    print "Time:",distance/rate

Τρέχοντας το πρόγραμμα με δοκιμαστικές τιμές:

    > python rate_times.py

    Input a rate and a distance

    Rate:5

    Distance:10

    Time: 2

    > python rate_times.py

    Input a rate and a distance

    Rate:3.52

    Distance:45.6

    Time: 12.9545454545

Area.py

    #This program calculates the perimeter and area of a rectangle

    print "Calculate information about a rectangle"

    length = input("Length:")

    width = input("Width:")

    print "Area",length*width

    print "Perimeter",2*length+2*width

Τρέχοντας το πρόγραμμα με δοκιμαστικές τιμές:

    > python area.py

    Calculate information about a rectangle

    Length:4

    Width:3

    Area 12

    Perimeter 14

    > python area.py

    Calculate information about a rectangle

    Length:2.53

    Width:5.2

    Area 13.156

    Perimeter 15.46

temperature.py

    #Converts Fahrenheit to Celsius

    temp = input("Farenheit temperature:")

    print (temp-32.0)*5.0/9.0

Τρέχοντας το πρόγραμμα με δοκιμαστικές τιμές:

    > python temperature.py

    Farenheit temperature:32

    0.0

    > python temperature.py

    Farenheit temperature:-40

    -40.0

    > python temperature.py

    Farenheit temperature:212

    100.0

    > python temperature.py

    Farenheit temperature:98.6

    37.0

# Ασκήσεις

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