How to Avoid Calling a Function with input() Multiple Times in Python

Quick Overview

The issue is that Python asks the user to provide the same data each time you use input() (or a method that includes input()). Your software becomes tedious, sluggish, and repetitive as a result.

The Fix (One Simple Rule): Make a single call to input(), store the value in a variable, and then pass that variable to each function that requires it.
The issue is that the program to fix for the names and ratings multiple times because I'm calling get_ratings() inside other functions.

4-Step Quick Fix You Can Follow Right Now:

  1. Find every input() in your code.
  2. Move the input() call to the top and save it in a variable.
  3. Update your functions to accept the value as a parameter (remove input() from inside them).
  4. Call your functions using the saved variable.

That’s it! Your program becomes cleaner, faster, and user-friendly. Keep reading for full examples, bad vs good code, real world demo, and bonus tips.

The Problem (Bad Code Example)

Here’s what not to do:

Python

# BAD - input() called multiple times
def greet(name):
    print(f"Hello, {name}!")

def get_user_info(name):
    print(f"Your name has {len(name)} letters.")

# User has to type the name TWICE!
greet(input("Enter your name: "))
get_user_info(input("Enter your name: "))

What happens:

text

Enter your name: Alice
Hello, Alice!
Enter your name: Alice   ←←← Annoying second prompt!
Your name has 5 letters.

The Correct Solution (Good Code)

Follow the 4 steps above:

Python

# GOOD - input() called only ONCE
def greet(name):
    print(f"Hello, {name}!")

def get_user_info(name):
    print(f"Your name has {len(name)} letters.")

# Step 2: Get input once and store it
user_name = input("Enter your name: ")

# Step 4: Pass the stored value
greet(user_name)
get_user_info(user_name)

Clean output:

text

Enter your name: Alice
Hello, Alice!
Your name has 5 letters.

Step-by-Step Guide (Follow These 4 Steps Every Time)

Step 1: Identify every input() Scan your entire script for input() or any function that calls input() inside it.

Step 2: Move input() to the top and store the result Use a clear variable name:

Python

user_name = input("Enter your name: ")
user_age  = int(input("Enter your age: "))
choice    = input("Choose 1-3: ")

Step 3: Refactor functions to accept parameters Remove input() from inside functions.

Before (bad):

Python

def calculate_total():
    price = int(input("Enter price: "))  # ← remove this
    ...

After (good):

Python

def calculate_total(price):   # ← now accepts the value
    ...

Step 4: Pass the stored variable to your functions You can now call the same function multiple times safely:

Python

price = int(input("Enter price: "))   # only once

total1 = calculate_total(price)
total2 = calculate_total(price * 1.1)  # reuse safely

Real-World Example: Simple Menu Program

Python

def show_menu():
    print("1. Start Game")
    print("2. Settings")
    print("3. Quit")

def handle_choice(choice):
    if choice == "1":
        print("Game started!")
    elif choice == "2":
        print("Opening settings...")
    elif choice == "3":
        print("Goodbye!")
    else:
        print("Invalid choice.")

# Correct way (follow the 4 steps)
show_menu()
user_choice = input("Enter your choice: ")   # ← only ONE input()
handle_choice(user_choice)   # can call this many times if needed

Tips for Professional Code

  • Never put input() inside a reusable function unless the function’s only job is to get input.
  • For multiple inputs, collect them all at the top before calling any logic functions.
  • Add simple validation in a separate function that takes the value as a parameter:

Add simple validation in a separate function that takes the value as a parameter:

def is_valid_age(age_str):
    return age_str.isdigit() and int(age_str) > 0
  • Use descriptive variable names so it’s obvious the value came from the user.

Summary (One More Time)

  • Problem → Repeated input() calls = repeated prompts.
  • Solution → Call input() once, store the value, pass the variable around.
  • Result → Clean, fast, professional program.

You now have a complete, copy-paste-ready fix that you can apply to any script in under 2 minutes.

Related blog posts