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 Assignments


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"])

Saturday, August 29, 2026

Week 15 Assignments

Week 15 Notes


# 
# Python Problem Solver
# Week 15 Example 1: Level Ground (2022 AIO P2) 
#

N = 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

# Write the answer.
print(answer)

  
#
# 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")

for i in range(8):
    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)

input()

Term 2 Term Test