Python Problem Solver
Friday, September 25, 2026
Sunday, September 20, 2026
Week 17 Notes
# hangman.py
from string import ascii_letters
import os
import random
class Hangman:
def __init__(self):
with open("./words.txt", "r") as file:
words = file.read().split("\n")
self.secret_word = random.choice(words)
self.guessed_word = "*" * len(self.secret_word)
self.incorrect_guess_limit = 6
self.incorrect_guesses = 0
self.wrong_guesses = []
self.gallow_pieces = [
"------",
"| |",
"| ",
"| ",
"| ",
"|"
]
self.gallow = "\n".join(self.gallow_pieces)
self.man_pieces = [
" \\",
"/",
" \\",
" |",
"/",
"O",
]
def greet_user(self):
print("Hangman\n")
def show_list_of_wrong_guesses(self):
print(f"Wrong guesses: {', '.join(self.wrong_guesses)}\n\n")
def take_guess(self) -> str:
while True:
guess = input("Guess a letter:\n>>> ")
if len(guess) == 1 and guess in ascii_letters:
break
else:
print("Invalid input")
return guess
def is_out_of_guesses(self) -> bool:
return self.incorrect_guesses == self.incorrect_guess_limit
def check_guess(self, guess_letter: str):
if guess_letter in self.secret_word:
self._correct_guess(guess_letter)
else:
self._wrong_guess(guess_letter)
def _correct_guess(self, guess_letter: str):
index_positions = [index for index, item in enumerate(self.secret_word) if item == guess_letter]
for i in index_positions:
self.guessed_word = self.guessed_word[0:i] + guess_letter + self.guessed_word[i+1:]
def _wrong_guess(self, guess_letter: str):
row = 2
if self.incorrect_guesses > 0 and self.incorrect_guesses < 4:
row = 3
elif self.incorrect_guesses >= 4:
row = 4
self.gallow_pieces[row] = self.gallow_pieces[row] + self.man_pieces.pop()
self.gallow = "\n".join(self.gallow_pieces)
if guess_letter not in self.wrong_guesses:
self.wrong_guesses.append(guess_letter)
self.incorrect_guesses += 1
def main():
hangman = Hangman()
while True:
# greet user and explain mechanics
os.system('cls' if os.name=='nt' else 'clear')
hangman.greet_user()
# show gallow and the hidden word
print(hangman.gallow, "\n")
print("Secret word: ", hangman.guessed_word)
# show the list of wrong guesses
hangman.show_list_of_wrong_guesses()
if hangman.is_out_of_guesses():
print(f"Secret word is: {hangman.secret_word}")
print("You lost")
break
elif hangman.guessed_word == hangman.secret_word:
print("YOU WIN!!!")
break
else:
# take user guess
guess = hangman.take_guess()
# check guess
hangman.check_guess(guess)
if __name__ == "__main__":
main()
Saturday, September 12, 2026
Week 16 Notes
#
# Python Problem Solver
# Week 16 Example 1: Reverse the digits
#
with open("reverse.txt","r") as f:
l = list(map(int,f.read().strip().split()))
for n in l:
while n > 0:
print(n % 10, end = "")
n //= 10
print(" ", end = "")
print()
#
# Python Problem Solver
# Week 16 Example 2: Octal numbers
#
with open("octal.txt","r") as f:
l = list(map(int,f.read().strip().split()))
for n in l:
value = 0
while n > 0:
value *= 8
value += n%10
n//= 10
print(value, end=" ")
print()
#
# Python Problem Solver
# Week 16 Example 3: API
#
import json, urllib.request
#This free API key gives you restricted access to some of the data using the thesportsdb.com API
API_Key = "123"
name = input("Enter a player's name:").title()
name = name.replace(' ', '_')
url = "https://www.thesportsdb.com/api/v1/json/" + API_Key + "/searchplayers.php?p=" + name
response = urllib.request.urlopen(url)
result = json.loads(response.read())
for i in range(0, len(result["player"])):
print(result["player"][i]["strPlayer"] + " - " + result["player"][i]["strTeam"])
# Python Problem Solver
# Week 16 Example 3: API
#
import json, urllib.request
#This free API key gives you restricted access to some of the data using the thesportsdb.com API
API_Key = "123"
name = input("Enter a player's name:").title()
name = name.replace(' ', '_')
url = "https://www.thesportsdb.com/api/v1/json/" + API_Key + "/searchplayers.php?p=" + name
response = urllib.request.urlopen(url)
result = json.loads(response.read())
for i in range(0, len(result["player"])):
print(result["player"][i]["strPlayer"] + " - " + result["player"][i]["strTeam"])
Saturday, August 29, 2026
Week 15 Notes
#
# Python Problem Solver
# Week 15 Example 1: Level Ground (2022 AIO P2)
#
N = 0
A = []
answer = 0
A = []
answer = 0
# Read the value of N.
N = int(input().strip())
# Read the altitudes.
A = list(map(int, input().strip().split()))
lastalt = 0
intensity = 0
for alt in A:
if alt == lastalt:
intensity += alt
else:
intensity = alt
answer = max(answer, intensity)
lastalt = alt
intensity = 0
for alt in A:
if alt == lastalt:
intensity += alt
else:
intensity = alt
answer = max(answer, intensity)
lastalt = alt
# Write the answer.
print(answer)
#
# Python Problem Solver
# Week 15 Example 2: Spider web with straight threads
#
# Python Problem Solver
# Week 15 Example 2: Spider web with straight threads
#
import turtle
n = int(input("Input number of layers in the web: "))
spider = turtle.Turtle()
spider.pensize(2)
spider.pencolor("black")
spider.pensize(2)
spider.pencolor("black")
for i in range(8):
spider.fd(200)
spider.bk(200)
spider.lt(45)
spider.fd(200)
spider.bk(200)
spider.lt(45)
for i in range(1, n+1):
spider.fd(50)
spider.lt(180 - 67.5)
for j in range(8):
spider.fd(50*i*0.765)
spider.lt(45)
spider.setheading(0)
spider.fd(50)
spider.lt(180 - 67.5)
for j in range(8):
spider.fd(50*i*0.765)
spider.lt(45)
spider.setheading(0)
input()
Sunday, August 23, 2026
Subscribe to:
Posts (Atom)
-
# # Python Problem Solver # Week 2 Example 1: the Goldbach Conjecture # # Define function to determine whether a number is Prime number def...