Not logged in
Talk
Contributions
Create account
Log in
Navigation
Main page
About
People
Publications
Teaching
Resources
Research Blog
Wiki Functions
Recent changes
Help
Licensing
Page
Discussion
Edit
View history
Editing
DS4UX (Spring 2016)/Day 3 follow up
From CommunityData
Jump to:
navigation
,
search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Here are some important concepts that we didn't have a chance to go into in great detail last week. You can use the sections below to review the concepts individually. You can also review how they work together in <code>math_game.py</code>, which is included in [http://jtmorgan.net/ds4ux/week4/lecture.zip the week 4 lecture files.] ===Return random values with the <code>random</code> module=== Use <code>random.choice()</code> to select items at random from a list. <pre> >>> import random >>> my_list = ["terry j.","john","parrot","michael","terry g.", "graham", "llama"] >>> random.choice(my_list) 'graham' >>> random.choice(my_list) 'terry j.' >>> </pre> Use <code>random.sample()</code> to gather a given number of random items from a list. The first argument you pass to the <code>random.sample()</code> function is the set of items you are sampling from. The second argument is the number of items you want to gather from that set. <pre> >>> random.sample(my_list,3) ['terry j.', 'llama', 'michael'] </pre> Use <code>random.randint()</code> to gather a random number from a list of numbers. You specify the list of sequential numbers by passing the starting number as the first argument, and the final number as the last argument. Unlike with <code>range()</code> function discussed below, when you use <code>randint()</code> both the first and last numbers you specify are ''included'' in the set you are sampling from. <pre> >>> random.randint(1,10) 8 >>> random.randint(1,10) 3 >>> random.randint(1,10) 10 >>> </pre> ===Generating a list of numbers easily with <code>range()</code>=== <pre> >>> range(5) [0, 1, 2, 3, 4] >>> for i in range(5): ... print("Hi" * i) ... Hi HiHi HiHiHi HiHiHiHi</pre> The <code>range()</code> function returns a list of numbers. This is handy for when you want to generate a list of numbers on the fly instead of creating the list yourself. >>> range(5) [0, 1, 2, 3, 4] Use <code>range</code> when you want to loop over a bunch of numbers in a list, or perform an operation a certain number of times: >>> numbers = range(5) >>> for number in numbers: ... print(number * number) ... 0 1 4 9 16 We could rewrite the above example like this: >>> for number in range(5): ... print(number * number) ... 0 1 4 9 16 You can also set the start, end, and increment value (called "step") for a range. >>> for i in range(2,20,2): ... print(i) 2 4 6 8 10 12 14 16 18 === Get user input with <code>input()</code> === >>> for i in range(100): ... my_input = input("Please type something> ") ... if my_input == "Quit": ... print("Goodbye!") ... break ... else: ... print("You said: " + my_input) ... Please type something> Hello You said: Hello Please type something> How are you? You said: How are you? Please type something> Quit Goodbye! >>> Things to remember about <code>input()</code> *Input() simply asks the user to type something. *You can test out input() interactively. Just go into the python interpreter and type: input("What's your favorite color?") *The stuff that goes inside the parentheses is the "prompt". It's a string, and should be surrounded by quotes. When you run your program, the prompt text will be shown to the user right to the left of the blinking cursor where they will type their input. *Python will ask the user to type something at the point in the script where input() is called. Remember that Python executes scripts from top to bottom, left to right. If you put input inside a loop, it will ask the user to type something every time the loop is executed in your script. *What you DO with that user input is up to you. The best thing to do is to save it as a variable, i.e. user_name = input("Please type your name") *Python saves user input as a string, so if the user types "Daria" in the example above, then user_name will equal "Daria". *Once you've saved your user's input, you can use it like any other string variable. In the case of the babynames challenges, you probably want to compare it with the keys in one of the babynames dictionaries (ssadata.boys or ssadata.girls), so that you can find out how many people share that name. These keys are also strings. *REMEMBER: the keys in the babynames dictionaries are all in lowercase, but you can't necessarily control how a user will type their input--it's natural that people will want to capitalize their own name! Fortunately, there are string methods (https://docs.python.org/3/library/stdtypes.html#string-methods (Links to an external site.)) that will convert any string into all lowercase. You can make a string lowercase by adding .lower() to the end of the string (or the variable that holds the string)! === Iterating an indeterminate number of times with <code>while</code> loops === Use <code>while</code> loops when you don't know how many times you want to repeat ("iterate") an operation. grocery_list = [] testAnswer = input('Press y if you want to enter more groceries: ') while testAnswer == 'y': food = input('Next item:') grocery_list.append(food) testAnswer = input('Press y if you want to enter more groceries: ') print('Your grocery list:') for food in grocery_list: print(food) Most of the time, you will find that <code>for</code> loops are more common for the kind of coding that you will be doing. For example, if you are reading through a CSV file, a <code>for</code> loop makes perfect sense: there are a set number of lines in the file, and you want to loop through the file line by line until you reach the end of the file. However, whenever your code is accepting input from a person or an API, you may find that you don't ''know'' ahead of time how many times you will need to perform an operation before stopping. In these cases, it's useful to know how to keep looping until a particular condition is met, and then stop. ===Splicing list items together with <code>.join</code>=== Use <code>.join()</code> when you have a list of string items that you want to join together into a single string. You specify the DELIMITER (the thing you want to separate the items) in quotes first, then call the <code>join()</code> function by appending a dot (".") followed by the word join and—inside the parentheses—the list that you want to join together. <pre> >>> print("The members of Monty Python are: %s" % (", ".join(my_list))) The members of Monty Python are: terry j., john, parrot, michael, terry g., graham, llama, eric </pre> === Putting it all together with a math game === <source lang="Python"> """ It uses the concepts that we just reviewed (random, range, input, and while) to build a math guessing game. random.choice, range, input, while, and join. This program asks people to add together two random numbers between 1 and 1000, and keep asking them new questions as long as they gave the answer right to the previous math problem. Once they give an incorrect answer, it prints out how many they got right, and also prints all their correct responses using join. """ import random numbers_to_add = list(range(1,1001)) correct_answers = [] true_answer = 0 your_answer = 0 while true_answer == your_answer: num1 = random.choice(numbers_to_add) num2 = random.choice(numbers_to_add) true_answer = num1 + num2 your_answer = int(input("%d + %d = " % (num1,num2))) if your_answer == true_answer: print("Correct! Let's try another.") correct_answers.append("%d + %d = %s" % (num1, num2, your_answer)) else: print("Incorrect!") print("You got %d problems right:" % (len(correct_answers))) print(", ".join(correct_answers)) </source> [[Category:DS4UX (Spring 2016)]]
Summary:
Please note that all contributions to CommunityData are considered to be released under the Attribution-Share Alike 3.0 Unported (see
CommunityData:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:
Cancel
Editing help
(opens in new window)
Tools
What links here
Related changes
Special pages
Page information