3: Getting Input
Book ref: Pg 60ff
Python 2.7: this function is called raw_input() in Python 2.7.
Pretty much any program you’re ever going to write will involve 3 parts – getting data, processing data and outputting a result. In your Hello world! program you learned one way of outputting data with the print() function. In 3: Python for Homework you learned how to process some data. But you still don’t have a way to get data into the program. That’s what this post is all about – input().
You use the input() function get string literals that the user types in at the keyboard. Try it now:
>>> input() this was a blank line before I typed this 'this was a blank line before I typed this'
You need to type input() and hit enter to really understand what is happening here. When I typed enter, Python gave me a blank line. Then I typed “this was a blank line before I typed this” and hit enter again (you should type anything you like). Then it echoed (repeated) what I typed back to the screen.
If you put your own string literal inside the brackets the input() function will echo that literal before it gets input from the user. Here is an example:
>>> input("What is your name?") What is your name?Brendan 'Brendan'
Instead of a blank line, input gave me a line starting with What is your name?. You can use this to tell the user what it is you want them to input. Notice also that there is no space between the question mark and the start of my answer. This is because Python has no idea about English grammar. You have to do that for Python. Remember to add a space to the end of your literals so that they look right:
>>> input("What is your name? ") What is your name? Brendan 'Brendan'
That space makes all the difference, don’t you think?
You can save the literals that someone types in by naming them – exactly how you saved literals in the earlier post. If you name the literal it is not echoed, but you can see it by printing the name you gave it. Here is an example:
>>> users_name = input("What is your name? ") What is your name? Brendan >>> print(users_name) Brendan
Python thinks that everything that the user types is a string literal – so you can’t enter a number and expect to be able to add and multiply (etc) it:
>>> users_number = input("Please type in a number: ") Please type in a number: 11 >>> users_number * 2 '1111' >>> users_number + 2 Traceback (most recent call last): File "", line 1, in TypeError: Can't convert 'int' object to str implicitly
When you typed in 11, Python attempted to multiply it by 2 and got “1111” – that is, 11 repeated rather than 22. When you tried to add 2 to it, it failed completely. If you are expecting your user to enter a number you need to use another function, called int() to convert it to a ‘Python number’:
>>> int(users_number) * 2 22 >>> int(users_number) + 2 13
But notice, unless you rename it, the int() function does not change what’s stored (try users_number * 2 again). You can rename it by putting the name on both sides of the equal sign like this:
>>> users_number = int(users_number) >>> users_number * 2 22
Now, Python is happy to treat this as an honest-to-goodness number.
If your user inputs a decimal number, int() won’t work. In that case you need to use a similar function, called float() instead:
>>> users_number = input("Please type in a decimal number: ") Please type in a decimal number: 2.5 >>> int(users_number) Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 10: '2.5' >>> float(users_number) 2.5
You can get the rough equivalent age of a dog in human years by multiplying it by 7 (purists will quibble that this is too inexact). For example, ie a 1 year old dog is roughly 7 human years old. Now write a short program to calculate the age of your dog in human years (notice here, I’m printing more than one thing by adding a comma between the things I’m printing):
>>> dog_age = input("How old is your dog? ") How old is your dog? 2.5 >>> print("Your dog is about ", float(dog_age)*7, " years old.") Your dog is about 17.5 years old.
Try it now!