BYU logo Computer Science

Interactive programs

In this unit you will be learning how to create interactive programs, meaning programs that interact with the person that is running them. Any time you interact with a program, you need both input and output. Input means that you are providing data or commands to a program. You can provide input in many ways:

typing on a laptop, drawing on a tablet, using a microphone

  • typing on a laptop keyboard
  • drawing on a tablet
  • recording a podcast using a microphone

When the program responds, it typically provides you with output, showing what it did for you. Following the examples above, this could be:

  • putting the text you type into an email
  • showing you a drawing based on the strokes you made
  • showing a soundwave that contains your interview with a guest

Everything you do on your phone is a series of you providing input (by tapping or speaking) and the phone providing output (by displaying on the screen or talking back to you).

To keep things simple, we will start with programs that only use the keyboard for input and your screen for output.

As you go through this unit, create a folder in your cs110 project called unit3. You can put all your programs there.

Print

You can provide output for your program using the print() command. To use print, you give it a string that you would like to print:

print('Hello world!')

To see this in action, create a file in your unit3 project called printing.py. Type in this program:

if __name__ == '__main__':
    print("Hello world!")

When you run this program, PyCharm will open a Window at the bottom to show you the output:

Pycharm window showing 'Hello World!'

A few things to notice, from top top bottom:

  • First, the window shows you that PyCharm ran your program. In my case, it says it ran python3.11 on the printing.py program. Remember, every file in your file system has a path. In my case, the path to python3.11 is /Users/zappala/.virtualenvs/cs110/bin/python3.11 and the path to printing.py is /Users/zappala/cs110/unit3/printing.py

  • Next, the window shows you Hello world!, the string that you asked it to print. Python has printed this to your screen.

  • Below that, the window shows Process finished with exit code 0, which is normal. This means your program finished without causing any errors. You will see errors here if your program doesn’t operate correctly.

  • There is a series of tabs at the bottom, and you are in the Run tab. This is where Python will show you the output of running your program.

The print() command will actually allow you to give it multiple strings to print. Modify your program so it reads:

if __name__ == '__main__':
    print("Hello world!")
    print("Hello", "world!")
    print('Hello', 'world', 'out', 'there!')

When you run this, it shows:

Hello world!
Hello world!
Hello world out there!
  • The first line comes from print("Hello world!"). Python prints out the string.

  • The second line comes from print("Hello", "world!"). Python prints out the first string, then a space, then the second string.

  • The third line comes from print('Hello', 'world', 'out', 'there!'). Python prints out all of the strings you provide, separated by spaces.

Input

You can provide input to your program using the input() command. You provide input with a string to use for a prompt:

name = input('Enter your name: ')

Python will print this prompt on the screen and then wait for the person running the program to type a response. When the person ends a line with the enter key, then Python returns their response. In the line shown above, we store the response in the variable called name.

diagram showing Python displaying the prompt, the user typing Sarah, and then the string 'Sarah' being stored in a variable called name

To see this in action, create a file in your unit3 project called inputting.py. Type in this program:

if __name__ == '__main__':
    name = input('Enter your name: ')
    print('Your name is', name)

When you run this, it shows:

Enter your name:

Type whatever name you want:

Enter your name: Kermit
Your name is Kermit

You can see that the print() statement prints both Your name is and the name that you type, which is stored in the variable called name.

Formatted strings

Often when we print strings, we want to print a variable mixed with other strings. When you print as above:

print('Your name is', name)

you are somewhat limited in what you can do. A more powerful way to print is to use a formatted string:

if __name__ == '__main__':
    name = input('Enter your name: ')
    pizza = input('Enter your favorite pizza: ')
    message = f'{name} likes {pizza} pizza!'
    print(message)

A formatted string begins with f and then has a string in quotes. Inside the string, you can use variables by putting them inside of curly brackets {}.

The above program will:

  • ask the person running the program to enter their name, and store their answer in the variable called name

  • ask the person to enter their favorite pizza, and store their answer in the variable called pizza

  • create a variable called message that uses a formatted string, which contains <name> likes <pizza> pizza; this ends up containing something like ‘Kermit likes pepperoni pizza’ if the person types ‘Kermit’ and ‘pepperoni’

  • prints message

You can see this in action by changing your program in inputting.py to include the above code. Run it and you will see something like this:

the output of the program, showing in the end 'Captain Marvel likes all pizza'

Finally, you will notice we used a variable to hold the formatted string:

message = f'{name} likes {pizza} pizza!'
print(message)

You don’t necessarily need a variable in this case. You could just write this code:

print(f'{name} likes {pizza} pizza!')

We are just putting the formatted string directly into print(). This works just as well!

Return

When using input() it is helpful to write small functions that call input() and return the result. So let’s revisit return, which we saw earlier in unit 2.

Take a look at this small program:

def give_me_two() -> int:
    return 2


if __name__ == '__main__':
    value = give_me_two()
    print(value)
  • Python will run the main block first.

  • The first line inside the main block says store the return value of the give_me_two() function in a variable called value.

  • At this point, Python will run the give_me_two() function, which returns the value 2.

  • Python will take this returned value, 2, and store it in the variable called value.

  • Python prints 2

You can put this program in a file called demonstrating_return.py and run it:

output of the program, which is 2

Now replace this program with the following:

def get_name() -> str:
    return input('What is your name? ')


if __name__ == '__main__':
    value = get_name()
    print(value)

Notice that we have a very simple function, get_name() that just calls input, gets what the person types, and then returns it. The main block calls get_name() and prints value. Run this and you get:

output of the program, which is whatever name you type

Welcome to Wendy’s

OK, now that you understand print(), input(), formatted strings, and return, you’re ready to write an interactive program. Write a program that:

  • Welcomes a person to Wendy’s: Welcome to Wendy's!

  • Asks for the person’s name: What is your name?

  • Prompts the person for a sandwich type: What kind of sandwich do you want?

  • Prompts the person for sandwich additions: “What do you want on it? `

  • Prints out an order for the staff: <person> wants a <type> sandwich with <additions>!

See if you can write this program with a friend. We’ve given you everything in this guide that you need for this task! Write your code in the unit3 folder, in a file called wendys.py. Remember to use functions and return!

work with a friend to solve this problem

Here is one way to write this program:

def get_name() -> str:
    return input("What is your name? ")


def get_sandwich() -> str:
    return input("What kind of sandwich do you want? ")


def get_additions() -> str:
    return input("What do you want on it? ")


def print_summary(name: str, sandwich: str, adds: str):
    print(f"{name} wants a {sandwich} sandwich with {adds}!")


def main():
    print("Welcome to Wendy's!")
    name = get_name()
    sandwich = get_sandwich()
    adds = get_additions()
    print_summary(name, sandwich, adds)


if __name__ == '__main__':
    main()

You will notice:

  • This solution is broken down into a bunch of functions, many of which use the return statement.

  • One of the functions, print_summary() takes three arguments — the name, the sandwich, and the additions, and then prints out a formatted string using these variables. You can write functions that take s many arguments as you want.