The input() built-in function pauses program execution, reads a line of text from standard input, strips the trailing newline, and returns it as a string.
Type Casting & Robust Validation: Because input() unconditionally returns a string, numerical operations require explicit casting via int() or float(). Wrapping conversion attempts in try...except ValueError validation loops prevents unhandled crashes. For dynamic code evaluation, see eval(), or inspect object representations with repr().
The input() function takes an optional prompt argument and returns standard input text as a string:
# Formal syntax of built-in input()
user_string = input([prompt])
| Parameter | Type | Default | Description & Operational Rule |
|---|---|---|---|
prompt |
str |
"" (empty) |
Optional string printed to standard output without a trailing newline before reading input. |
| Return | str |
N/A | Always returns the exact line entered by the user with the trailing newline stripped. |
| Exception | EOFError |
N/A | Raised if standard input reaches End-Of-File (EOF) before reading any characters. |
Because input() always returns a string, adding two inputs without casting performs text concatenation:
# 1. Reading user input and observing string concatenation
# Prompting user for text input
username = input("Enter your username: ")
print("Welcome back,", username)
print("Data type:", type(username).__name__)
# Without casting, numerical inputs concatenate as strings
num1 = input("Enter first number: ") # User enters 3
num2 = input("Enter second number: ") # User enters 4
print("String concatenation result:", num1 + num2)Terminal Output:
Enter your username: Alex
Welcome back, Alex
Data type: str
Enter first number: 3
Enter second number: 4
String concatenation result: 34
To perform arithmetic calculations on input values, wrap input() with int() or float():
# 2. Type casting user inputs to int and float
# Converting to integer
item_count = int(input("Enter item count: "))
# Converting to floating-point number
unit_price = float(input("Enter unit price: "))
total_cost = item_count * unit_price
print(f"Total calculated cost: USD {total_cost:.2f}")Terminal Output:
Enter item count: 5
Enter unit price: 19.99
Total calculated cost: USD 99.95
You can accept multiple space-separated inputs on a single line using str.split() and map():
# 3. Reading multiple values in a single input line
# Splitting input by whitespace and mapping to integers
scores_input = input("Enter test scores separated by space: ")
scores = list(map(int, scores_input.split()))
print("Scores list: ", scores)
print("Average score: ", sum(scores) / len(scores))Terminal Output:
Enter test scores separated by space: 85 92 78 90
Scores list: [85, 92, 78, 90]
Average score: 86.25
Never assume users will enter valid data. Wrap type conversions in while True loops with try...except ValueError:
# 4. Robust input validation loop with exception handling
def prompt_positive_integer(prompt_msg):
"""Repeatedly prompts user until a valid positive integer is entered."""
while True:
raw_val = input(prompt_msg).strip()
try:
val = int(raw_val)
if val <= 0:
print("Error: Number must be greater than zero. Try again.")
continue
return val
except ValueError:
print("Invalid input: Please enter a valid whole number.")
age = prompt_positive_integer("Enter your age: ")
print("Verified age:", age)Terminal Output:
Enter your age: abc
Invalid input: Please enter a valid whole number.
Enter your age: -5
Error: Number must be greater than zero. Try again.
Enter your age: 24
Verified age: 24
Standard input() echoes characters to the console. For passwords, use the built-in getpass module:
# 5. Secure masked input with the getpass module
import getpass
# Standard input() echoes typed characters visibly on screen
normal_input = input("Enter public username: ")
# getpass.getpass() hides characters to prevent shoulder-surfing
secure_password = getpass.getpass("Enter secure password: ")
print("Credentials accepted safely.")Terminal Output:
Enter public username: admin_user
Enter secure password:
Credentials accepted safely.
Command-line utilities structure user prompts using a continuous option dispatch loop:
# 6. Production Recipe: Interactive CLI Menu Loop
def interactive_menu():
menu = """
[1] View Account Balance
[2] Deposit Funds
[3] Withdraw Funds
[4] Exit
"""
balance = 1000.0
while True:
print(menu)
choice = input("Select an option (1-4): ").strip()
if choice == "1":
print(f"Current balance: USD {balance:.2f}")
elif choice == "2":
amount = float(input("Enter deposit amount: "))
balance += amount
print(f"Updated balance: USD {balance:.2f}")
elif choice == "3":
amount = float(input("Enter withdrawal amount: "))
if amount <= balance:
balance -= amount
print(f"Updated balance: USD {balance:.2f}")
else:
print("Error: Insufficient funds.")
elif choice == "4":
print("Thank you for using our banking terminal.")
break
else:
print("Invalid selection. Please choose 1, 2, 3, or 4.")Terminal Output:
[1] View Account Balance
[2] Deposit Funds
[3] Withdraw Funds
[4] Exit
Select an option (1-4): 1
Current balance: USD 1000.00
Select an option (1-4): 4
Thank you for using our banking terminal.
eval(input()) to parse user numbers. A malicious user can type __import__('os').system('rm -rf /'), resulting in complete system takeover.
Always handle unexpected end-of-file conditions when input is redirected or piped:
# 7. Common traps: eval(input()) security hazard & EOF handling
# DANGEROUS ANTI-PATTERN: Never use eval(input())
# try:
# unsafe_val = eval(input("Enter formula: ")) # Vulnerable to code injection!
# Trap 2: Handling EOFError when input stream ends unexpectedly
import sys
try:
data = input("Enter text (or stream EOF): ")
except EOFError:
print("\nEncountered End-Of-File (EOF) without input.")Terminal Output:
Enter text (or stream EOF):
Encountered End-Of-File (EOF) without input.
Practice input casting, validation loops, and headless input simulation in our interactive companion Jupyter Notebook:
Explore interactive code cells, practice multi-value reading with map(), test validation loops, and run unit assertions.
Run these unit checks directly in Python or your local environment to verify input handling mechanics:
# 8. Self-verifying unit test suite for input simulation
import io
# Test 1: Simulating input with io.StringIO
simulated_stream = io.StringIO("42\nplus2net\n")
import builtins
orig_input = builtins.input
builtins.input = lambda prompt="": simulated_stream.readline().rstrip("\r\n")
try:
val1 = int(input("Enter number: "))
val2 = input("Enter text: ")
assert val1 == 42, "Integer cast test failed"
assert val2 == "plus2net", "String input test failed"
finally:
builtins.input = orig_input
print("All input() unit assertions successfully verified!")Terminal Output:
All input() unit assertions successfully verified!
input() unconditionally returns a str. Even if a user enters numbers like 123, the return value is "123".
input() reads lines sequentially from the pipe. When the end of the file is reached, it raises an EOFError exception.
eval() compiles and executes arbitrary Python code. If untrusted users enter shell commands or malicious scripts, it creates a severe security vulnerability.
Author & Instructor at plus2net
I write and maintain practical tutorials on Python, PHP, SQL, JavaScript, HTML, jQuery, and web development at plus2net. The tutorials focus on clear explanations, working examples, and code that readers can test and adapt while learning.