Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Preview
Start a free Courses trial
to watch this video
Let's build the Quiz class that'll drive most of our game.
'Kay, so here we are back in quiz.py and
let's go ahead and finish this out.
0:00
I think I'm actually going to start down
here in the summary.
0:05
I think that will be faster and easier to
build first.
0:08
So let's handle this first one, this print
how many you got right.
0:12
So let's say, print and
0:16
You got something out of something right.
0:19
And then we'll do a format.
0:26
And we'll put in here self.total_correct
and len(self.questions).
0:28
And then we'll close that.
0:36
So, what's with this self.total_correct?
0:38
We're gonna have to remember to make a new
function.
0:42
So let's just make a note up here about
that.
0:44
Def total_correct.
0:45
Sorry, I keep saying function.
0:48
We're gonna begin new method.
0:50
Return the total number of correct
answers.
0:52
Okay.
0:57
So, there's that, and we, I said you got
blank out of blank.
0:58
We could do this as like five out of ten,
right?
1:01
I just like the, being a bit more verbose
there.
1:05
Okay, and then we wanna print how long it
took.
1:08
So, let's say It took you blank seconds
total.
1:11
And then we're gonna call .format.
1:18
And we're gonna put in self.end_time minus
self.start_time .seconds.
1:22
And then we're gonna close that off.
1:30
Okay, so now why do I have parentheses
around this?
1:33
This isn't like a function or anything.
1:36
So, the reason is because I want Python to
calculate what's in self.end_time
1:38
minus self.start_time.
1:43
I want to, to calculate that and give me
back this like temporary
1:45
unnamed invisible variable, which is the
time delta, right?
1:48
Because when we subtract one date time
from another, we get a time delta.
1:52
And then I wanna get the seconds off of
that.
1:56
So this is gonna be, you know, 50, or
whatever.
1:58
Okay.
2:02
We have to write this total correct.
2:03
How do we write total correct?
2:04
How do we figure this out?
2:05
Well, there's a couple different ways to
do this.
2:06
I would actually do this in a very
different way if
2:09
I was doing this just on my own.
2:12
But as far as like, teaching this, and
with what I've taught you so far,
2:14
cuz I haven't taught you like functional
programming, I so wanna do it.
2:18
Anyway though, since I haven't done that,
2:21
we've gotta do this in a slightly slower
way.
2:22
So, here's what we're gonna do.
2:24
We're gonna do total equals 0.
2:25
And for answer in self.answers, all right?
2:28
If answer[0], then total plus equals 1.
2:34
Return total, 'kay?
2:41
So, what are we doing here?
2:44
Well, so we're kinda doing two things.
2:45
First of all, we are saying that each
answer that's in self.answers is
2:46
going to have, it, it's going to be a list
or tuple whatever itself.
2:51
And we're saying that the first item is
going to be
2:55
either whether they got the question right
or whether they got the question wrong.
2:58
So, all I'm gonna put in here is I'm gonna
put in True or False.
3:01
So, what we're effectively saying here on
35 is the exact same thing
3:04
as us doing that, if answer[0] equal to
True.
3:08
But answer[0] will either be the literal
Boolean True or the literal Boolean False.
3:10
So, we don't have to have the equals True.
3:17
We can just say if answer[0].
3:20
So it's anything truthy.
3:22
This is why we would, we would them, we
would not wanna put in, say,
3:23
just an empty string, okay?
3:26
Well, actually that would come back False,
so that'd be okay.
3:27
We, we wanna be careful.
3:29
We wanna be sure to actually put in Trues
and Falses.
3:30
That's fine.
3:33
That's cool.
3:33
So, all we're missing now is everything
else.
3:34
Where do we start?
3:39
Let's actually go back here to the init
cuz I think the init's gonna be, and
3:40
[UNKNOWN] to generate ten questions,
right?
3:43
That's not that bad.
3:45
Okay.
3:46
So, let's hold on to what our
question_types are.
3:47
So, questions_types, we're gonna have two
of these.
3:51
We're gonna have Add and we're gonna have
Multiply.
3:53
Now, these are the class names that we
imported, right?
3:56
Exact same names there.
4:00
So these actually represent the classes.
4:03
So I could now do question_types[0], 1,
and 1,
4:04
and I would get an Add question of 1 plus
1.
4:09
You know, or 1 plus 5, or whatever.
4:13
So, this is now the class.
4:16
And this is when we call the class and
pass it arguments.
4:19
It's a little bit weird.
4:22
But it's something you're gonna see more
and more often, and
4:24
it's a way that we don't have to have
these like throw away extra variables.
4:26
Okay, so we've got our question_types.
4:31
Now we need to generate ten random
questions.
4:34
So, we need a for loop.
4:38
I wanna do this ten times.
4:39
So for _ in range(10).
4:41
Oh, what's with using the underscore?
4:44
Why an underscore?
4:47
Well, underscore tells Python
4:48
that we don't really care what the value
is that comes out.
4:50
I don't care that it's 0, 1, 2, 5, 8,
whatever.
4:53
I just want it to count this number of
times, right?
4:57
So, we're basically just saying, throw
away the value.
5:00
I don't care.
5:01
Just make sure the loop goes this number
of times.
5:02
So, I'm gonna do this ten times.
5:05
Now, this is a place where you might wanna
make the app a bit more extensible.
5:07
Maybe when you've instantiate the quiz,
you want to say, I want 20 questions, or
5:10
100 questions, or two questions, right?
5:15
Now we want to do something ten times.
5:17
And the thing we wanna do is we want to
take self.questions and
5:21
we want to append something to it.
5:25
What do we want to append?
5:27
Well, let's do this.
5:29
We can do question equals question_types.
5:30
Actually here, let's say num1 is
random.randint between 1 and 10.
5:34
And num2 equals random.randint between 1
and 10, 'kay?
5:41
Now, this is another place where we might
want to make this extensible,
5:45
to where they can say, oh, I want numbers
from 5 to 50.
5:51
Now, I have two random numbers, and
5:54
I wanna do a random.choice here cuz I want
it to
5:58
grab me a random question type, right?
6:03
I want to be either add or multiply.
6:07
Okay.
6:09
But when I build one of these classes, I
have to give it numbers, so
6:10
it gave me back my random number or my
random class.
6:13
Now we put in num1 and num2, 'kay?
6:16
And then this appends question.
6:19
So that's what this comment.
6:22
[BLANK_AUDIO]
6:23
Is right here.
6:25
Add these questions in the self.questions,
'kay?
6:26
So, this is kinda crazy looking.
6:30
It's kinda weird, right, calling this
random.choice thing,
6:32
and then putting this in?
6:35
It's weird, but it's something you're
gonna start to see more and more often.
6:36
This is fairly common, having a, a class
that just kind of,
6:41
is in this ephemeral state, and then we're
gonna use it.
6:44
We don't actually care about holding onto
that class at the time.
6:47
Okay, so we're gonna go through it, and we
put pass into each of these functions so
6:51
that they just sit there.
6:54
All right, and now let's test this out.
6:56
We're gonna come down here, and we're
gonna do python and from quiz import Quiz.
6:59
'Kay, so we've got a quiz.
7:06
So, let's say quiz1 equals Quiz().
7:07
And I should be able to do quiz1.answers
and get back nothing.
7:12
And I should be able do quiz1s.,.
7:16
quiz1.questions.
7:18
And look at that, I got a whole bunch of
questions.
7:19
So, I should be able to look at, say, the
first one and see what the text is.
7:23
So, 10 times 5.
7:31
Okay.
7:31
So, when I look at answer here, it should
be 50.
7:32
And it is.
7:34
Awesome.
7:35
[BLANK_AUDIO]
7:36
You need to sign up for Treehouse in order to download course files.
Sign up