The Solution: For Loops10:04 with Kenneth Love
Here's how I did it!
Before we look at how I solve this, I wanna say that my solution 0:00 isn't necessarily the cleanest, fastest, or best. 0:03 My solutions also aren't the only solutions. 0:06 I tried to stick to solutions like the ones you might have come up with. 0:09 But please, experiment and 0:12 see if you can find better solutions than the ones that I'm showing. 0:13 Okay, so, problem 1 needed us to loop through the people and 0:16 see if they like to celebrate their birthday. 0:21 And if they do, we print out Happy Birthday and their name. 0:23 So, first, we'll do something like for person in BIRTHDAYS. 0:26 Because that will give us each person as we move through the loop. 0:32 And it'll put it into a variable called person, and 0:37 we'll move through everything that's in BIRTHDAYS, which is what we want. 0:39 So, we're calling this a person, not just a name, okay? 0:43 So that gives us the variable name person, 0:50 on the BIRTHDAYS as we go through the iterations of the loop. 0:53 The first time through, it'll be James, then Shawna, then Amaya, and so on. 0:55 Okay, so, the third item zero, one, two, three, the third item, 0:59 so index 2 for number three in the person tuple 1:06 is the true false boolean of whether or not they like to celebrate their birthday. 1:10 Now if that's true, we want to print out their name and the Happy Birthday string. 1:14 So, we can say if person which is the, this is the zero item, 1:18 this is the one item, this is the two item, this is the three item. 1:22 So the two item, if that's true, so just if person, cuz if it's true, 1:27 it will be true, if it's false, it will be false. 1:31 Then we want to print Happy Birthday. 1:34 I'll do a comma and then a placeholder, and I will format that with person , 1:38 which will get their name, all right? 1:44 So I'm gonna save that and then I'm gonna come down here and 1:48 I'm gonna run it, python for.py. 1:51 And I should see Happy Birthday, James, Happy Birthday, Shawna, 1:53 Happy Birthday, Kamal. 1:57 So James likes to celebrate, Shawna likes to celebrate, and 1:58 Kamal likes to celebrate. 2:02 So, great, that looks like we did that one. 2:03 Problem 2 is a bit trickier. 2:07 We have to look through all the people again, but this time, 2:10 we need to calculate their half birthday. 2:13 All right, so, let's start off, just like we did before, 2:14 with for person in BIRTHDAYS, so that would give us each person. 2:18 Now I'm gonna make a couple of variables here, so 2:22 that I can separate out their name and their birthdate. 2:25 So I'm gonna do name = person(0), cuz that's the first item in the person tuple. 2:28 And then I'm gonna do birthdate = person. 2:34 And then, I know that these are all day slash month. 2:38 So I want the day and I want the month as their own thing. 2:43 So I'm gonna split that on the forward slash. 2:46 So birthdate will now be a list, and the first item on the list will be the date. 2:49 And the second item on the list will be the month. 2:53 Cool, so now let's turn their birth month into a number so we can do math on it. 2:56 So we'll say birthdate, so the second item 3:04 in the birthdate, is the int(birthdate). 3:09 And then, this is the place where we might differ. 3:14 So, you can look at the birthdate and month, and 3:17 if it's bigger than six, then just subtract six from it. 3:19 That will stop you from doing what I'm gonna do, which is, 3:24 then I'm gonna go ahead I'm just gonna add 6 here. 3:27 So I'm always going to add 6. 3:29 And now if birthdate is greater than 12, 3:31 which means we looped around the year, and we don't wanna do that, 3:35 then, birthdate = birthdate- 12. 3:40 I can also do birthdate -= 12, 3:44 and that will give me the same output. 3:48 So, either way here, 3:52 it's up to you, whichever one of those you would like to do. 3:53 Okay, so now, I need to turn that back into a string 3:58 because I wanna join the two pieces back together. 4:02 So I'm gonna change birthdate to be 4:06 equal to the str(birthdate), okay? 4:10 And now, I'm going to print(name, 4:15 "/".join(birthdate)). 4:21 So that will print out their name. 4:25 And then on the same line, it will print the day and the month, 4:28 including the new month since we changed it, joined together by a slash. 4:31 Okay, so now that should do it. 4:35 So let's test that one. 4:38 So python for.py, and see if we can get this one on screen. 4:40 There we go. 4:48 So we'll just check a couple of these. 4:49 Let's see, let's check, Kamal was one we figured out before. 4:51 So 29/4 should become 29/10, and it did. 4:54 And let's see, 14/3 should become, 14/9, so it did. 4:58 And 12/6 should become 12/12. 5:04 Yeah, cool, I think we did that. 5:07 All right, let's move on to problem number 3. 5:11 So for problem number 3, we only wanna deal with school birthdays, 5:14 only people who have birthdays during the school year. 5:19 Now this one's kind of a combo of problems 1 and 2. 5:23 You should know the first couple of steps here, so 5:26 I'm not gonna really spell them out. 5:28 So for person in BIRTHDAYS, 5:30 you all know this part, name = person. 5:33 And birthdate = person.split on the slash. 5:39 And birthdate = int(birthdate), right? 5:46 That's familiar, that's what we just did. 5:53 Now I'm going to use the range function here to get a couple of ranges of numbers. 5:56 You could do this with greater than less than comparisons if you wanted. 6:00 So I'm gonna say if birthdate in range(1, 6:05 7), because I wanna get the months one through six. 6:10 And ranges stop when they get to the big number. 6:14 So this one will only go 1 to 6 and won't include the 7. 6:17 Or birthdate in range(9, 13), same idea. 6:20 Then we're going to print(name). 6:26 That should be the solution to that one. 6:29 So let's test that out. 6:31 And again, a little bit tricky to scroll here. 6:34 Let's just run it again, there we go. 6:40 Okay, so, if their birthdays are between 1 and 6 and 9 and 12, 6:42 so James is not, but Shawna is. 6:47 Shawna's the beginning of June, so she has a birthday, and that comes out. 6:52 Amaya is in February, so there's a birthday. 6:57 Kamal has one and Xan has one. 7:00 But Sam doesn't because Sam was born in July. 7:03 James doesn't because James was born in August. 7:06 So those two are the summer babies and they don't have school birthdays. 7:07 So they always get that end of the year birthday party or whatever, right? 7:12 Okay, so now let's try problem number 4. 7:17 Now I think problem number 4 might seem hard, but 7:21 I think it's actually really pretty simple. 7:24 It's an amalgamation of a lot of the things that we've already done. 7:27 So we need to get some data out of each person like before. 7:30 And then we need to create a bunch of Stars that they're celebrating and 7:33 if they're young enough. 7:35 So, this one shouldn't introduce too many new things. 7:36 So let's say for person in BIRTHDAYS. 7:41 And again, we're gonna do the name = person, age = person[-1]. 7:46 So that will get the last thing from person. 7:53 I could have also done person, but -1 is just a little bit easier. 7:55 And then celebrates is going to be person[-2]. 8:00 So up here we did, what did we do? 8:06 We did person. 8:08 They work out to be the same thing, 8:10 whether you go from the front of the tuple or to the back of the tuple. 8:12 And then we need to do an if condition. 8:18 So, if they celebrate, so if celebrates and 8:20 age is less than or = 10. 8:25 And age, if we look at our tuple again is a number, so 8:29 we don't have to convert it to anything. 8:32 So if they're under 10, we could've also done if age is less than 11. 8:35 But I think less than or 8:39 equal to 10 is more obvious of the logic we're trying to use. 8:41 Okay, so now, let's say stars is equal to an empty string. 8:46 And then for star in range(age), so for however old they are, 8:51 we're gonna make a range of that. 8:55 And then, we're going to do stars +=, and I'm gonna use an asterisk. 8:57 Now if you wanted to use some other fancier star, you can totally do that. 9:01 So then back here where the for loop is, 9:05 then at this point, we're gonna say print(name, stars). 9:08 So I'm gonna print the name and the stars on the same line. 9:13 Now, there's a much more clever way to build the string of stars too. 9:16 I'm gonna let you find that though. 9:19 And as a hint, look up list comprehension. 9:21 Okay, so let's test this one. 9:24 And again, let's just pull this up. 9:26 And we'll do python for.py. 9:29 And if we look up here at our list, so James is 9 and has a True. 9:34 Amaya is 8 but has a False. 9:41 And no one else is under the age of 10. 9:43 So James is the only one we should print out, we should print out nine stars. 9:45 So there's two, there's four, there's six, there's eight, there's nine, so 9:48 there's James and nine stars. 9:52 So great, we got all four problems. 9:55 Hopefully, you've got a bit of a better grasp on how to use for loops now. 9:57 In the next video, we'll check out the while loops problems. 10:00
You need to sign up for Treehouse in order to download course files.Sign up