main
Jan-Niclas Loosen 9 months ago
parent 5b39a0f01a
commit 806d5f5bdd

@ -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>

@ -4,7 +4,12 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="c8162e9c-0010-43df-bfbc-c294a3a64a5d" name="Changes" comment="" />
<list default="true" id="c8162e9c-0010-43df-bfbc-c294a3a64a5d" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/ha_06/loosen_janniclas_1540907_07.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" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@ -18,28 +23,31 @@
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
&quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
&quot;git-widget-placeholder&quot;: &quot;main&quot;,
&quot;last_opened_file_path&quot;: &quot;C:/Universitaet/UNI_Python&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
&quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.lookFeel&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
"WebServerToolWindowFactoryState": "false",
"git-widget-placeholder": "main",
"last_opened_file_path": "C:/Universitaet/UNI_Python/ha_06",
"node.js.detected.package.eslint": "true",
"node.js.detected.package.tslint": "true",
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"settings.editor.selected.configurable": "preferences.lookFeel",
"vue.rearranger.settings.migration": "true"
}
}</component>
}]]></component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\Universitaet\UNI_Python\ha_06" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="C:\Universitaet\UNI_Python\ha_04" />
</key>
</component>
<component name="RunManager" selected="Python.loosen_janniclas_1540907_06">
<component name="RunManager" selected="Python.loosen_janniclas_1540907_07">
<configuration name="loosen_janniclas_1540907_03" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="UNI_Python" />
<option name="INTERPRETER_OPTIONS" value="" />
@ -106,8 +114,31 @@
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="loosen_janniclas_1540907_07" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="UNI_Python" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/ha_06" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/ha_06/loosen_janniclas_1540907_07.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Python.loosen_janniclas_1540907_07" />
<item itemvalue="Python.loosen_janniclas_1540907_06" />
<item itemvalue="Python.loosen_janniclas_1540907_03" />
<item itemvalue="Python.loosen_janniclas_1540907_05" />
@ -129,6 +160,7 @@
<workItem from="1701623797251" duration="4657000" />
<workItem from="1701682053076" duration="3736000" />
<workItem from="1701687608304" duration="4000" />
<workItem from="1702139628432" duration="570000" />
</task>
<servers />
</component>
@ -139,5 +171,6 @@
<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="1701787405612" 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_07.coverage" NAME="loosen_janniclas_1540907_07 Coverage Results" MODIFIED="1702140187482" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/ha_06" />
</component>
</project>

@ -0,0 +1,258 @@
import json
import os
import random
from matplotlib import pyplot as plt
class CeaserChiffre:
chiffre = {}
def __init__(self, chiffre=None):
if chiffre is not None:
self.chiffre = chiffre
else:
self.renew_chiffre()
def __str__(self):
return str(self.chiffre)
def renew_chiffre(self):
codes = {}
chars = list(range(0, 255))
for char in range(0, 255):
rand = random.choice(chars)
chars.remove(rand)
codes[chr(char)] = chr(rand)
self.chiffre = codes
def encode(self, text):
return self._work(text, self.chiffre)
def decode(self, text):
chiffre = {value: key for key, value in self.chiffre.items()}
return self._work(text, chiffre)
def _work(self, text, chiffre):
result = []
for i in range(len(text)):
if text[i] in chiffre:
result.append(chiffre[text[i]])
else:
result.append(text[i])
return ''.join(result)
class Game:
scores = {"player": 0, "bot": 0}
mode = "easy"
player = None
stop = False
def __init__(self, rules, mode="easy"):
self.mode = mode.lower()
self.rules = rules
self.player = None
self.scores = {"player": 0, "bot": 0}
self.stop = False
if os.path.exists("storage.json"):
load = input("Do you want to load the save game? (yes or no) ")
if str.lower(load) == "yes":
with open('storage.json', 'r') as file:
self.player = Player("player", {key: 0 for key in self.rules})
self._load_dump(json.load(file))
print("\n")
return
modes = ["easy", "hard", "god"]
if self.mode not in modes:
raise ValueError("Invalid mode. Please choose from: " + ', '.join(modes))
name = input("Enter your name: ")
self.player = Player(str.lower(name), {key: 0 for key in self.rules})
print("\n")
def __str__(self):
return "bot: " + str(self.scores["bot"]) + " - " + self.player.name + ": " + str(self.scores["player"])
def reset(self):
self.scores["player"] = 0
self.scores["bot"] = 0
self.player.choices = {key: 0 for key in self.rules}
if os.path.exists('storage.json'):
os.remove('storage.json')
def match(self, games=10):
while sum(self.scores.values()) < games and not self.stop:
self._play()
print("\n")
if self.scores["player"] > self.scores["bot"] and not self.stop:
print(self.player.name + " wins.")
self.reset()
elif not self.stop:
print("The bot wins.")
self.reset()
else:
print("The match is interrupted.")
def _play(self):
players_choice = self._get_players_choice()
if players_choice == "exit":
return self.exit()
bots_choice = self._get_bots_choice(players_choice)
self.player.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 exit(self):
backup = self._create_dump()
with open('storage.json', 'w') as file:
json.dump(backup, file)
self.stop = True
def _get_players_choice(self):
players_choice = input("Enter your move (" + ', '.join(self.rules.keys()) + " or exit): ").lower()
if players_choice not in self.rules and players_choice != "exit":
raise ValueError("Invalid choice. Please choose from: " + ', '.join(self.rules.keys()) + ", exit")
return players_choice
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 bots_choice in self.rules:
if self.rules[bots_choice][players_choice] == 1:
return bots_choice
def _easy(self):
bots_choice = random.choice(list(self.rules.keys()))
return bots_choice
def _hard(self):
total = sum(self.player.choices.values())
if total == 0:
return self._easy()
probabilities = {choice: self.player.choices[choice] / total for choice in self.player.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
def _create_dump(self):
player = self.player.create_dump()
dump = {
"player": player,
"mode": self.mode,
"rules": self.rules,
"scores": {
"player": self.scores["player"],
"bot": self.scores["bot"]
}
}
return json.dumps(dump)
def _load_dump(self, dump):
dump = json.loads(dump)
self.player.load_dump(dump["player"])
self.scores = dump["scores"]
self.mode = dump["mode"]
self.rules = dump["rules"]
class Player:
name = "player"
choices = {}
def __init__(self, name, choices):
self.choices = choices
self.name = name
def __str__(self):
return self.name
def create_dump(self):
dump = {
"name": self.name,
"choices": self.choices
}
return json.dumps(dump)
def load_dump(self, dump):
dump = json.loads(dump)
self.name = dump["name"]
self.choices = dump["choices"]
text = '''
Liebe/r Empfänger,
Herzliche Grüße aus dem hohen Norden! Ich hoffe, diese Nachricht erreicht dich in guter Verfassung und fügt einen Hauch
von festlicher Stimmung zu deinem Tag hinzu.
Ich wünsche dir Freude, Gelächter und einen festlichen Geist, der dein Herz erwärmt. Genieße die Magie der Feiertage!
Herzliche Grüße,
Rudolph
'''
# ceaser = CeaserChiffre()
# 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}
}
def throw_and_plot(n, c):
plot(throw_cubes(n, c))
def throw_cubes(n=100, cubes=2):
entries = {}
for i in range(n):
x = 0
for c in range(cubes):
x += random.randint(1, 6)
if x in entries:
entries[x] += 1
else:
entries[x] = 1
return entries
def plot(data):
x = list(data.keys())
y = list(data.values())
plt.bar(x, y)
plt.show()
throw_and_plot(10000, 2)
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_lizard_spock, "hard")
# game.match(10)
Loading…
Cancel
Save