# variables, assignment, types, input/output

Try the Jupyter notebook version.

## motivation

We need variables to hold data, either from the user or some other source. When writing programs, we certainly don't want to hard code all data. Input and output are how we get interesting data into and out of our programs.

As an example, here's a program that gets data from the user (yearly salary = 20000), does a calculation with the data, and then displays the results:

``````Yearly Salary: \$20000
Approx monthly take-home-pay = \$1166.67
(assuming tax of 30%)``````

Here's one way to write the above program:

``````usersalary = input("Yearly Salary: \$")
gross = float(usersalary)
taxrate = 0.30
tax = gross*taxrate
net = gross - tax
monthlypay = net/12.0
print("Approx monthly take-home-pay = \$%.2f" % (monthlypay))
print("(assuming tax of %.0f%%)" % (taxrate * 100))``````

Note the use of variables, and the descriptive variable names, like `usersalary`, `taxrate`, and `monthlypay`.

Also note the use of type conversions, like `float(usersalary)`. Remember, the `input()` function always returns a string, no matter what the user types. So the variable `usersalary` is assigned the value `"20000"` (a string).

## more examples

Output is much easier if we use string formatting. The following program just gets a name from the user and then says "Hello":

``````name = input("What is your name? ")
print("Hello, " + name + "!")
print("Hello, %s!" % (name))``````

The two `print()` lines display the same thing (e.g., "Hello, Jeff!"). The second one uses a string placeholder (`%s`), instead of concatenating strings together using the `+` operator.

Here's a better example of using string formatting:

``````name = input("Dog's name: ")
age  = input(" Dog's age: ")
years = float(age) * 7
print("%s's age in human years: %d" % (name,years))``````

Instead of converting everything to strings and concatenating, we use the `%s` placeholder for the `name` variable, and the `%d` ('d' for decimal integer) for the `years` variable.

## challenge

Write a `poem.py` program that asks the user for two colors and an adjective, and then outputs the "roses are red" poem using the data from the user.

In the example below, the user enters "orange", "purple", and "smart":

``````\$ python3 poem.py
color: orange
color: purple