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