Reputation: 13
So I’ve created a very basic program that rolls a dice a given number of times, and then displays who wins the game. I’ve tried to print the results as they go along with the roll #.
The problem I’m having is the output seems weirdly, an indecipherably (at least to my eyes) inconsistent (ie: sometimes it will show the roll #, sometimes it won’t.
Besides how much cleaner I could make this code, what am I doing that’s producing inconsistent roll # printing?
Code as follows:
import random
print("Let's play a little game!")
print("who is the most popular number on a die?")
print("Lets find out!")
def HighRolla():
ones = 0
twos = 0
threes = 0
fours = 0
fives = 0
sixes = 0
tries = 1
num_rolls = int(input("How many guesses?"))
for roll in range(num_rolls):
ran_num = random.randint(1, 6)
if ran_num == 1:
print(f"Roll {tries}: One for the ones")
ones += 1
elif ran_num == 2:
print("Roll {tries}: Two Two look at my shoe")
twos += 1
elif ran_num == 3:
print("Roll {tries}: THREE!! I'm free'")
threes += 1
elif ran_num == 4:
print("Roll {tries}: F0ar equals m0ar")
fours += 1
elif ran_num == 5:
print("Roll {tries}: Five five don't step in a bee hive'")
fives += 1
elif ran_num == 6:
print("Roll {tries}: Super Sixes - Yeharrrr!")
sixes += 1
rolls += 1
tries += 1
print(f"Final scores are: \n1: {ones}\n2: {twos}\n3: {threes}\n4: {fours}\n5: {fives}\n6: {sixes}")
HighRolla()’’’
Upvotes: 0
Views: 53
Reputation:
To answer your question: You forgot the f
at the start of the strings in the print statements for 2 through 6. Therefore, it prints the actual text {tries} instead of the value.
In addition, I'd recommend:
rolls
before using it, and you also set tries
to 1 instead of 0. There is also no use for rolls
.defaultdict
returns a new dictionary-like object, where the first argument provides the initial value for the default_factory._
.Implementing those steps would make your code much shorter and more pythonic.
Putting it all together:
import random
from collections import defaultdict
print("Let's play a little game!")
print("who is the most popular number on a die?")
print("Lets find out!")
def high_rolla():
num_rolls = int(input("How many guesses?"))
random_results = defaultdict(int)
tries = 0
random_to_print = {1: "One for the ones",
2: "Two Two look at my shoe",
3: "THREE!! I'm free'",
4: "F0ar equals m0ar",
5: "Five five don't step in a bee hive'",
6: "Super Sixes - Yeharrrr!"}
for roll in range(num_rolls):
ran_num = random.randint(1, 6)
tries += 1
print(f"Roll {tries}: " + random_to_print[ran_num])
random_results[ran_num] += 1
print("Final scores are: ")
for key, value in random_results.items():
print(str(key) + " : " + str(value))
high_rolla()
Output:
Let's play a little game!
who is the most popular number on a die?
Lets find out!
How many guesses?3
Roll 1: Two Two look at my shoe
Roll 2: Two Two look at my shoe
Roll 3: One for the ones
Final scores are:
2 : 2
1 : 1
Upvotes: 1
Reputation: 962
The problem is that you don't use f-Strings correctly. If you want your variables to be replaced inside curly brackets you need to put an "f" in front of your string.
You could also use a dictionary or an array to make your code clearer and more readable, like so:
import random
print("Let's play a little game!")
print("who is the most popular number on a die?")
print("Lets find out!")
def HighRolla():
roll_counts = [0] * 6 # Creates an array of 6 zeroes
roll_messages = [
"One for the ones",
"Two Two look at my shoe",
"THREE!! I'm free'",
"F0ar equals m0ar",
"Five five don't step in a bee hive'",
"Super Sixes - Yeharrrr!"
]
num_rolls = int(input("How many guesses?"))
for roll in range(num_rolls):
ran_num = random.randint(1, 6)
roll_counts[ran_num-1] += 1
print(f"Roll {roll}: {roll_messages[ran_num-1]}")
print(f"Final scores are:")
print("\n".join([f"{idx+1}: {roll_count}" for idx, roll_count in enumerate(roll_counts)]))
HighRolla()
Upvotes: 1