Update High Score¶
Requirements:
read from a file
convert strings to numbers
if, else
write to a file
There is a file in the same directory of this code called high_score.txt
and it stores the all-time high score for some game. The contents of the file are a simple integer.
Example of the contents of high_score.txt
:
57
Write the function that will take a current_score
and compare it to the score in high_score.txt
. If the current score is larger, that becomes the new high score. Over-write the previous high score by writing to the file.
Remember: File contents are stored as strings, even if they contain what appears to be integers.
Starter Code¶
def check_and_update_high_score(current_score: int) -> None:
"""Updates the high score file if the current score is larger.
Args:
current_score: The score of the game that just ended.
"""
pass
Tests¶
import pytest
import os
import random
from main import check_and_update_high_score
def remove_file(file_name: str) -> None:
if os.path.exists(file_name):
os.remove(file_name)
def read_file(filename: str) -> None:
with open(filename, "r") as f:
return f.read().strip()
def write_to_file(filename: str, contents: str) -> None:
with open(filename, "w") as f:
f.write(contents)
@pytest.fixture(autouse=True)
def clear_test_files():
yield
if os.path.exists("high_score.txt"):
os.remove("high_score.txt")
def test_check_and_update_high_score_should_not_update_with_lower_score():
filename = "high_score.txt"
previous_high_score = "50"
write_to_file(filename, previous_high_score)
current_score = 40
check_and_update_high_score(current_score)
assert read_file(filename) == "50"
def test_check_and_update_high_score_should_update_with_higher_score():
filename = "high_score.txt"
previous_high_score = "50"
write_to_file(filename, previous_high_score)
current_score = 100
check_and_update_high_score(current_score)
assert read_file(filename) == "100"
def test_random_high_score():
filename = "high_score.txt"
previous_high_score = "50"
write_to_file(filename, previous_high_score)
current_score = random.randrange(51, 101)
check_and_update_high_score(current_score)
assert read_file(filename) == str(current_score)
def test_random_low_score():
filename = "high_score.txt"
previous_high_score = "50"
write_to_file(filename, previous_high_score)
current_score = random.randrange(0, 50)
check_and_update_high_score(current_score)
assert read_file(filename) == previous_high_score