Grade Checker & Login System

Acadestine

Learning Objectives
    • Combine input() with numeric type conversion and comparison operators to build an automated Grade Checker.
    • Utilize logical operators alongside input() to construct a single-pass credential validation Login System.
    • Trace decision-tree execution flows when user inputs trigger interactive branching logic.

From Static Code to Interactive Apps

Up until now, your Python scripts have likely run from top to bottom, executing the exact same lines of code every single time. By combining user input with conditional logic, you unlock interactive program execution turning rigid scripts into dynamic applications that respond to user choices in real time.

Instead of hardcoding values, your code can adapt on the fly based on user-driven decision pathways. Think about the apps you use every day, like a school's grade portal or a simple login screen. They do not show everyone the exact same information; they ask a question, evaluate your answer, and decide what to do next.

Here is a quick look at how user input changes a program's path:

# A simple preview of user-driven decision pathways
user_role = input("Enter your role (student/teacher): ")

if user_role == "teacher":
    print("Welcome to the Grade Portal!")
else:
    print("Welcome to the Student Dashboard!")
# Output if the user types 'teacher':
Enter your role (student/teacher): teacher
Welcome to the Grade Portal!

When you run a script like this, execution pauses and waits for the user. The user's response determines which specific block of code runs next.

Here is how static execution compares to interactive execution:

Feature Static Scripts Interactive Applications
Data Source Hardcoded values inside the .py file Dynamic input provided by the user at runtime
Execution Path Fixed line-by-line flow User-driven decision pathways branching on conditions
User Experience Non-responsive output Adaptive, personalized experience

In this lesson, you will learn how to accept user input using input(), convert data types when necessary, and control the flow of your applications to build responsive programs like grade checkers and login systems.

Unlocking Dynamic Control Flow

Up to this point, your Python code executed fixed instructions from top to bottom. By pairing live user input with decision logic, you transform rigid scripts into responsive programs that react dynamically to human decisions.

When your program evaluates choices on the fly, it stops being just a static set of instructions and starts feeling like an interactive application. Instead of outputting the exact same result every single run, your code can now deliver immediate, custom feedback tailored to whatever a user types into input().

At the heart of this flexibility is boolean evaluation checking whether a user's input causes a condition to evaluate to True or False. Converting raw text from input() into a boolean result allows your software to make logical decisions instantly.

Evaluating user input gives you the power to:

  • Validate requirements: Instantly check if an entered number meets a specific threshold, such as checking if a test score is passing.
  • Guide the user experience: Direct users down entirely different visual or logical pathways based on their specific selections.
  • Guard program logic: Ensure that specific blocks of code only execute when exact conditions are satisfied.
Feature Static Scripts Dynamic Interactive Apps
Execution Flow Runs the exact same lines every time Alters its path dynamically based on input()
Feedback Hardcoded, fixed output Instant, customized feedback
User Logic Ignores user state Uses boolean checks (True/False) to make decisions

Mastering this combination gives you complete control over how your software responds to unpredictable, real-world interactions. Next, we will start building these dynamic decision paths step by step.

The Bouncer and the Grading Scale

Before writing complex decision structures, building strong mental models helps you design error-free logical paths. Think of conditional decisions in software as everyday real-world checkpoints that you already navigate every day.

The Multi-Condition Gatekeeper (The Bouncer)

Imagine standing in line at an event. At the entrance, a bouncer enforces a strict entry policy: you must pass two separate checks at the exact same time to get inside.

  • Check 1: Do you have a valid photo ID?
  • Check 2: Is your name on the guest list?

If your photo ID is valid AND your name is on the list, the bouncer steps aside and opens the door. If either check fails say you brought your ID, but your name isn't on the list you get turned away immediately.

This mirrors multi-condition gatekeeping. You evaluate multiple pieces of incoming user data simultaneously, requiring every single criteria to evaluate to true before granting access to the next step.

The Sequential Threshold Tester (The Sorting Machine)

Now, imagine an automated factory belt sorting items into distribution bins based on weight thresholds. A single item travels down the line and encounters a series of physical gates set to specific cutoff points:

  • Threshold 1: Is the weight greater than 200g? If yes, drop it into the Grade A bin.
  • Threshold 2: If it failed the first check, is the weight greater than 150g? If yes, drop it into the Grade B bin.
  • Threshold 3: If it failed both prior checks, drop it into the Grade C default bin.

Notice how this sequence operates: the item is tested against ordered rules one by one until it finds its first matching condition. Once an item drops into a bin, it stops moving down the line entirely. It never gets evaluated against the remaining thresholds lower down the belt.

This represents sequential threshold testing, where continuous incoming numeric data (like a grade percentage or a measured weight) gets funneled into exactly one category based on strict top-down priority.

Comparing Analogies to Technical Concepts

To help you bridge these metaphors to building your own systems, take a look at how real-world rules align with digital decision trees:

Real-World Metaphor Technical Concept How It Behaves
Bouncer Check Multi-Condition Gatekeeping Evaluates multiple criteria simultaneously; all conditions must be true.
Bouncer Rejection Fallback Branch Executes when any required condition fails to match expected values.
Sorting Belt Gates Sequential Threshold Testing Evaluates a single value top-to-bottom against ordered numeric cutoffs.
Selected Sorting Bin First-Match Execution Triggers the outcome for the first matching threshold and skips all remaining checks.

When you design your program flows, picture whether you are building a strict bouncer at a door or an automated conveyor belt sorting items into bins. Having these mental models in mind will make structuring your user input logic clear and intuitive!

Building the Grade Checker and Login Logic

When you capture user input in Python, it always arrives as text even if the user types a number. To build interactive programs like automated grade checkers or credential validators, you must convert raw string inputs into usable data types and combine logic checks effectively.

Copy and run this complete Python script to see how input conversion, range checking, and multi-condition evaluation work together in practice:

Console

        

Sample Output:

Enter your test score (0-100): 85.5
Your calculated grade is: B
Enter username: admin
Enter password: secr3t
Access granted! Welcome to the dashboard.

The Breakdown

Let's dissect exactly what is happening in each part of the script so you can master these mechanics.

1. Converting Input with float()

The input() function always returns a string (like "85.5"). If you attempt to compare a string directly to a number using >= or <=, Python will raise a runtime error.

To fix this, we wrap the input variable in float() or int(): * float(raw_score) converts the text string into a decimal number, allowing flexible inputs like 85.5 or 90.0. * int(raw_score) can be used if you only want to accept whole integers like 85 or 90.

A common beginner mistake is attempting to perform numerical comparisons on unconverted strings (e.g., "85" >= 90), which causes a TypeError. Always explicitly cast your user input using int() or float() before running numeric comparisons.

2. Chaining elif Statements for Ranges

Notice how the grade checker tests ranges without requiring complex lower-bound checks (like score >= 80 and score < 90).

This works because Python checks conditional branches sequentially from top to bottom: * If score is 85.5, Python first checks if score >= 90. This is False. * It moves to the first elif score >= 80. This is True! * Python executes grade = "B" and immediately skips all remaining elif and else blocks.

3. Single-Pass Login Logic with and

In the login section, we evaluate two string inputs (username and password) inside a single if statement using the and logical operator.

  • The and operator requires BOTH comparisons to evaluate to True.
  • If username == "admin" is True AND password == "secr3t" is True, access is granted.
  • If either string fails to match, the condition yields False, and execution drops directly into the else block.

Mapping the User Input Decision Tree

When your Python script asks a user for input, Python evaluates the entry step-by-step through your conditional branches like a train moving down a track with multiple switches. Understanding how Python traces this single path ensures you write predictable code that executes exactly one branch and ignores the rest.

How Python Traces a Decision Tree

Think of your conditional checks (if, elif, and else) as a series of tracks. Python will only ever execute a single branch in a connected conditional chain.

When evaluating runtime user input, Python follows three core mechanics:

  • Sequential Evaluation: Python reads your code strictly from top to bottom, testing each branch's condition one at a time.
  • Truthiness Evaluation: Python checks whether the condition evaluates to True or False using the current runtime values.
  • Single-Path Execution: The moment Python finds a condition that evaluates to True, it enters that code block, executes the code inside, and completely skips all remaining elif and else blocks in that structure.

Let's test this in action! Run this code in your environment and try entering 85 when prompted.

Console

        

The Output

If you run this script and input 85, here is the exact output you will see in your terminal:

Enter your exam score (0-100): 85

--- Tracing Execution ---
Path B triggered: Good job! You passed.
Decision tree execution complete.

The Breakdown

Here is step-by-step how Python evaluates your input of 85 at runtime:

  1. user_input = input(...): Python pauses execution and captures the text "85" entered by the user.
  2. score = int(user_input): Converts the string "85" into the integer 85.
  3. if score >= 90:: Python checks if 85 >= 90. This evaluates to False, so Python skips the code inside Path A and moves down to the next branch.
  4. elif score >= 70:: Python checks if 85 >= 70. This evaluates to True.
  5. Path Execution: Because the condition evaluated to True, Python enters Path B and executes print("Path B triggered: Good job! You passed.").
  6. Branch Exit: Because Path B matched, Python instantly skips elif score >= 50: and else:. It does not even evaluate 85 >= 50. It jumps straight to the end of the conditional chain to execute print("Decision tree execution complete.").

Notice that even though 85 >= 50 is technically mathematically true, Path C never ran. Python stops evaluating as soon as it finds its first successful match.

Execution Summary

Decision Phase Action Taken Python Internal Behavior
1. Capture Input input() retrieves raw data Data is initially stored as a string type.
2. Condition Check Evaluates expression truthiness Evaluates line-by-line until a statement resolves to True.
3. Path Execution Runs matching indented block Executes only the code belonging to the first True branch.
4. Short-Circuit Bypasses remaining branches Immediately jumps past all subsequent elif and else blocks.

Mastering Dynamic Program Logic

You have officially unlocked the core building blocks of interactive Python programming. By combining user input with dynamic decision-making logic, your scripts are no longer rigid sequences of instructions they now respond and adapt to user behavior in real time.

When you capture user data with input(), transform it with type casting functions like int() or float(), and evaluate it with comparison and logical operators, you create a seamless pipeline. This synergy between input collection and conditional logic forms the backbone of interactive software.

Here is a quick look at the interactive toolbox you have assembled across your single-pass projects:

  • Data Collection: Gathering user responses dynamically at runtime using input().
  • Type Conversion: Transforming raw string data into numeric types like int() and float() for calculations.
  • Logical Evaluation: Checking multiple criteria simultaneously using operators like >, ==, and and.
  • Branching Execution: Directing the program down specific code paths using if, elif, and else statements.
# The Complete Interactive Pattern
raw_data = input("Enter a value: ")
converted_data = int(raw_data)  # Type casting

if converted_data > 10 and converted_data < 100:  # Logical evaluation
    print("Valid range!")  # Branch 1
else:
    print("Out of range!")  # Branch 2

Mastering this flow allows you to construct predictable decision trees that handle real-world user input accurately. Every automated grade checker, single-pass credential validator, and decision-tree path you build relies on this exact pattern. You are now fully equipped to make your Python scripts react intelligently to whatever data comes their way!

Previous Next Lesson