Project 1: Civic Assistance System
Due Friday, October 4
Description
Many elements of our civic lives are governed by processes and
regulations. While they may be confusing and complicated, these
processes form a common way that we coordinate our interactions,
hopefully for the benefit of all. We can use our computing skills
to help facilitate a clear understanding of these processes.
For this project, you will create a program that interacts with a
user by asking questions. Follow-up questions depend upon the
previous questions asked. The questions and answers should guide
the user towards solving a concrete problem.
The content of the questions and answers should be related to a
citizen interacting with their government in some real-life civic
realm. You can ask the user for strings, integers, or floats. The
program must contain at least six distinct questions it can ask.
Every question after the first question might or might not be asked,
depending on the answers to previous questions.
Here is a list of potential interactions you might attempt to
simulate. This is by no means comprehensive and is meant as
inspiration for your program. You may choose one of these, or
one of your own, as long as you provide a citation in your code
to your connected real-world civic interaction.
Example
Here are two transcripts from an example system, to give you a sense as to what your program needs to be able to do.
Transcript 1
Welcome to the DMV. Would you like to "register" or "renew" a vehicle? register
Has your vehicle been assessed this year? no
Please have your vehicle assessed and bring your stamped receipt from the county assessors's office.
Transcript 2
Welcome to the DMV. Would you like to "register" or "renew" a vehicle? register
Has your vehicle been assessed this year? yes
Have you paid property taxes due for this vehicle? yes
What is the odometer reading? (please no commas) 1282
What is the purchase price of the vehicle? (please no commas) 13234
You will owe $860.21 in taxes. Will you be using "credit" or "cash"? cash
Was this a "new" or "used" purchase? used
Did you bring the title for the vehicle? no
Please return when you have the title with all signatures from the buyer and seller.
Conditionals
Throughout the project, you should use conditionals (if
, elif
, else
, as appropriate) to control
the flow. In general, you should ask the user a question and then determine what to do next depending
on their answer. In some cases, their answer will indicate that the program should stop. However,
this should be handled directly by the conditionals and the flow, not by resorting to any of
quit()
or exit()
or similar. Check with your instructor if you are not sure whether your
have followed this instruction correctly.
To complete this program, you will need to learn about the print
function, the input
function, and type conversion functions.
Output
The print(str)
function instructs Python to display a string to the user.
Try it out with the code examples below. Notice how it is displaying
strings, but not with the normal ‘’ around the text.
print("Hello world!")
x = 6
if x > 5:
print("High")
else:
print("Low")
print("This is")
print("a lot")
print("of text")
If we want to print a string that includes information stored in variables, we can use a special type of string called a format string or f-string. When we preface the string with an f, we can include whatever variables we want inside curly brackets, like so:
x = 22
y = 12.9
print(f"My age is {x + 2} and I drink {y} glasses of water each day.")
The input(str)
function instructs Python to show an input box, then wait for the user to type a string and hit Enter. The str
parameter will be a prompt to tell the user what they should type. It then returns whatever the user typed as a str.
It will help to have an extra space at the end of your prompt string.
Try it out with the code below.
name = input("What is your name? ")
print(f"Hi, {name}!")
animal = input("What is your favorite animal? ")
if animal == "lemur":
print("Mine too!")
else:
print(f"That's nice, I guess {animal}s are OK.")
It is not necessary to check that the user inputs the correct kind of answer. However, your instructions should make clear what answer(s) are expected. That is,
you should do something like: “Are you a current Hendrix Student (‘y’ or ‘n’)?” It is okay if your code crashes if someone accidentally enters ‘yes’ – you do not need to check for this.
Type Conversion
The input(str)
function will always return a str
. Even if you type in a number. This can cause problems, as shown below.
x = input("Type a number between 1 and 10. ")
print(x + 3)
We can fix this with conversion functions. int(str)
will take a str
as a parameter, and return an int
.
x = input("Type a number between 1 and 10. ")
y = int(x)
print(y + 3)
Of course, the user could make a mistake and not enter an integer at all. For now, assume you have good users who always enter the correct type. Later, we will see how to fix this error.
If converting the result of a call to input(str)
, you can usually do the conversion at the same time.
x = int(input("Type a number between 1 and 10. "))
if x > 5:
print(f"{x} is too high.")
else:
print(f"{x} is too low.")
Reflection
Along with your code, you should complete a short reflection on the following questions:
- Why did you choose the system you did?
- What did you learn about the system as a result of completing this assignment?
- How did this experience affect your understanding of the relationship between computing and society?
Warning
Get started early! Pick an idea and run it by us. We are happy to help you think through the design of your program.
Grading Criteria
- A Level 1 project:
- Follows the above guidelines for user input and output.
- Asks six distinct questions.
- No runtime errors for any expected user input.
- No syntax errors.
- A Level 2 project:
- Meets all Level 1 criteria.
- Includes the Reflection described above.
- No Pycharm style warnings – exception: if your nested
if
statements cause a line to be too long, that is fine.
- No grammatical or spelling errors.
- No use of
quit()
or exit()
– the program flows and exits organically
- The flow of the questions – and response of the program – makes sense in the context given.
- Among the six or more questions, at least two distinct types of
data (
str
, int
, float
) are requested. An example of
meeting this criterion is having five questions that expect
strings and one question that expects an integer from the user.
- For each question, directions to the user are clear as to what
kind of input they should enter; for example: “Do you want ‘y’
or ‘yes’ for an affirmative?”