Python Statistics File - python

I've created a python guessing game but now I want to be able to save the game statistics to a file at the end of each game. For each game the statistics to be recorded include the player name, their play status(win or loss) and the number of tries. I need the game to be saved in this format:
Username|status|number of guesses
If anyone could help me with that, that would be kind.
This is the code I have for the game:
import random
number = random.randint(1, 100)
player_name = input("Hello, What's your name?: ")
number_of_guesses = 0
print("Okay! "+ player_name+ " I am guessing a number between 1 and 100:")
max_guesses = random.randint(1, 6)
print("You have " + str(max_guesses) + " guesses. ")
while number_of_guesses < max_guesses:
guess = int(input())
number_of_guesses += 1
if guess < number:
print("Your guess is too low")
if guess > number:
print("Your guess is too high")
if guess == number:
break
if guess == number:
print("You guessed the number in " + str(number_of_guesses) + " tries!")
else:
print("You did not guess the number, the number was " + str(number))
f = open("Statistics.txt", "a")
f.write(player_name), (number_of_guesses)
f.close()
f = open("Statistics.txt", "r")
print(f.read())

Related

How do I store the results of a function into a list of some sort over time in Python?

So I'm refreshing what little I knew of Python before and playing around with some beginner projects. I'm toying arond with it now, and I'm just trying to learn and see what I can do. I made a "Guessing Game" and turned it into a function. I want to store these reults in a list each time it is used. I want the results to automatically go to the list when the game is completed and then to be able to print the list when desired.
I'm not sure if I need to create a new function for this, or if I should be creating this within my current "guessing_game" function. I've tried to create a list previously, but I'm not sure how to create and store the variable of the game result in order to add it into the list. I feel like this is probably a fairly simple problem, so I apologize if this is a dumb question.
def guessing_game():
import random
number = random.randint(1, 1000)
player_name = input("Enter name ")
number_of_guesses = 0
print('Howdy' + player_name + "Guess a number between 1 and 1000: ")
while number_of_guesses < 10:
guess = int(input())
number_of_guesses += 1
if guess < number:
print("Too Low, Joe")
if guess > number:
print("Too high, Sly")
if guess == number:
break
if guess == number:
print("You got it, Bobbit, in " + str(number_of_guesses) + " tries")
else:
print(" Well, yer were close, Stofe. Shoulda guessed " + str(number))
print(guessing_game())
You can create a list inside of the function, and then everytime they guess, you can store the guess inside the list. At the end, we can print the list.
def guessing_game():
import random
number = random.randint(1, 1000)
player_name = input("Enter name: ")
number_of_guesses = 0
guesses = []
print('Howdy ' + player_name + " Guess a number between 1 and 1000: ")
while number_of_guesses < 10:
guess = int(input())
guesses.append(guess)
number_of_guesses += 1
if guess < number:
print("Too Low, Joe")
if guess > number:
print("Too high, Sly")
if guess == number:
break
if guess == number:
print("You got it, Bobbit, in " + str(number_of_guesses) + " tries")
else:
print(" Well, yer were close, Stofe. Shoulda guessed " + str(number))
print("These were the numbers you guessed:")
for g in guesses:
print(g)
print(guessing_game())
What you need to do is create a list with something like val = []. I added it into the code and also added a formatting piece so it looks nice.
def guessing_game():
import random
guesses = []
number = random.randint(1, 1000)
guess = number / 2
player_name = input("Enter name ")
number_of_guesses = 0
print(f'Howdy {player_name}. Guess a number between 1 and 1000: ')
while number_of_guesses < 10:
guess = int(input('> '))
guesses = guesses + [guess]
number_of_guesses += 1
if guess < number:
print("Too Low, Joe")
if guess > number:
print("Too high, Sly")
if guess == number:
break
formatted_guesses = ''
for _ in range(len(guesses)):
if _ != len(guesses) - 1:
formatted_guesses = formatted_guesses + str(guesses[_]) + ', '
else:
formatted_guesses = formatted_guesses + str(guesses[_]) + '.'
if guess == number:
print("You got it, Bobbit, in " + str(number_of_guesses) + " tries")
print(f'You guessed {formatted_guesses}')
else:
print("Well, yer were close, Stofe. Shoulda guessed " + str(number))
print(f'You guessed {formatted_guesses}')
guessing_game()

How to add a won or loss variable

Hey I'm trying to add a variable for "won" or "loss", I already have a variable for players name and guesses allowed.
Any help would be kind thanks. This is the code I have so far:
import random
number = random.randint(1, 100)
player_name = input("Hello, What's your name?: ")
number_of_guesses = 0
print("Okay! "+ player_name+ " I am guessing a number between 1 and 100:")
max_guesses = random.randint(1, 6)
print("You have " + str(max_guesses) + " guesses. ")
while number_of_guesses < max_guesses:
guess = int(input())
number_of_guesses += 1
if guess < number:
print("Your guess is too low")
if guess > number:
print("Your guess is too high")
if guess == number:
break
if guess == number:
print("You guessed the number in " + str(number_of_guesses) + " tries!")
else:
print("You did not guess the number, the number was " + str(number))
f = open("statistics.txt", "a")
f.write =(player_name) (max_guesses)
f.close()
f = open("statistics.txt", "r")
print(f.read())
Maybe add befor you loop the variable won = False
And in the loop
if guess == number:
won = True
break
After the loop if the player don't find the nulber won will be false.
In the oter case it will be True
For saving
f.write( str(won) ) # convert to string

Number Guessing Game Python 3.8

A random number between 1 and 6, this represents a roll of a dice. The random number becomes the number of allowed guesses from the user. I cannot get the dice number to be same as amount of guesses allowed.
This is what I have so far:
import random
number = random.randint(1, 100)
player_name = input("Hello, What's your name?")
number_of_guesses = 0
print('okay! '+ player_name+ ' I am guessing a number between 1 and 100:')
min_value = 1
max_value = 6
print(random.randint(min_value, max_value))
while number_of_guesses < 5:
guess = int(input())
number_of_guesses += 1
if guess < number:
print("Your guess is too low")
if guess > number:
print("Your guess is too high")
if guess == number:
break
if guess == number:
print("You guessed the number in " + str(number_of_guesses) + " tries!")
else:
print("You did not guess the number, the number was " + str(number))
OK, this should fix your issues:
import random
number = random.randint(1, 100)
player_name = input("Hello, What's your name?")
number_of_guesses = 0
print('okay! '+ player_name+ ' I am guessing a number between 1 and 100:')
max_guesses = random.randint(1, 6)
print(f"You have {max_guesses} tries. ")
won = False
while number_of_guesses < max_guesses:
guess = int(input())
number_of_guesses += 1
if guess < number:
print("Your guess is too low")
if guess > number:
print("Your guess is too high")
if guess == number:
won = True
break
if won:
print("You guessed the number in " + str(number_of_guesses) + " tries!")
else:
print("You did not guess the number, the number was " + str(number))
However, this seems like some starting-out project, so it is important to understand what every code line is doing. In case you are not sure about anything, ask away :)
It looks like you're printing the random number, but not really using it. Could you try the following:
import random
number = random.randint(1, 100)
player_name = input("Hello, What's your name?")
number_of_guesses = 0
print('okay! '+ player_name+ ' I am guessing a number between 1 and 100:')
min_value = 1
max_value = 6
random_number = random.randint(min_value, max_value)
print(random_number)
while number_of_guesses < random_number:
guess = int(input())
if guess < number:
print("Your guess is too low")
if guess > number:
print("Your guess is too high")
if guess == number:
break
number_of_guesses += 1
if guess == number:
print("You guessed the number in " + str(number_of_guesses) + " tries!")
else:
print("You did not guess the number, the number was " + str(number))

NameError: name is not defined in Python code

Trying my first Python game with Python 3.6. Have tried several IDEs including Geany, and Wing Personal.
The error is:
Traceback (most recent call last):
File "game1.py", line 7, in
myName = input()
File "", line 1, in
#This is a guess the numbers game.
import random
guessesTaken = 0
print("Hello! What is your name?")
myName = input()
number = random.randint(1, 20)
print("Well, " + myName + ", I am thinking of a number between 1 and 20.")
while guessesTaken < 6:
print("Take a guess.")
guess = input()
guess = int(guess)
guessesTaken = guessesTaken + 1
if guess < number:
print("Your guess is too low.")
if guess > number:
break
if guess == number:
guessesTaken = str(guessesTaken)
print("Good job, " + myName + "! You guesses my number in " + guessesTaken + " guesses!")
if guess != number:
number = str(number)
print("Nope. The number I was thinking of was " + number)
This code has multiple indentation errors. Indentation generally means four spaces or one tab character. So, the code inside each if-else condition should be indented by one level.
Also, in one of the conditions:
if guess > number:
break
What do you expect that to do? Break is used to stop the loops. I guess you want to exit the program for this particular case. For that you can use return 0 or sys.exit().
Here is the code, properly indented:
#This is a guess the numbers game.
import random
import sys
guessesTaken = 0
print("Hello! What is your name?")
myName = input()
number = random.randint(1, 20)
print("Well, " + myName + ", I am thinking of a number between 1 and 20.")
while guessesTaken < 6:
print("Take a guess.")
guess = input()
guess = int(guess)
guessesTaken = guessesTaken + 1
if guess < number:
print("Your guess is too low.")
if guess > number:
sys.exit()
if guess == number:
guessesTaken = str(guessesTaken)
print("Good job, " + myName + "! You guesses my number in " + guessesTaken + " guesses!")
if guess != number:
number = str(number)
print("Nope. The number I was thinking of was " + number)

Why is this infinite while loop not working

def main():
import random
guesslist = []
ErrorTol = 5
guessesTaken = 0
print("|--------------------------------------------------------------------|")
print("| |")
print("|--------------------------------------------------------------------|")
print("| WELCOME! Please enter your name to begin this guessing game |")
print("|--------------------------------------------------------------------|")
print("| |")
print("|--------------------------------------------------------------------|")
myName = input()
again = ""
while again != "q":
number = random.uniform(-300, 300)
print('Well, ' + myName + ', I am thinking of a number between -300 and 300.')
while guessesTaken < 3:
print("Take a guess.")
guess = input()
guess = int(guess)
guesslist.append(guess)
guessesTaken = guessesTaken + 1
if guess < number:
print('Your guess is too low.')
if guess > number:
print('Your guess is too high.')
if guess == number or (abs(number - guess) <= ErrorTol):
break
if guess == number or (abs(number - guess) <= ErrorTol):
guessesTaken = guessesTaken
print('Good job, ' + myName + '! You guessed my number in ' + str(guessesTaken) + ' guesses!')
print("numbers you guessed:", guesslist)
else:
number = int(number)
print('Nope. The number I was thinking of was ' + str(number))
again = input("Hit 'q' to quit the program or any other keys to play the game again.").lower()[0]
main()
I can't get the program to loop properly, I have no clue what I did wrong! When I do not guess the number correctly, I should be able to hit any keys to try again and hit 'q' to try again, but when I hit any other keys it will not loop properly. Again, I have no clue what is wrong with this code.
You do not reset guessesTaken to zero so your program acts as if the user has already made there three guesses. Try something like this:
again = input("Hit 'q' to quit the program or any other keys to play the game again.").lower()[0]
guessesTaken = 0
You have to reset the amount of guesses when you check to see if the key is not equal to q. I put your code into another method, just better design!
Good luck!
import random
def main():
print("|--------------------------------------------------------------------|")
print("| |")
print("|--------------------------------------------------------------------|")
print("| WELCOME! Please enter your name to begin this guessing game |")
print("|--------------------------------------------------------------------|")
print("| |")
print("|--------------------------------------------------------------------|")
guess()
def guess():
guesslist = []
ErrorTol = 5
guessesTaken = 0
myName = input()
again = ""
while again != "q":
guessesTaken = 0
number = random.uniform(-300, 300)
print('Well, ' + myName + ', I am thinking of a number between -300 and 300.')
while guessesTaken < 3:
print("Take a guess.")
guess = input()
guess = int(guess)
guesslist.append(guess)
guessesTaken = guessesTaken + 1
if guess < number:
print('Your guess is too low.')
if guess > number:
print('Your guess is too high.')
if guess == number or (abs(number - guess) <= ErrorTol):
break
if guess == number or (abs(number - guess) <= ErrorTol):
guessesTaken = guessesTaken
print('Good job, ' + myName + '! You guessed my number in ' + str(guessesTaken) + ' guesses!')
print("numbers you guessed:", guesslist)
else:
number = int(number)
print('Nope. The number I was thinking of was ' + str(number))
again = input("Hit 'q' to quit the program or any other keys to play the game again.")

Categories

Resources