2 KiB
2 KiB
Python advent learnings
Construct paths without hard-coding absolute path
puzzle_input_path = os.path.join(os.path.dirname(__file__), "data/test_input.txt")
Read file by line and store in variable
puzzle_input_path = os.path.join(os.path.dirname(__file__), "data/test_input.txt")
def getPuzzleInput(file_path):
with open(file_path, "r") as file:
return [line.strip() for line in file]
puzzle_input = getPuzzleInput(puzzle_input_path)
Conditional tests for members of arrays
Check that all elements are greater than zero:
if all(element >= 0 for element in array):
print('All elements greater than 0')
Check if any element is less than 0:
if any(element < 0 for element in array):
print('There is an element that is less than 0')
Check for substring:
text = "latest test"
if "test" in text:
return True
Control flow in loop
for counter_values in games:
colour = counter_values[1]
count = int(counter_values[0])
if colour in initial_values.keys() and count > initial_values[colour]:
break
else:
valid_games_count += game_number
The use of the else clause here is a special feature of Python. The else
clause after a for loop will normally only execute when the loop has finished
iterating over the list, but not when the loop is terminated by a break
statement.
The else clause is executed if the for loop completes normally. If the
break statement is executed (i.e., if any count in counter_values is greater
than the corresponding count in initial_values), the for loop is terminated
and the else clause is skipped.
Here the combination of a for loop and the break statement creates
if, else logic. If the break condition is not reached, then the else block
runs for every iteration of the loop.
Multiple loop in list comprehension
games = [item.strip().split() for game in games for item in game.split(",")]