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[0]
col1 = card[1]
sha1 = card[2]
fill1= card[3]
if count == 1:
num2 = card[0]
col2 = card[1]
sha2 = card[2]
fill2= card[3]
if count == 2:
num3 = card[0]
col3 = card[1]
sha3 = card[2]
fill3= card[3]
#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[0] == group[1] == group[2]:
good_num.append(count_num)
if group[0] != group[1] and group[1] != group[2] and group[2] != group[0]:
good_num.append(count_num)
count_num = count_num + 1
#check the colors
count_col = 0
for group in check_color:
if group[0] == group[1] == group[2]:
good_col.append(count_col)
if group[0] != group[1] and group[1] != group[2] and group[2] != group[0]:
good_col.append(count_col)
count_col = count_col + 1
#check the shape
count_sha = 0
for group in check_shape:
if group[0] == group[1] == group[2]:
good_sha.append(count_sha)
if group[0] != group[1] and group[1] != group[2] and group[2] != group[0]:
good_sha.append(count_sha)
count_sha = count_sha + 1
#check the fill
count_fill = 0
for group in check_fill:
if group[0] == group[1] == group[2]:
good_fill.append(count_fill)
if group[0] != group[1] and group[1] != group[2] and group[2] != group[0]:
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()
Comments