Grab your sword and shield.
Watch this video to learn about the new concepts shown in the program:
Lists are useful when you want to have multiple variables with the same identifier. E.g. instead of using three variables: inventory1, inventory2, inventory3, we would use one list: inventory[0], inventory[1], inventory[2] etc.
This is because the index inside the square brackets can be replaced with a variable. E.g. inventory[choice]. You cannot do this with variables.
Lists are dynamic which means the number of indexes can grow and shrink as needed when a program is running.
x = []
Defines x as a new empty list.
x = ["Craig", "Dave"]
Defines x as a list containing two values: the string “Craig” in index 0 and the string “Dave” in index 1.
The new commands used in this program and others that may be useful. Select them below to learn more:
x.append(y)Adds y to the end of list x.
x.insert(y,z)Inserts z at index y into list x. All other elements are moved down by one index.
if x in yReturns True if x is in list y or False if not.
x.remove(y)Removes the first occurrence of y from list x. Remember that this will reduce the index of all other elements stored after y by -1.
x.pop(y)Removes the first occurrence of y from list x. Remember that this will reduce the index of all other elements stored after y by -1.
x = y.index(z)x is assigned the index of where string z is in list y.
x.sort()Sorts all the items in list x into ascending order using a Tim Sort.
x.reverse()Reverses the order of all items in list x.
x = y.copy()x is assigned to be a copy of list y. You cannot use x = y with lists because x will become a reference (pointer) to y. I.e. x and y are still the same list, but with two different identifiers. Unlike variables, you must copy a list for it to become a copy.
x = random.choice(y)x is assigned a random element from list y. Requires the random library to access this command.
random.shuffle(x)Randomises the elements of list x. Requires the random library to access this command.
x = len(y)x is assigned the number of items in list y. Can also be used to return the number of characters in string y.
x = y[z]x is assigned the value stored in list y at index z. Remember that indexes start at 0 so y[0] is the first item in the list y. Be careful that z is a valid index and not out of bounds of the list.
print(x)Can also be used to output the contents of a list in the format: ['value 0', 'value 1', 'value 2'].
Questions to think about with this program to check your understanding:
Identify a list in the program.
inventory is a list. It can store more than one value with a single identifier. Each value is assigned an index.
State what is stored in index 1 in the data structure assigned in line 55.
“shield” because indexes start at 0 in lists.
Change the program so that it:
choose_action subprogram.craft_item subprogram that:Assuming ['sword', 'shield']
You have 2 items in your inventory.
What action do you want to take? (add/craft/look/drop/search/quit) : craft
What item do you want to craft? : charm
You do not have the items to do this.
Assuming ['sword', 'shield', 'gem', 'leather']
You have 4 items in your inventory.
What action do you want to take? (add/craft/look/drop/search/quit) : craft
What item do you want to craft? : charm
charm crafted.
Assuming ['sword', 'shield', 'charm']
You have 3 items in your inventory.
What action do you want to take? (add/craft/look/drop/search/quit) : look
Which inventory slot do you want to look at? : 2
You have a charm in slot 2
choose_action, main program
# Procedure to choose an action
def choose_action():
---
print("You have", len(inventory), "items in your inventory.")
action = input("What action do you want to take? (add/craft/look/drop/search/quit) : ")
---
match action:
---
case "add":
---
add_item()
---
case "craft":
---
craft_item()
---
case "drop":
---
drop_item()
---
case "look":
---
look()
---
case "search":
---
search()
---
case "quit":
---
return False
---
print()
return True
---
# -------------------------
# Main program
# -------------------------
---
inventory = ["sword", "shield"]
---
while choose_action():
pass
add_item, search, drop_item
# Procedure to add an item to the inventory
def add_item():
---
item = input("What item are you adding to your inventory? : ")
---
inventory.append(item)
print("Item added.")
---
# Procedure to search for an item in the inventory
def search():
---
item = input("What item do you want to see if you have? : ")
---
if item in inventory:
---
print("You have the item.")
---
else:
---
print("You do not have a", item)
---
# Procedure to remove an item from the inventory
def drop_item():
---
item = input("What item do you want to drop? : ")
---
# Check item exists
if item in inventory:
---
inventory.remove(item)
print("Item dropped.")
---
else:
---
print("You do not have this item.")
look, craft_item
# Procedure to show an item in an inventory slot
def look():
---
slot = int(input("Which inventory slot do you want to look at? : "))
---
if slot < len(inventory):
---
print("You have a", inventory[slot], "in slot", slot)
---
else:
---
print("Invalid slot.")
---
# Procedure to craft an item
def craft_item():
---
item = input("What item do you want to craft? : ")
---
# Craft the item if the correct items are available
if item == "charm" and "gem" in inventory and "leather" in inventory:
---
inventory.remove("gem")
inventory.remove("leather")
inventory.append("charm")
print(item, "crafted.")
---
else:
---
print("You do not have the items to do this.")