206 lines
5.5 KiB
Plaintext
206 lines
5.5 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# 1. [Rock-paper-scissors](https://en.wikipedia.org/wiki/Rock%E2%80%93paper%E2%80%93scissors) \n",
|
|
"Implement `rock_paper_scissors` function which takes the player's rock-paper-scissors choice as an input (as integer), randomly selects the choice of the computer and reveals it (prints) and finally announces (prints) the result. The function should return `PLAYER_WINS`, `COMPUTER_WINS` or `TIE`."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"editable": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Constants, you should use these in your implementation\n",
|
|
"ROCK = 1\n",
|
|
"PAPER = 2\n",
|
|
"SCISSORS = 3\n",
|
|
"\n",
|
|
"PLAYER_WINS = \"Player wins!! Woop woop!\"\n",
|
|
"COMPUTER_WINS = \"Robocop wins :-(\"\n",
|
|
"TIE = \"It's a tie!\""
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Your implementation here"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Once you have finished the implementation of `rock_paper_scissors` function, you can check if it works as expected by playing the game:"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def play_rps():\n",
|
|
" print(\"Welcome to play rock-paper-scissors\")\n",
|
|
" print(\"The options are:\\nrock: 1\\npaper: 2\\nscissors: 3\")\n",
|
|
"\n",
|
|
" result = TIE\n",
|
|
" while result == TIE:\n",
|
|
" player_choice = input(\"Give your choice\\n\")\n",
|
|
"\n",
|
|
" if not player_choice in [\"1\", \"2\", \"3\"]:\n",
|
|
" print(\"Invalid choice\")\n",
|
|
" continue\n",
|
|
"\n",
|
|
" result = rock_paper_scissors(int(player_choice))\n",
|
|
"\n",
|
|
"\n",
|
|
"if __name__ == \"__main__\":\n",
|
|
" play_rps()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"If you copy the code from above cells into a single .py file, you have a rock-paper-scissor command line game!"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# 2. Data analyzer\n",
|
|
"Implement `DataAnalyzer` class which has the following specification:\n",
|
|
"* `__init__` takes one argument which is a path to the file to be analyzed\n",
|
|
"* `total_samples` method returns the amount of the data samples in the file\n",
|
|
"* `average` method returns the average of the data samples in the file\n",
|
|
"* `median` method returns the median of the data samples in the file\n",
|
|
"* `max_value` method returns the maximum value of the data samples in the file\n",
|
|
"* `min_value` method returns the minimum value of the data samples in the file\n",
|
|
"* `create_report` method returns a report (string) of the file in the following format:\n",
|
|
"\n",
|
|
"```\n",
|
|
"Report for <filename>\n",
|
|
"samples: x\n",
|
|
"average: x.xx\n",
|
|
"median: xx.xx\n",
|
|
"max: xx.xx\n",
|
|
"min: x.xx\n",
|
|
"```\n",
|
|
" \n",
|
|
"Note that average, median, max, and min should be presented with two decimal places in the report.\n",
|
|
"\n",
|
|
"The format of the input file is comma separated and the file contains only numeric values.\n",
|
|
"\n",
|
|
"If there is no data in the input file (empty file), `NoData` exception should be raised. Note: `NoData` should be your custom exception."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Your implementation here"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let's verify it works."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"editable": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"from pathlib import Path\n",
|
|
"\n",
|
|
"WORKING_DIR = Path.cwd()\n",
|
|
"DATA_DIR = WORKING_DIR.parent / \"data\"\n",
|
|
"DATA_FILE = DATA_DIR / \"random_data.txt\"\n",
|
|
"\n",
|
|
"da = DataAnalyzer(DATA_FILE)\n",
|
|
"\n",
|
|
"assert da.total_samples() == 20\n",
|
|
"assert da.average() == 49.35\n",
|
|
"assert da.median() == 47.5\n",
|
|
"assert da.max_value() == 94\n",
|
|
"assert da.min_value() == 4\n",
|
|
"\n",
|
|
"report = da.create_report()\n",
|
|
"print(report)\n",
|
|
"\n",
|
|
"expected_report = (\n",
|
|
" \"Report for random_data.txt\\n\"\n",
|
|
" \"samples: 20\\n\"\n",
|
|
" \"average: 49.35\\n\"\n",
|
|
" \"median: 47.50\\n\"\n",
|
|
" \"max: 94.00\\n\"\n",
|
|
" \"min: 4.00\"\n",
|
|
")\n",
|
|
"assert report == expected_report"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"Let's check that it raises `NoData` with empty file."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"editable": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"EMPTY_FILE = DATA_DIR / \"empty_file.txt\"\n",
|
|
"try:\n",
|
|
" da_empty = DataAnalyzer(EMPTY_FILE)\n",
|
|
"except NoData:\n",
|
|
" print(\"All ok :)\")\n",
|
|
"else: # There was no exception\n",
|
|
" assert False"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.11.0"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|