Main content
Program design: catering contract
Apply variables and user input to design a program that generates custom catering contracts from a template. View the program used in this video at: https://www.khanacademy.org/python-program/user-input/6095140769415168. Created by Kim Merrill.
Want to join the conversation?
- Hi. I also have a doubt regarding the URL paths challenge. I was hoping you could help me out here.
I'm stuck with the whole "modify the program to print the URL for the subject selected". How do I do that?
I created the variable subject so that the user could type any subject and the URL supposedly includes that variable at the very end but when I hit run the only thing that comes up is my input for enter subject name.
I would really appreciate it if you could help me out with this aka HELP PLS(6 votes)- this is what I put:
subject = input("enter subject name in lowercase: ")(1 vote)
- Hello.
In the challenge “URL paths” under this video, even though my output printed out “Navigate to the (subject) page below.” (Subject can be math, science, computing or humanities) I believe my code is correct. Can you please tell me what is wrong with my code?(3 votes) - I have tried everything, even other people solutions but I cannot complete the 2nd part of the following chapter. Not sure how to fix it.(2 votes)
- how to do url paths(2 votes)
- real solution: shawn should solve his own problems(0 votes)
Video transcript
- [Instructor] Let's work
together on a program that uses variables and user input. Here's the problem I'm trying to solve. My friend Deshaun has a catering business and for each catering job
that he takes, he needs to write up a contract
between him and the client. Every contract uses the
same basic template, but there are blanks
that need to be filled in with the event details
like the client name, the venue name, the date. These contracts end up being
a lot of pages of legal speak, and a lot of these
event detail values need to be copied onto multiple pages. Can we build Deshaun a program to help him generate contracts faster? Here, we have a bit of
code to get us started. Deshaun copied over the first paragraph of his contract template
for us to work with. The first thing I do
when I get starter code like this is run it and see
if it works and what it does. It looks like it formats
the contract a bit with this nice heading, and then it just kind of
prints out the template as is. There's still like these blanks here that need to be filled in. Of course, Deshaun's full
contract is a lot longer than this, but I kind of
like the idea of starting with just this first
paragraph to get a feel for how I'm gonna solve this problem
with a smaller sub-problem before I copy in a ton of text here. One thing I do notice with this code is that we have a linter error over here. It's one of these yellow triangles, so that means it's a
warning, not an error, but I still wanna take a look at it and see if it's something I can fix. It looks like it's complaining
about this line being too long, which you know,
I kind of agree with. I have to horizontal scroll
all the way over here just to get to the end of the string. It makes it hard to work with. To split a long string like this over multiple lines, I can divide the string
into several smaller strings and then concatenate them together. Then, if I surround that whole
expression in parentheses, I can put these strings on separate lines because of the parentheses, the computer treats this whole thing as a single instruction. Before we move on, I'm just
gonna quickly rerun the program and make sure I didn't break
anything while I was here. Okay, now let's think through
how to design this program. I wanna generalize this code so I can substitute in
the name of any client. The user experience that I'm going for is that Deshaun can come in and enter all the event details,
essentially in text boxes, and then the program will give
him the completed contract. For this first paragraph, it looks like the values I'm
trying to fill in are the name of the client and the name
of the catering company, so I probably want a
variable for each of those. I'm going to want Deshaun
to be able to enter some of those values, so I'll probably need an input function call
here, but I don't wanna have to enter values in the console
every time I run the program while I'm still working on it. So I'm just gonna stick
some placeholder values in here for now. All I did was add a couple
of assignment statements that I think are right, so I don't think there should be any bugs, but just to be sure, I'm
gonna run the program. All right, now I wanna
substitute those values in where the blanks are. That means I need to
access these variables in this expression so I can substitute the value stored there
into the contract string. So, where I have these
underlines in the string, I'm gonna delete that blank and then separate the
string into two parts at that juncture. There's a lot of strings, so let me check I didn't
miss any quotation marks. Great, okay, now let's
substitute my values in here. I wanna concatenate in the caterer name, which is stored in the variable caterer, and over here, I wanna
concatenate in the client name, which is stored in the variable client. Now, when I run the program, I'm seeing those
placeholder values I stored in those variables in place
of the blanks in the contract. This messed up my line
lengths over here a bit, so I'm gonna clean that up real quick so it's easier to read. There's one more blank here in the header, and it sounds like Deshaun
wants the catering company name to go here. So I'm gonna do the same thing and divide that string at the blank and substitute in the caterer variable. Last step, let's go back to
these placeholder values. Deshaun's company is called King Catering, so I'm gonna put that in here. The client name though is
different on every contract, so I want Deshaun to be
able to enter that value. That means I'm gonna want
the input function here and I'm gonna make sure I
include a descriptive prompt so Deshaun knows what value to enter. To test that it works,
I'm gonna run the program and imagine I'm Deshaun trying to generate a new contract for a client. I enter in the client's name, and then it spits out the
first paragraph of my contract. Woo, I have a prototype working. I'm gonna take this back to
Deshaun and see what he thinks. Once I get his feedback,
I can come back in and follow this pattern to generate the rest of the contract, or maybe you wanna give it a try.