From ed30433dd8c73e697e185596204fa1c94a9dc267 Mon Sep 17 00:00:00 2001
From: Erkhemee <236621357+Ericwasepic127@users.noreply.github.com>
Date: Mon, 24 Aug 2026 13:48:29 +0800
Subject: [PATCH 01/10] Update INSTALLING.md
---
INSTALLING.md | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 69 insertions(+), 1 deletion(-)
diff --git a/INSTALLING.md b/INSTALLING.md
index fedfe5f..7466b77 100644
--- a/INSTALLING.md
+++ b/INSTALLING.md
@@ -2,6 +2,8 @@
A comprehensive guide to setting up Python and Visual Studio Code across Windows, macOS, and Linux.
+You can use online IDE, recommended using @Ericwasepic127's [SUPY3IDE](https://ericwasepic127.github.io/ide.html)
+
## Contents
- [Windows Installation](#windows-installation)
- [macOS Installation](#macos-installation)
@@ -84,4 +86,70 @@ Get your development environment ready by installing Visual Studio Code for your
* **macOS:** Follow the official macOS Setup Guide.
* **Linux:** Follow the official Linux Setup Guide for .deb, .rpm, or Snap packages.
-Contributed by @Ericwasepic127
\ No newline at end of file
+Contributed by @Ericwasepic127
+### Method 2: Using the Direct Executable Installer
+> ⚠️ **Note:** Standard `.exe` direct installers are deprecated starting from Python 3.15. For newer versions, please use Method 1.
+
+1. Navigate to the official [Python Downloads page](https://python.org/downloads/).
+2. Select the latest release, or download the [recommended Python 3.13 version](https://www.python.org/downloads/release/python-313/).
+3. Download the **Windows installer** executable (`.exe`).
+4. Double-click the downloaded file to run the installer.
+5. **Crucial:** Ensure you check the box that says **"Add Python to PATH"** before clicking install, then follow the remaining prompts.
+
+---
+
+## macOS Installation
+
+1. **Download the Installer:** Visit the official [Python Downloads page](https://python.org/downloads/) and download the macOS installer package (`.pkg`). The [recommended version is 3.13](https://www.python.org/downloads/release/python-313/).
+2. **Run the Installer:** Open the downloaded `.pkg` file and follow the on-screen installation steps. You will be prompted to enter your Mac's administrator password.
+3. **Install Certificates:**
+ - Once complete, open your `Applications` folder and locate the newly created `Python 3.x` directory.
+ - Double-click the `Install Certificates.command` file. *This step is required to ensure Python can securely connect to the internet.*
+
+---
+
+## Linux Installation (using pyenv)
+
+For Linux distributions, we recommend using `pyenv`, a robust Python environment manager that functions similarly to Windows' Install Manager.
+
+### 1. Install Dependencies
+Open your terminal and run the appropriate command for your package manager to install the required build dependencies:
+
+* **Ubuntu / Debian / Mint:**
+ ```bash
+ sudo apt update
+ sudo apt install -y git make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev```
+
+
+* **Fedora / RHEL / CentOS:**
+ ```bash
+ sudo dnf groupinstall "Development Tools"
+ sudo dnf install git openssl-devel bzip2-devel libffi-devel readline-devel sqlite-devel xz-devel tk-devel```
+
+* **Arch Linux:**
+ ```bash
+ sudo pacman -S --needed base-devel
+ sudo pacman -S git openssl zlib bzip2 readline sqlite3 libffi xz tk
+ ```
+### 2. Install and Configure pyenv
+ 1. Run the automatic installer script:
+ ```bash
+ curl [https://pyenv.run](https://pyenv.run) | bash
+ ```
+2. Follow the instructions printed in the terminal to add pyenv to your shell profile configurations (e.g., .bashrc or .zshrc).
+3. Restart your terminal or source your profile to apply the changes.
+
+### 3. Install Python
+Install your desired version using pyenv. We recommend version 3.13:
+```bash
+pyenv install 3.13
+pyenv global 3.13
+```
+
+## Visual Studio Code Installation
+Get your development environment ready by installing Visual Studio Code for your platform:
+ * **Windows:** Download via the Microsoft Store Link.
+ * **macOS:** Follow the official macOS Setup Guide.
+ * **Linux:** Follow the official Linux Setup Guide for .deb, .rpm, or Snap packages.
+
+Contributed by @Ericwasepic127
From d475ba4e7cd5b19430a217b142cb287561f33b62 Mon Sep 17 00:00:00 2001
From: Erkhemee <236621357+Ericwasepic127@users.noreply.github.com>
Date: Mon, 24 Aug 2026 13:49:45 +0800
Subject: [PATCH 02/10] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 55ec821..b30f000 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@ This repository is designed to help Python learners at all levels, starting with
- See the [Python & VS Code Installation Guide](INSTALLING.md) to install python by step by step. Visual Studio Code installation steps are also included in this.
> [!TIP]
-> We use Visual Studio Code. It's fast, efficient, and has many extensions and customizability options.
+> We use Visual Studio Code. It's fast, efficient, and has many extensions and customizability options. You can also use @Ericwasepic127's [SUPY3IDE](https://ericwasepic127.github.io/ide.html)
## Project Difficulty Ratings
From fa49915955ecb7861bd43c3fd64a4b0fd92e4d1c Mon Sep 17 00:00:00 2001
From: Erkhemee <236621357+Ericwasepic127@users.noreply.github.com>
Date: Sun, 30 Aug 2026 14:13:20 +0800
Subject: [PATCH 03/10] Revert #1
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index b30f000..55ec821 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@ This repository is designed to help Python learners at all levels, starting with
- See the [Python & VS Code Installation Guide](INSTALLING.md) to install python by step by step. Visual Studio Code installation steps are also included in this.
> [!TIP]
-> We use Visual Studio Code. It's fast, efficient, and has many extensions and customizability options. You can also use @Ericwasepic127's [SUPY3IDE](https://ericwasepic127.github.io/ide.html)
+> We use Visual Studio Code. It's fast, efficient, and has many extensions and customizability options.
## Project Difficulty Ratings
From 1804d3c82e1405e9c60f83612729715728b53487 Mon Sep 17 00:00:00 2001
From: Erkhemee <236621357+Ericwasepic127@users.noreply.github.com>
Date: Sun, 30 Aug 2026 14:13:57 +0800
Subject: [PATCH 04/10] Update INSTALLING.md to remove IDE recommendation
Removed recommendation for online IDE SUPY3IDE.
---
INSTALLING.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/INSTALLING.md b/INSTALLING.md
index 7466b77..36f4435 100644
--- a/INSTALLING.md
+++ b/INSTALLING.md
@@ -2,8 +2,6 @@
A comprehensive guide to setting up Python and Visual Studio Code across Windows, macOS, and Linux.
-You can use online IDE, recommended using @Ericwasepic127's [SUPY3IDE](https://ericwasepic127.github.io/ide.html)
-
## Contents
- [Windows Installation](#windows-installation)
- [macOS Installation](#macos-installation)
From 840ac3198060bd9572420df2f8f9eecbe62dd6b8 Mon Sep 17 00:00:00 2001
From: Erkhemee <236621357+Ericwasepic127@users.noreply.github.com>
Date: Sun, 30 Aug 2026 14:30:30 +0800
Subject: [PATCH 05/10] Hello, Tkinter! challenge
---
Advanced/1_hello_tk.py | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
create mode 100644 Advanced/1_hello_tk.py
diff --git a/Advanced/1_hello_tk.py b/Advanced/1_hello_tk.py
new file mode 100644
index 0000000..60d152e
--- /dev/null
+++ b/Advanced/1_hello_tk.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python3
+# Made by @Ericwasepic127 - With guided comments
+
+import tkinter as tk # Imports Tkinter module, shortcuts to tk
+
+root = tk.Tk() # Make window
+
+label = tk.Label( # Make Label widget
+ root, # Say to THIS window
+ text="Hello, World!" # Display THIS string given
+)
+label.pack() # Show the widget in window
+
+button = tk.Button( # Make Button widget
+ root, # Say to THIS window
+ text="Quit", # Display THIS string
+ command=root.destroy # Run THIS command on click
+)
+button.pack( # Show widget in window
+ fill=tk.BOTH # Fill Left and Right
+)
+
+root.mainloop() # Run until window closes
+# If you don't add root.mainloop(), the python program ends, causing window close immediately
From 5307172957d1f9dcbad28d29f9ff31e1494fa242 Mon Sep 17 00:00:00 2001
From: Erkhemee <236621357+Ericwasepic127@users.noreply.github.com>
Date: Sun, 30 Aug 2026 18:22:17 +0800
Subject: [PATCH 06/10] Create 2_text_box.py
---
Advanced/2_text_box.py | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
create mode 100644 Advanced/2_text_box.py
diff --git a/Advanced/2_text_box.py b/Advanced/2_text_box.py
new file mode 100644
index 0000000..458f662
--- /dev/null
+++ b/Advanced/2_text_box.py
@@ -0,0 +1,37 @@
+#!/usr/bin/env python3
+# Made by @Ericwasepic127 - with Helpful comments
+
+import tkinter as tk # Imports Tkinter module shortcuting as tk
+
+root = tk.Tk() # Make window object
+
+button = tk.Button( # Make Button
+ root, # to this window
+ text="Disable" # Display this string
+)
+button.pack(fill=tk.BOTH) # Show button
+
+text = tk.Text( # Make text box
+ root # to this window
+)
+text.pack(fill=tk.BOTH) # Show text box
+
+def toggle(btn, txt): # Let's make function to toggle
+ # To avoid any local and global thing mess up,
+ # let's make a wrapper-like function
+ def func():
+ if btn["text"] == "Disable": # Get text from button, and if it's Disable
+ # Instead using dict-like setting, you can use .config method
+ # I prefer dict-like setting
+ # You can see usage below
+ btn["text"] = "Enable"
+ txt["state"] = "disabled"
+ else: # in case disabled
+ btn["text"] = "Disable"
+ txt["state"] = "normal" # means editable
+ return func
+
+# instead dict-like setting
+button.config(command=toggle(button, text))
+
+root.mainloop()
From 7d0e0f44040aa19053001a696248c32ab2af70c8 Mon Sep 17 00:00:00 2001
From: Erkhemee <236621357+Ericwasepic127@users.noreply.github.com>
Date: Sun, 30 Aug 2026 18:40:29 +0800
Subject: [PATCH 07/10] Move 1_hello_tk.py to Tkinter directory
---
{Advanced => Tkinter}/1_hello_tk.py | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename {Advanced => Tkinter}/1_hello_tk.py (100%)
diff --git a/Advanced/1_hello_tk.py b/Tkinter/1_hello_tk.py
similarity index 100%
rename from Advanced/1_hello_tk.py
rename to Tkinter/1_hello_tk.py
From 037d97946be49c0c4daedbe1d7295b3e53a884e7 Mon Sep 17 00:00:00 2001
From: Erkhemee <236621357+Ericwasepic127@users.noreply.github.com>
Date: Sun, 30 Aug 2026 19:36:59 +0800
Subject: [PATCH 08/10] Rename 2_text_box.py to 2_text_box.py
---
{Advanced => Tkinter}/2_text_box.py | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename {Advanced => Tkinter}/2_text_box.py (100%)
diff --git a/Advanced/2_text_box.py b/Tkinter/2_text_box.py
similarity index 100%
rename from Advanced/2_text_box.py
rename to Tkinter/2_text_box.py
From ea21e4740ba10d0dd7cebc86f8d596456ce12da6 Mon Sep 17 00:00:00 2001
From: Erkhemee <236621357+Ericwasepic127@users.noreply.github.com>
Date: Mon, 31 Aug 2026 11:20:51 +0800
Subject: [PATCH 09/10] Erkhembayr has been generated Alarm
---
Beginner/30_alarm.py | 121 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 121 insertions(+)
create mode 100644 Beginner/30_alarm.py
diff --git a/Beginner/30_alarm.py b/Beginner/30_alarm.py
new file mode 100644
index 0000000..8c9d883
--- /dev/null
+++ b/Beginner/30_alarm.py
@@ -0,0 +1,121 @@
+#!/usr/bin/env python3
+# Made by @Ericwasepic127 - with helpful comments
+
+import datetime # Imports module of datetime for gather current datetime
+import time # Imports module of time for poll
+
+def get_hour_min():
+ # Defines reusable function for getting hour & minute
+ current = datetime.datetime.now() # Gets datetime object with current date and time
+ hour = current.hour # Extract Hour
+ minute = current.minute # Extract Minute
+ second = current.second # Extract Seconds
+ now = (hour, minute, second) # Combine into tuple
+ return now # Give the tuple
+
+def get_int(prompt=""):
+ # Defines function to get integer from input
+ user = input(prompt) # Get input
+ if not user.isdigit(): # Detect is it only has digits (even dot isn't allowed)
+ print("Not a number")
+ return # Return nothing
+ return int(user)
+
+def get_hour():
+ # Hour getting function - makes pretty reusable
+ hour_get = False # let's make variable for our while loop
+ while not hour_get: # Create while loop
+ hour = get_int("Enter hour to alarm: ")
+ if hour is None: # in case user didn't gave integer
+ print()
+ continue
+ if hour >= 24:
+ # Can't be above 24 hour
+ print("Exceeded hour!\n")
+ continue
+ elif hour < 0:
+ # Can't below 0
+ print("Decreased hour!\n")
+ continue
+ else:
+ hour_get = True # Say I got the hour to our while loop!
+ return hour
+
+def get_min():
+ # Minute getting function - makes pretty reusable
+ min_get = False # let's make variable for our while loop
+ while not min_get: # Create while loop
+ minute = get_int("Enter minute to alarm: ")
+ if minute is None: # in case user didn't gave integer
+ print()
+ continue
+ if minute >= 60:
+ # Can't be above 60 minute
+ print("Exceeded hour!\n")
+ continue
+ elif minute < 0:
+ # Can't below 0
+ print("Decreased hour!\n")
+ continue
+ else:
+ min_get = True # Say I got the minute to our while loop!
+ return minute
+
+def get_alarm():
+ # Reusable function to get tuple of alarm time!
+ alarm = (
+ get_hour(), # Get hour using our function
+ get_min(), # Get minute too!
+ 0 # for second
+ )
+ # Let's make confirmation system to avoid unwanted alarm time!
+ print(f"Set alarm to {alarm[0]}:{alarm[1]}!")
+ user_confirm = input("Is this correct (y/n)? ")
+ user_confirm = user_confirm.strip() # Clean any blank spaces
+ if user_confirm != "y" or not user_confirm.startswith("y"): # Not y
+ print("\nGetting again ...")
+ alarm = get_alarm() # Do recursive call
+ return alarm
+
+def time_left(alarm):
+ # Reusable function for time left calculation
+ now = get_hour_min() # Get current staticmethod
+ # Convert everything to seconds
+ now_sec = now[0]*3600 + now[1]*60 + now[2]
+ alarm_sec = alarm[0]*3600 + alarm[1]*60 + alarm[2]
+ diff = alarm_sec - now_sec # Calculate difference
+ if diff <= 0: # Negative
+ diff += 86400 # Next day
+ h = diff // 3600 # Hour
+ if h == 24: # As 24 Hour
+ h = 0 # go to 0
+ m = (diff % 3600) // 60 # Minute
+ s = diff % 60 # Second
+ diff_tuple = (h, m, s) # Make into one tuple
+ return diff_tuple
+
+def main():
+ # Main section
+ print("===Welcome to Alarm app!===")
+ print("Please set alarm!")
+ alarm = get_alarm()
+ print("Ctrl-C to stop alarm!\n")
+ while True:
+ # Make while loop but infinity
+ left = time_left(alarm) # Get left-time
+ left_hour = left[0] # Get Hour
+ left_min = left[1] # Get Minute
+ left_sec = left[2] # Get Seconds
+ if left_hour == 0 and left_min == 0 and left_sec == 0:
+ print("ALARM!!!!!!!!!!!!\007") # \007 is bell chapter
+ break
+ formatted_left = f"{left_hour:02d}:{left_min:02d}:{left_sec:02d}" # Format left-time
+ print(f"Left: {formatted_left}", end="\r")
+ time.sleep(1) # Sleep to rest CPU
+
+if __name__ == '__main__':
+ try:
+ main()
+ except KeyboardInterrupt:
+ print("Exitted! Goodbye")
+
From 768c34811bb37a777aa875bbe1470695b0caf1fa Mon Sep 17 00:00:00 2001
From: Erkhemee <236621357+Ericwasepic127@users.noreply.github.com>
Date: Mon, 31 Aug 2026 11:34:01 +0800
Subject: [PATCH 10/10] Rename 30_alarm.py to 14_alarm.py
---
Beginner/30_alarm.py => Intermediate/14_alarm.py | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename Beginner/30_alarm.py => Intermediate/14_alarm.py (100%)
diff --git a/Beginner/30_alarm.py b/Intermediate/14_alarm.py
similarity index 100%
rename from Beginner/30_alarm.py
rename to Intermediate/14_alarm.py