input() and Standard In


A program that runs in the terminal is called a "console program" (console and terminal are practically synonyms). These console programs can become much more interactive if we learn a way for the user to give us some "input". Python has a simple function for doing so, the aptly named input function.

def hello():
    print('hello there')
    user_status = input('how are you? ')
    print('you said: ' + user_status)

def main():
    hello()

Input in the Terminal

Here is example of running the above hello.py in the terminal. In this example the text written by the user is in blue.

$ python3 hello.py
hello there
how are you? I am fine
you said: I am fine

Changing variable types

When you call the input function, the response entered by the user is given back to you! It is always "returned" as a value of type "str" also known as a string. That is a problem if you want to do any further computation. For example, lets say you wanted to print the value a user entered divided by two:

>>> x = input('enter a value: ')
enter a value: 42
>>> print(x)
42
>>> print(x/2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'int'
This is subtle, but recall that every variable has a type. Even though x looks like a number, its type is string. Recall that input always returns a string. The interpreter is complaining that it doesn't make sense to divide a string! Now that you know what the issue is, the fix is simple. You just need to change the variable type to be a float or an int. To do so you can use functions called float and int.
>>> x_float = float(x)
>>> print(x_float/2)
21.0
We can call x_float anything we like. I put the term "float" in the name simply so that you can understand the type just by reading the name.

 

Python Reader