Skip to content
Shop

Loops

In this lesson you will learn how to repeat instructions

Jessica
Junior Developer

What is a loop?

A loop is a statement that tells the computer to repeat some code. There are two main types of loops in programming, the for loop and the while loop.

For Loop

A for loop tells the computer to repeat instructions until a condition is met, like until a counter reaches a certain number, until you reach the last item in a list, or until you go through a whole dictionary.

In count.py below, we tell the computer to keep printing numbers in the range of 0 to 60 until we get to 60. In names_list_loop.py, the for loop prints every name in the list until we reach the end of the list. In words_dict_loop.py we do something similar with a dictionary.

Python has a function called range() that creates a collection of numbers in a given range, for example, between 1 and 10.

python
for i in range(0,60):
    print(i)
python
t = 0
for i in range(0,100):
	t+=1
	print(t)
python
names = ['robert','susan','joe','cynthia']
for name in names:
	print(name)
python
words = {
	'a': 'first letter', 
	'b': 'second letter', 
	'c': 'third letter'
}

for k,v in enumerate(words.values()):
	print(k,v)

While Loop

Unlike the for loop, a while loop keeps doing something as long as a condition is met.

Imagine you need a timer in your program. In timer.py, we create a variable named timer and set its value to 0. This is where the timer starts. Then, as long as the timer is less than 300, the loop keeps printing the timer value. Once it hits 300 or more, the loop stops.

python
timer = 0
while timer < 300:
    timer = timer + 1
    print(timer)

In the code above, timer will be printed as long as it is less than 300, once it is greater than or equal to 300, it will stop printing.

To make sure the loop stops at some point, we need to make sure the loop condition changes eventually. Otherwise, it'll keep repeating forever and the program will get stuck! That's why in most while loops, you'll see something that changes the condition (like increasing the timer in this example). This way, the loop knows when to quit!

Loop through a list

Below is an example of looping through a list. The loop will repeat until you get to the end of the list.

python
# Create a list of strings
names = ["Joe","Same","Bog"]

# For every string in the list, print the string
for name in names:
    print(name)

Another way to loop through a list is to use the range function.

python
names = ["Joe","Same","Bog"]

for i in range(0,len(names)):
    print(names[i])

The len() function gets the length of a list.

Loop through a dictionary

Below is an example of looping through a dictionary. To loop over a dictionary while getting the key and value, you must use the enumerate function of Python.

python
# Create a dictionary
data = {'color': 'red'}

# Using i as an iterator, for every key and 
# value in the dictionary, print the key and value
for i, (key,value) in enumerate(data.items()):
    print(key,value)

Notice the difference when you do it this way:

python
# Create a dictionary
data = {'color': 'red'}

# Using i as an iterator, for every key and 
# value in the dictionary, print the key and value
for (key,value) in enumerate(data.items()):
    print(key,value)

NOTE

Notice that we add one to the timer on every iteration of the loop, if we didn't eventually make the while loop greater than 300, it would keep repeating, because timer would always be less than 300.

Your Turn!

Let's build a Chatbot!

  1. Open your code editor
  2. Step 2
  3. Step 3

THINK...

Something to think about

Solution
python
memory = ['null']
username = input('What is your name? ')

# Fuzzy Data
cold = (0,60)
high = (10,60)
it = 32 # current value

import sys
ai_age = 1
ai_creationDay = 'Wednesday September 02, 2015'
ai_name = 'TD001' #__ means DON'T' TOUCH!
# But you can touch it anyway :)

info = {
	'name': ai_name,
	'age': ai_age,
	'created': ai_creationDay
}

ai_weight = str(sys.getsizeof(info)) + ' bytes'

ai_info = f"""My name is {ai_name}. I am {ai_age}. I was created on
{ai_creationDay} by The Tutorial Doctor. I am currently {ai_weight})"""

def Main():
	displayCommands()
	running=True
	while running:
		command=input('Type a command %s: '%username).upper()
		
		if command=='STOP':
			print(f'{ai_name} Terminated')
			return False  
			
		prompt(command)

def prompt(c):
	greet(c)
	checkMemory(c)
	dates(c)
	eraseConsole(c)
	askInfo(c)
	randomStatement(c)
	train(c)
	Fuzz(c)

import random,datetime,os

def displayCommands():
	print('\n')
	print('Console: erase,stop')
	print('Memory: mem,memory,int()')
	print('Personality: rant')
	print('Info: info,age,name,birthday,weight')
	print('Date: date,day,month,year')
	print('Ask: good/evil,')
	print('FuzzyLogic: cold?,high?')
	print('\n')

def greet(c):
	greetings=['HELLO','HI','HOLA','KONNICHIWA']
	if c in greetings:
		greeting = greetings[random.randint(0,3)].capitalize() + ' ' + username
		block = (c,greeting)
		print(greeting)
		memory.append(block)

def checkMemory(c):
	if c in ['MEMORY','MEM']:
		print(str(len(memory)) + ' ' + str(memory))

	try:
		print(memory[int(c)])
	except:
		None 
		
def askInfo(c):
	# perhaps use all() or any()?
	# not working (and)
	if c == 'AGE':
		print(f'I am {ai_age}.')
	if c == 'NAME':
		print(f'My name is {ai_name}')
	if c in ['BIRTH','BIRTHDAY']:
		print('I was created on {ai_creationDay}')
		if ai_creationDay == datetime.date.today().strftime('%A %B %d, %Y'):
			print("It's my creationday!")
	if c in ['SIZE','WEIGHT','SZ']:
		print('I am ' + ai_weight)
	if c in ['INFO','NFO']:
		print(ai_info)
	if c in ['COMMANDS']:
		displayCommands()
		
	#subtract add dates?

def dates(c):
	"""
	#%b month abbreviation
	#%B full month name
	#%h month abbreviation
	#%y two digit year
	#%Y four digit year
	#%a day of the week abbreviation
	#%A day of the week
	#%d date
	#%m minutes
	#%s seconds
	#%s am/pm
	#%c date & time
	"""
	today = datetime.date.today()
	year = today.year
	month = today.month
	day = today.day
	# Add times later	
	
	if c=='DAY':
		print('It is ' + today.strftime('%A ') + username)
	elif c=='MONTH':
		print('It is ' + today.strftime('%B ') + username)
	elif c=='YEAR':
		print('It is ' + today.strftime('%Y ') + username)
	elif c=='TIME':
		pass
		# print datetime.time()
	elif c == 'TODAY':
		pass
	elif c == 'DATE':
		print('It is ' + today.strftime('%A %B %d, %Y ') + username)

def eraseConsole(c):
	if c in ['...','ER','ERASE']:
		print('o')
		clear = lambda: os.system('clear')
		clear()

def randomStatement(c):
	if c in ['RAN','RANT','RANDOM']:
		s1 = 'Follow me on Twitter @TutorialDoctor'
		s2 = 'Python is a cool programming language!'
		s3 = 'What goes up, must come down. Unless it has 0 gravity of course.'
		s4 = 'The grass is always greener on the other side. So true for deserts.'
		s5 = 'Haha, that is such a blooper.'
		s6 = f'WHO YOU CALLING FAT!. I am only {ai_weight}'
		s = [s1,s2,s3,s4,s5,s6]
	
		print(random.choice(s))

def train(c):
	moral_data = {'GOOD':True,'EVIL':False}
	if c in moral_data:
		print(moral_data[c])
		block = (c,moral_data[c])
		memory.append(block)

# Fuzzy Logic
def Membership(x,List):
	"Returns the membership of a value in a list."
	top=(float(x)-List[0])
	bottom=(List[-1]-List[0])
	M= top/bottom
	return M
	
def Is(x,List):
	"Returns true if a value is in the value range of a list"
	#If a value is greater than the first item in a list..
	if x >= List[0]:
		#And if it is smaller than the last item in the list...
		if x<= List[-1]:
			#print the membership of the item in the list...
			print(Membership(x,List))
			#And return True
			return True
	# No else statement is needed since the return statement will exit the function.
	#Print the membership and return False if the above condition is false.
	print(Membership(x,List))
	return False

def Fuzz(c):
	if c == 'COLD?':
		print(Is(it,cold))
	if c == 'HIGH?':
		print(Is(it,high))
Main()
Discovery

Something you should have gained from this exercise

Resources

W3 Schools