Technology  /  Python

🐍 Python 78 guides · updated 2026

From first variable to OOP, generators, and real projects — the language that runs everything from data pipelines to AI agents, taught the practical way.

Taking User Input in Python: input(), Type Conversion, and Validation

Python’s input() function is simple on the surface and slightly tricky underneath. The core thing to understand before anything else: input() always returns a string. Always. Even if the user types 42, you get the string "42", not the integer 42. Everything else follows from that.


The Basics of input()

input() pauses your program, displays an optional prompt, waits for the user to type something and press Enter, then returns what they typed as a string.

name = input("What's your name? ")
print(f"Nice to meet you, {name}.")

The prompt string is optional. If you omit it, Python just waits silently — which is rarely what you want in a real program.

# With no prompt — just waits
value = input()

Converting Input to Other Types

Because input() always returns a string, you need explicit conversion for any numeric operations:

# Without conversion — this crashes
age = input("Enter your age: ")
next_year_age = age + 1 # TypeError: can only concatenate str to str
# With conversion — works correctly
age = int(input("Enter your age: "))
next_year_age = age + 1
print(f"Next year you'll be {next_year_age}")

The common conversion functions:

user_age = int(input("Age: ")) # whole numbers
user_height = float(input("Height: ")) # decimals
user_name = input("Name: ") # already a string, no conversion needed

The int() and float() conversion functions will raise a ValueError if the user types something that can’t be converted. That brings us to validation.


Validating Input

Never trust user input to be what you expect. A robust input routine handles both type errors and range constraints:

def get_integer(prompt, min_val=None, max_val=None):
"""Prompt until the user enters a valid integer within bounds."""
while True:
raw = input(prompt).strip()
try:
value = int(raw)
except ValueError:
print(f" Please enter a whole number, not '{raw}'")
continue
if min_val is not None and value < min_val:
print(f" Value must be at least {min_val}")
continue
if max_val is not None and value > max_val:
print(f" Value must be at most {max_val}")
continue
return value
score = get_integer("Enter your score (0-100): ", min_val=0, max_val=100)
print(f"Score recorded: {score}")

The while True loop keeps asking until it gets a valid response. strip() removes leading/trailing whitespace, which users accidentally include more often than you’d expect.


Multiple Values on One Line

You can accept several values in a single prompt by splitting the input:

raw = input("Enter width and height separated by space: ")
parts = raw.split()
if len(parts) != 2:
print("Please enter exactly two values")
else:
width = float(parts[0])
height = float(parts[1])
print(f"Area: {width * height:.2f}")

A more concise version using unpacking and a list comprehension:

try:
width, height = (float(x) for x in input("Width Height: ").split())
print(f"Area: {width * height:.2f}")
except ValueError:
print("Enter two numbers separated by a space")

A Practical Example: Simple Quiz Program

def run_quiz():
questions = [
("What is the capital of France?", "paris"),
("How many sides does a hexagon have?", "6"),
("What is 12 times 12?", "144"),
]
score = 0
print("--- Python Quiz ---\n")
for question, correct_answer in questions:
answer = input(f"{question} ").strip().lower()
if answer == correct_answer:
print(" Correct!\n")
score += 1
else:
print(f" Wrong. The answer was: {correct_answer}\n")
print(f"Final score: {score}/{len(questions)}")
run_quiz()

This shows how input() integrates naturally into a loop — each iteration waits for a response, processes it, and moves on.


Common Mistakes

Forgetting that input() returns a string. This causes TypeError when you try to do arithmetic. Always convert explicitly.

Not stripping whitespace. Users press spaces accidentally. input().strip() removes them.

Comparing input to the wrong type. input("Enter 1 or 2: ") == 1 is always False because you’re comparing a string to an integer. Compare to "1" or convert first.

# Wrong
choice = input("Enter 1 or 2: ")
if choice == 1: # always False — comparing str to int
...
# Right
if choice == "1": # string comparison
...
# or
if int(choice) == 1: # convert first
...

Using input() in production code that should read from files or arguments. For scripts meant to be automated, prefer command-line arguments (sys.argv or argparse) or reading from files. input() blocks execution waiting for a human — that’s the right tool for interactive programs, not batch processing.