range()
Η εντολή range(n,m)
δημιουργεί μία ακολουθία ακεραίων από τον n έως τον m-1.
>>> range(1,10)
range(1, 10)
Μπορούμε να δημιουργήσουμε μία λίστα που περιέχει την ακολουθία αριθμών την οποία παράγει η range
:
>>> list(range(1,10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Αν παραλείψουμε το πρώτο όρισμα τότε αυτό θεωρείται ότι είναι το 0.
>>> list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Η γενική μορφή της συνάρτησης είναι range(start,end,step)
και κατασκευάζει
την αριθμητική πρόοδο start, start+step, start+2*step,...,start+n*step
.
Δηλαδή, ως τρίτο όρισμα βάζουμε το βήμα για την ακολουθία των παραγόμενων αριθμών.
>>> list(range(0,10,2))
[0, 2, 4, 6, 8]
Ειδικότερα,
step>0
τότε στην παραπάνω ακολουθία ο start+n*step
είναι ο μεγαλύτερος ακέραιος μικρότερος από τον end
.step<0
τότε ο start+n*step
είναι ο μικρότερος ακέραιος μεγαλύτερος από τον end
.start
παραληφθεί τότε start=0
.
Αν το step
παραληφθεί τότε step=1
.
Έχουμε χρησιμοποιήσει ορισμένες φορές ανακύκλωση όπου μία μεταβλητή (μετρητής) παίρνει τιμές από μια ακολουθία ακεραίων (δηλαδή, παίρνει διαδοχικές διαφορετικές ακέραιες τιμές).
Η εντολή for
μπορεί να χρησιμοποιηθεί για να σαρώσουμε επαναληπτικά μία ακολουθία ακεραίων (η μία οποιαδήποτε ακολουθία) οι οποίοι μπορούν να παράγονται από την range
.
Για παράδειγμα, μπορούμε να τυπώσουμε τα τετράγωνα των ακεραίων από το 1 έως το 10.
for i in range(1,11):
print('The square of', i, 'is', i**2)
Η μεταβλητή i
που εμφανίζεται μετά τη λέξη-κλειδί for
λαμβάνει διαδοχικά τις τιμές της ακολουθίας range(1,11)
και η εντολή print(i)
εκτελείται σε κάθε επανάληψη.
Η διαδικασία επαναλαμβάνεται μέχρι να εξαντληθούν οι τιμές της ακολουθίας.
Το συντακτικό της εντολής for
είναι
for variable in sequence:
statements
Ο τελεστής in
δίνει στη μεταβλητή variable της τιμές που περιέχονται στην ακολουθία sequence με σειριακό τρόπο (την μία μετά την άλλη).
Οι εντολές statements εκτελούνται για κάθε τιμή της variable και η διαδικασία επαναλαμβάνεται μέχρι να εξαντληθούν οι τιμές της ακολουθίας.
Εάν θελήσουμε να τερματήσουμε πρόωρα την ανακύκλωση μπορούμε να το κάνουμε με την εντολή break
(όπως είδαμε και στην while
).
pc = int(input("Give an integer: "))
for x in range(0,pc+1):
if x**3 == abs(pc):
print("The cubic root of",pc,"is",x)
break
Μία βελτίωση του παραπάνω προγράμματος είναι η ακόλουθη (σκεφτείτε γιατί αυτό μπορεί να θεωρηθεί βελτίωση).
pc = int(input("Give an integer: "))
for x in range(0,abs(pc)+1):
if x**3 >= abs(pc):
break
if x**3 != abs(pc):
print(pc,"is not a perfect cube")
else:
if pc < 0:
x = -x
print("The cubic root of",pc,"is",x)
for
μπορούμε να δημιουργήσουμε μία λίστα.
Για παράδειγμα, δημιουργούμε την λίστα [0,1,2,...99] ως εξής.
L = []
for i in range(100):
L.append(i)
L = [i for i in range(100)]
Ο πρώτος τρόπος προκύπτει από όσα έχουμε ήδη δει.
L = [1,2,3,4,5,6,8,9]
sumL = 0
for i in range(len(L)):
sumL += L[i]
print(sumL)
Ο δεύτερος τρόπος χρησιμοποιεί το γεγονός ότι η for
μπορεί να διατρέξει μία οποιαδήποτε ακολουθία (π.χ., μία λίστα) με την βοήθεια του τελεστή in
.
L = [1,2,3,4,5,6,8,9]
sumL = 0
for num in L:
sumL += num
print(sumL)
n = len(L)
flag = True
for i in range(0,n//2):
if L[i] != L[n-i-1]:
flag = False
break
print(flag)
Οι παρακάτω παρατηρήσεις θα μας βοηθήσουν να κατανοήσουμε το παραπάνω πρόγραμμα.
L[i]
) είναι ίδιο με αυτό που βρίσκεται
i θέσεις πριν το τελευταίο (δηλαδή, το L[n-1-i]
).n//2
) αφού πάντα κάνουμε συγκρίσεις ενός στοιχείου στο πρώτο μισό με στοιχείο στο δεύτερο μισό της λίστας.
Αν η λίστα έχει περιττό αριθμό στοιχείων δεν χρειάζεται να γίνει έλεγχος στο μεσαίο στοιχείο.
flag
η οποία παίρνει την τιμή False
αν έστω και δύο αντίστοιχα γράμματα δεν είναι ίδια.
Η flag
διετηρεί την αρχική τιμή της True
αν ποτέ δεν πάρει την τιμή False
εντός του for
.
reverse
;
colors
, θα αφαιρέσουμε τα χρώματα που δεν μας αρέσουν και θα προσθέσουμε ορισμένα που μας αρέσουν.
colors = ['red','green','blue','cyan','magenta','yellow','black']
colors1 = colors[:]
for c in colors1:
yesno = input("Should I keep " + c + "? (y/n) ")
if yesno == 'n': colors.remove(c)
while True:
newColor = input("Should I add a new color? (color/n) ")
if newColor != 'n':
colors.append(newColor)
else:
break
print("Your new list of colors is\n",colors)
Οι μεταβλητές τύπου string είναι ακολουθίες χαρακτήρων και μπορούμε να γράψουμε εντολές ανακύκλωσης που σαρώνουν τους χαρακτήρες μιας ακολουθίας χαρακτήρων.
Θα χρησιμοποιήσουμε την for
για να διατρέξουμε την ακολουθία χαρακτήρων (συμβολοσειρά) με την βοήθεια του τελεστή in
.
s = 'Nick Papadakis'
for c in s:
print(c)
Μπορούμε να πετύχουμε το ίδιο αποτέλεσμα αν διατρέξουμε την συμβολοσειρά χρησιμοποιώντας τους δείκτες για την θέση των χαρακτήρων.
s = 'Nick Papadakis'
for i in range(len(s)):
print('The',i,'th character is',s[i])
for
.
L1 = [1,2,3,4,5,6]
L2 = [5,6,7,8,9]
flag = False
for e1 in L1:
for e2 in L2:
if e1 == e2:
flag = True
break
if flag:
print('Yes')
else:
print('No')
Η python μας προσφέρει έναν απλό τρόπο για να ελέγχουμε αν ένα στοιχείο υπάρχει σε μία λίστα. Γράφουμε για στοιχείο e
σε λίστα L
την έκφραση: e in L
. Η έκφραση αυτή παίρνει τις τιμές True, False
.
Το προηγούμενο πρόγραμμα γράφεται με απλούστερο τρόπο ως εξής:
L1 = [1,2,3,4,5,6]
L2 = [5,6,7,8,9]
flag = False
for e in L1:
if e in L2:
flag = True
break
if flag:
print('Yes')
else:
print('No')
for
.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for i in range(len(matrix)):
for j in range(len(matrix[i])):
print('L[', i, ',', j,'] =', matrix[i][j])
import math
m = 20
counter = 0
for a in range(1,m+1):
for b in range(a+1,m+1):
c2 = a**2 + b**2
c = math.sqrt(c2)
if int(c) == c:
counter += 1
c = int(c)
print(a,b,c)
print("I found",counter,"Pythagorean triads")