main
Jan-Niclas Loosen 10 months ago
parent 766c51f954
commit ea73e64fb1

@ -2,7 +2,7 @@
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="C:\Users\janni\anaconda3" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="C:\ProgramData\anaconda3" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="C:\Users\janni\anaconda3" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="C:\ProgramData\anaconda3" project-jdk-type="Python SDK" />
</project>

@ -5,8 +5,10 @@
</component>
<component name="ChangeListManager">
<list default="true" id="c8162e9c-0010-43df-bfbc-c294a3a64a5d" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/ha_05/loosen_janniclas_1540907_06.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/UNI_Python.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/UNI_Python.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ha_05/loosen_janniclas_1540907_06.py" beforeDir="false" afterPath="$PROJECT_DIR$/ha_05/loosen_janniclas_1540907_06.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -130,6 +132,8 @@
<workItem from="1701177311506" duration="2378000" />
<workItem from="1701179783052" duration="66000" />
<workItem from="1701623797251" duration="4657000" />
<workItem from="1701682053076" duration="3736000" />
<workItem from="1701687608304" duration="4000" />
</task>
<servers />
</component>
@ -139,6 +143,6 @@
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/UNI_Python$loosen_janniclas_1540907_05.coverage" NAME="loosen_janniclas_1540907_05 Coverage Results" MODIFIED="1701179684140" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ha_04" />
<SUITE FILE_PATH="coverage/UNI_Python$loosen_janniclas_1540907_03.coverage" NAME="loosen_janniclas_1540907_03 Coverage Results" MODIFIED="1701179808579" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ha_02" />
<SUITE FILE_PATH="coverage/UNI_Python$loosen_janniclas_1540907_06.coverage" NAME="loosen_janniclas_1540907_06 Coverage Results" MODIFIED="1701628625468" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ha_05" />
<SUITE FILE_PATH="coverage/UNI_Python$loosen_janniclas_1540907_06.coverage" NAME="loosen_janniclas_1540907_06 Coverage Results" MODIFIED="1701685752421" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ha_05" />
</component>
</project>

@ -45,25 +45,78 @@ class Game:
mode = "easy"
def __init__(self, rules, mode="easy"):
modes = ["easy", "hard", "god"]
self.mode = mode.lower()
if mode.lower() not in modes:
raise ValueError("Invalid mode. Please choose from: " + ', '.join(modes))
self.rules = rules
self.choices = {key: 0 for key in self.rules}
self.mode = mode
def __str__(self):
return "bot: " + str(self.scores["bot"]) + " - player: " + str(self.scores["player"])
def reset(self):
self.scores["player"] = 0
self.scores["player"] = 0
self.scores["bot"] = 0
self.choices = {key: 0 for key in self.rules}
def play(self, players_choice):
def match(self, games=5):
dist = 0
while sum(self.scores.values()) < games and dist < games / 2:
self.play()
dist = abs(self.scores["player"] - self.scores["bot"])
print("\n")
if self.scores["player"] > self.scores["bot"]:
print("The player wins.")
else:
print("The bot wins.")
def play(self):
players_choice = self._get_players_choice()
bots_choice = self._get_bots_choice(players_choice)
self.choices[players_choice] += 1
result = self.rules[players_choice][bots_choice]
if result > 0:
self.scores["player"] += 1
elif result < 0:
self.scores["bot"] += 1
print(self)
def _get_players_choice(self):
players_choice = input("Enter your move (" + ', '.join(self.rules.keys()) + "): ")
if players_choice not in self.rules:
raise ValueError("Invalid choice. Please choose from: " + ', '.join(self.rules.keys()))
return players_choice.lower()
def _get_bots_choice(self, players_choice):
bots_choice = ""
if self.mode == "easy":
bots_choice = self._easy()
elif self.mode == "hard":
bots_choice = self._hard()
elif self.mode == "god":
bots_choice = self._god(players_choice)
print("The bot chooses " + bots_choice)
return bots_choice
def _god(self, players_choice):
for choice in self.rules:
for bots_choice in self.rules:
if self.rules[bots_choice][players_choice] == 1:
return bots_choice
def _easy(self, choice):
def _easy(self):
bots_choice = random.choice(list(self.choices.keys()))
return bots_choice
def _hard(self, choice):
def _hard(self):
total = sum(self.choices.values())
if total == 0:
return self._easy()
probabilities = {choice: self.choices[choice] / total for choice in self.choices}
likely = random.choices(list(probabilities.keys()), weights=list(probabilities.values()))[0]
for choice in self.rules[likely].keys():
if self.rules[likely][choice] < 0:
return choice
text = '''
@ -82,19 +135,19 @@ Rudolph
# print(ceaser.decode(ceaser.encode(text)))
rock_paper_scissor = {
"rock": {"rock": 0, "paper": -1, "scissor": 1},
"paper": {"rock": 1, "paper": 0, "scissor": -1},
"scissor": {"rock": -1, "paper": 1, "scissor": 0}
"rock": {"rock": 0, "paper": -1, "scissor": 1},
"paper": {"rock": 1, "paper": 0, "scissor": -1},
"scissor": {"rock": -1, "paper": 1, "scissor": 0}
}
}
rock_paper_scissor_lizard_spock = {
"rock": {"rock": 0, "paper": -1, "scissor": 1, "lizard": 1, "spock": -1},
"paper": {"rock": 1, "paper": 0, "scissor": -1, "lizard": -1, "spock": 1},
"scissor": {"rock": -1, "paper": 1, "scissor": 0, "lizard": 1, "spock": -1},
"lizard": {"rock": -1, "paper": 1, "scissor": -1, "lizard": 0, "spock": 1},
"spock": {"rock": 1, "paper": -1, "scissor": 1, "lizard": -1, "spock": 0}
}
game = Game(rock_paper_scissor)
print(game.choices)
"rock": {"rock": 0, "paper": -1, "scissor": 1, "lizard": 1, "spock": -1},
"paper": {"rock": 1, "paper": 0, "scissor": -1, "lizard": -1, "spock": 1},
"scissor": {"rock": -1, "paper": 1, "scissor": 0, "lizard": 1, "spock": -1},
"lizard": {"rock": -1, "paper": 1, "scissor": -1, "lizard": 0, "spock": 1},
"spock": {"rock": 1, "paper": -1, "scissor": 1, "lizard": -1, "spock": 0}
}
# game = Game(rock_paper_scissor_lizard_spock, "hard")
# game.match(5)

Loading…
Cancel
Save