top of page

# Set and Python

If anyone if familiar with the game Set (they release a new one daily here), I wrote a program in Python to solve a basic 3 by 4 grid. It's also sold as a card game that you can play with family and friends if you're interested in purchasing it. Basically each card has four attributes: shape, color, number, and fill. And you have to find sets within the 12 cards laid out in front of you. A set is composed of three cards where each attribute is either all the same or all different. So basically my program can find those sets when you're stuck. It's kinda tedious inputting all the information but I thought it would be fun to share it anyways! I'm not an expert in coding AT ALL. This was just a fun project :)

def main():

table = []

#populate the table

#input the cards for the first row

print("Are you stuck? Well you've come to the right place!")

print()

print("First, tell us what cards are on the table.")

print()

print("Name the cards by number, color, shape, and pattern.")

print()

print("For number, put in a '1', '2', or '3'.")

print("For color, put in 'red', 'purple', or 'green'.")

print("For shape, put in 'oval', 'diamond', or 'wave'.")

print("For fill, put in 'blank','solid', or 'striped'.")

print()

print("Okay! Let's get started!")

print()

#possible inputs

numbers = ["1","2","3"]

colors = ["red", "purple", "green"]

shapes = ["oval","diamond","wave"]

fills = ["blank","solid","striped"]

#user inputs data

for t in range(12):

card = []

print("CARD " + str(t + 1))

while True:

cardnumber = input("Number: ")

if cardnumber not in numbers:

print("Number is not valid. Try again.")

else:

card.append(cardnumber)

break

while True:

cardcolor = input("Color: ")

if cardcolor not in colors:

print("Color is not valid. Try again.")

else:

card.append(cardcolor)

break

while True:

cardshape = input("Shape: ")

if cardshape not in shapes:

print("Shape is not valid. Try again.")

else:

card.append(cardshape)

break

while True:

cardfill = input("Fill: ")

if cardfill not in fills:

print("Shape is not valid. Try again.")

else:

card.append(cardfill)

break

table.append(card)

print(table)

print()

#all possible groupings

all_trios = []

for c in range(10):

x = c

for c in range(10):

y = c + 1

for c in range(10):

z = c + 2

if z > y and y > x:

trio = [table[x],table[y],table[z]]

all_trios.append(trio)

check_num = []

check_color = []

check_shape = []

check_fill = []

for group in all_trios:

count = 0

for card in group:

if count == 0:

num1 = card

col1 = card

sha1 = card

fill1= card

if count == 1:

num2 = card

col2 = card

sha2 = card

fill2= card

if count == 2:

num3 = card

col3 = card

sha3 = card

fill3= card

#make a nested list for each variable

card_num = [num1,num2,num3]

card_color = [col1,col2,col3]

card_shape = [sha1,sha2,sha3]

card_fill = [fill1,fill2,fill3]

check_num.append(card_num)

check_color.append(card_color)

check_shape.append(card_shape)

check_fill.append(card_fill)

count = count + 1

#find the sets

good_num = []

good_col = []

good_sha = []

good_fill = []

#check the numbers

count_num = 0

for group in check_num:

if group == group == group:

good_num.append(count_num)

if group != group and group != group and group != group:

good_num.append(count_num)

count_num = count_num + 1

#check the colors

count_col = 0

for group in check_color:

if group == group == group:

good_col.append(count_col)

if group != group and group != group and group != group:

good_col.append(count_col)

count_col = count_col + 1

#check the shape

count_sha = 0

for group in check_shape:

if group == group == group:

good_sha.append(count_sha)

if group != group and group != group and group != group:

good_sha.append(count_sha)

count_sha = count_sha + 1

#check the fill

count_fill = 0

for group in check_fill:

if group == group == group:

good_fill.append(count_fill)

if group != group and group != group and group != group:

good_fill.append(count_fill)

count_fill = count_fill + 1

#determine the sets

for i in good_num:

if i in good_fill and i in good_sha and i in good_col:

print(all_trios[i])

print()

main()

See All
bottom of page