Fixed Error
@ -0,0 +1,78 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
from tkinter import *
|
||||||
|
import tk
|
||||||
|
from tkinter import messagebox
|
||||||
|
import pyperclip
|
||||||
|
from random import choice, randint, shuffle
|
||||||
|
|
||||||
|
# ---------------------------- PASSWORD GENERATOR ------------------------------- #
|
||||||
|
#Password Generator Project
|
||||||
|
def generate_password():
|
||||||
|
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
|
||||||
|
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
|
||||||
|
symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+']
|
||||||
|
|
||||||
|
password_letters = [choice(letters) for _ in range(randint(8, 10))]
|
||||||
|
password_symbols = [choice(symbols) for _ in range(randint(2, 4))]
|
||||||
|
password_numbers = [choice(numbers) for _ in range(randint(2, 4))]
|
||||||
|
|
||||||
|
password_list = password_letters + password_symbols + password_numbers
|
||||||
|
shuffle(password_list)
|
||||||
|
|
||||||
|
password = "".join(password_list)
|
||||||
|
password_entry.insert(0, password)
|
||||||
|
pyperclip.copy(password)
|
||||||
|
# ---------------------------- SAVE PASSWORD ------------------------------- #
|
||||||
|
def save():
|
||||||
|
|
||||||
|
website = website_entry.get()
|
||||||
|
email = email_entry.get()
|
||||||
|
password = password_entry.get()
|
||||||
|
|
||||||
|
if len(website) == 0 or len(password) == 0 or len(email) == 0:
|
||||||
|
messagebox.showinfo(title="Oops!", message="Please make sure you haven't left any fields empty.")
|
||||||
|
else:
|
||||||
|
is_ok = messagebox.askyesno(title=website, message=f"These are the details entered: \nEmail: {email} "
|
||||||
|
f"\nPassword: {password} \n")
|
||||||
|
if is_ok:
|
||||||
|
with open("data.txt", "a") as data_file:
|
||||||
|
data_file.write(f"{website} | {email} | {password}\n")
|
||||||
|
website_entry.delete(0, END)
|
||||||
|
password_entry.delete(0, END)
|
||||||
|
email_entry.delete(0, END)
|
||||||
|
|
||||||
|
# ---------------------------- UI SETUP ------------------------------- #
|
||||||
|
window = Tk()
|
||||||
|
window.title("Password Manager")
|
||||||
|
window.config(padx=50, pady=50)
|
||||||
|
|
||||||
|
|
||||||
|
canvas = Canvas(height=200, width=200)
|
||||||
|
logo_img = PhotoImage(file="password_manager.png")
|
||||||
|
canvas.create_image(100, 100, image=logo_img)
|
||||||
|
canvas.grid(row=0, column=1)
|
||||||
|
|
||||||
|
#Labels
|
||||||
|
website_label = Label(text="Website:")
|
||||||
|
website_label.grid(row=1, column=0)
|
||||||
|
email_label = Label(text="Email/Username:")
|
||||||
|
email_label.grid(row=2, column=0)
|
||||||
|
password_label = Label(text="Password:")
|
||||||
|
password_label.grid(row=3, column=0)
|
||||||
|
|
||||||
|
#Entries
|
||||||
|
website_entry = Entry(width=49)
|
||||||
|
website_entry.grid(row=1, column=1, columnspan=2)
|
||||||
|
website_entry.focus()
|
||||||
|
email_entry = Entry(width=49)
|
||||||
|
email_entry.grid(row=2, column=1, columnspan=2)
|
||||||
|
password_entry = Entry(width=30)
|
||||||
|
password_entry.grid(row=3, column=1)
|
||||||
|
|
||||||
|
#Buttons
|
||||||
|
generate_password_button = Button(text="Generate Password", command=generate_password)
|
||||||
|
generate_password_button.grid(row=3, column=2)
|
||||||
|
add_button = Button(text="Add", width=46, command=save)
|
||||||
|
add_button.grid(row=4, column=1, columnspan=2)
|
||||||
|
|
||||||
|
window.mainloop()
|
||||||
8
Visual Studio Code Projects/NATO-alphabet-start/.idea/NATO-alphabet-start.iml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.12 (pythonProject1)" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
14
Visual Studio Code Projects/NATO-alphabet-start/.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredErrors">
|
||||||
|
<list>
|
||||||
|
<option value="E302" />
|
||||||
|
<option value="E265" />
|
||||||
|
<option value="E303" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
6
Visual Studio Code Projects/NATO-alphabet-start/.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
7
Visual Studio Code Projects/NATO-alphabet-start/.idea/misc.xml
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.12 (pythonProject1)" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (pythonProject1)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
8
Visual Studio Code Projects/NATO-alphabet-start/.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/NATO-alphabet-start.iml" filepath="$PROJECT_DIR$/.idea/NATO-alphabet-start.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
48
Visual Studio Code Projects/NATO-alphabet-start/.idea/workspace.xml
generated
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AutoImportSettings">
|
||||||
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
|
</component>
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="10bb84f0-be72-48b1-9e29-d101169d3bec" name="Changes" comment="" />
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectColorInfo"><![CDATA[{
|
||||||
|
"associatedIndex": 2
|
||||||
|
}]]></component>
|
||||||
|
<component name="ProjectId" id="2guhlBEpOv4s5qsC1WpmlGzdHJc" />
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
|
"keyToString": {
|
||||||
|
"Python.main.executor": "Run",
|
||||||
|
"RunOnceActivity.ShowReadmeOnStart": "true"
|
||||||
|
}
|
||||||
|
}]]></component>
|
||||||
|
<component name="SharedIndexes">
|
||||||
|
<attachedChunks>
|
||||||
|
<set>
|
||||||
|
<option value="bundled-python-sdk-babbdf50b680-746f403e7f0c-com.jetbrains.pycharm.community.sharedIndexes.bundled-PC-241.15989.155" />
|
||||||
|
</set>
|
||||||
|
</attachedChunks>
|
||||||
|
</component>
|
||||||
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="10bb84f0-be72-48b1-9e29-d101169d3bec" name="Changes" comment="" />
|
||||||
|
<created>1716553518691</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1716553518691</updated>
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="UnknownFeatures">
|
||||||
|
<option featureType="com.intellij.fileTypeFactory" implementationName="*.csv" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
17
Visual Studio Code Projects/NATO-alphabet-start/main.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import pandas
|
||||||
|
|
||||||
|
data = pandas.read_csv("nato_phonetic_alphabet.csv")
|
||||||
|
|
||||||
|
phonetic_dict = {row.letter: row.code for (index, row) in data.iterrows()}
|
||||||
|
print(phonetic_dict)
|
||||||
|
|
||||||
|
def generate_phoenetic():
|
||||||
|
word = input("Enter a word: ").upper()
|
||||||
|
try:
|
||||||
|
output_list = [phonetic_dict[letter] for letter in word]
|
||||||
|
except KeyError:
|
||||||
|
print("Sorry, only letters in the alphabet, but you can type numbers in words to get the answer.")
|
||||||
|
generate_phoenetic()
|
||||||
|
else:
|
||||||
|
print(output_list)
|
||||||
|
generate_phoenetic()
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
letter,code
|
||||||
|
A,Alfa
|
||||||
|
B,Bravo
|
||||||
|
C,Charlie
|
||||||
|
D,Delta
|
||||||
|
E,Echo
|
||||||
|
F,Foxtrot
|
||||||
|
G,Golf
|
||||||
|
H,Hotel
|
||||||
|
I,India
|
||||||
|
J,Juliet
|
||||||
|
K,Kilo
|
||||||
|
L,Lima
|
||||||
|
M,Mike
|
||||||
|
N,November
|
||||||
|
O,Oscar
|
||||||
|
P,Papa
|
||||||
|
Q,Quebec
|
||||||
|
R,Romeo
|
||||||
|
S,Sierra
|
||||||
|
T,Tango
|
||||||
|
U,Uniform
|
||||||
|
V,Victor
|
||||||
|
W,Whiskey
|
||||||
|
X,X-ray
|
||||||
|
Y,Yankee
|
||||||
|
Z,Zulu
|
||||||
|
3
Visual Studio Code Projects/flash-card-project-start/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"CodeGPT.apiKey": "CodeGPT Enterprise"
|
||||||
|
}
|
||||||
@ -0,0 +1,103 @@
|
|||||||
|
French,English
|
||||||
|
partie,part
|
||||||
|
histoire,history
|
||||||
|
chercher,search
|
||||||
|
seulement,only
|
||||||
|
police,police
|
||||||
|
pensais,thought
|
||||||
|
aide,help
|
||||||
|
demande,request
|
||||||
|
genre,kind
|
||||||
|
mois,month
|
||||||
|
frère,brother
|
||||||
|
laisser,let
|
||||||
|
car,because
|
||||||
|
mettre,to put
|
||||||
|
aucun,no
|
||||||
|
laisse,leash
|
||||||
|
eux,them
|
||||||
|
ville,city
|
||||||
|
chaque,each
|
||||||
|
parlé,speak
|
||||||
|
arrivé,come
|
||||||
|
devrait,should
|
||||||
|
bébé,baby
|
||||||
|
longtemps,long time
|
||||||
|
heures,hours
|
||||||
|
vont,will
|
||||||
|
pendant,while
|
||||||
|
revoir,meet again
|
||||||
|
aucune,any
|
||||||
|
place,square
|
||||||
|
parle,speak
|
||||||
|
compris,understood
|
||||||
|
savais,knew
|
||||||
|
étaient,were
|
||||||
|
attention,Warning
|
||||||
|
voici,here is
|
||||||
|
pourrais,could
|
||||||
|
affaire,case
|
||||||
|
donner,give
|
||||||
|
type,type
|
||||||
|
leurs,their
|
||||||
|
donné,given
|
||||||
|
train,train
|
||||||
|
corps,body
|
||||||
|
endroit,place
|
||||||
|
yeux,eyes
|
||||||
|
façon,way
|
||||||
|
écoute,listen
|
||||||
|
dont,whose
|
||||||
|
trouve,find
|
||||||
|
premier,first
|
||||||
|
perdu,lost
|
||||||
|
main,hand
|
||||||
|
première,first
|
||||||
|
côté,side
|
||||||
|
pouvoir,power
|
||||||
|
vieux,old
|
||||||
|
sois,be
|
||||||
|
tiens,here
|
||||||
|
matin,morning
|
||||||
|
tellement,so much
|
||||||
|
enfant,child
|
||||||
|
point,point
|
||||||
|
venu,came
|
||||||
|
suite,after
|
||||||
|
pardon,sorry
|
||||||
|
venez,come
|
||||||
|
devant,in front of
|
||||||
|
vers,towards
|
||||||
|
minutes,minutes
|
||||||
|
demandé,request
|
||||||
|
chambre,bedroom
|
||||||
|
mis,placed
|
||||||
|
belle,beautiful
|
||||||
|
droit,law
|
||||||
|
aimerais,would like to
|
||||||
|
aujourd'hui,today
|
||||||
|
mari,husband
|
||||||
|
cause,cause
|
||||||
|
enfin,finally
|
||||||
|
espère,hope
|
||||||
|
eau,water
|
||||||
|
attendez,Wait
|
||||||
|
parti,left
|
||||||
|
nouvelle,new
|
||||||
|
boulot,job
|
||||||
|
arrêter,Stop
|
||||||
|
dirait,would say
|
||||||
|
terre,Earth
|
||||||
|
compte,account
|
||||||
|
donne,given
|
||||||
|
loin,far
|
||||||
|
fin,end
|
||||||
|
croire,believe
|
||||||
|
chérie,sweetheart
|
||||||
|
gros,large
|
||||||
|
plutôt,rather
|
||||||
|
aura,will have
|
||||||
|
filles,girls
|
||||||
|
jouer,to play
|
||||||
|
bureau,officepart
|
||||||
|
histoire,history
|
||||||
|
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 10 KiB |
68
Visual Studio Code Projects/flash-card-project-start/main.py
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
from tkinter import *
|
||||||
|
import pandas
|
||||||
|
import random
|
||||||
|
|
||||||
|
BACKGROUND_COLOR = "#B1DDC6"
|
||||||
|
current_card = {}
|
||||||
|
|
||||||
|
to_learn = {}
|
||||||
|
|
||||||
|
#############################################################------FUNCTIONS------##########################################################################
|
||||||
|
|
||||||
|
try:
|
||||||
|
data = pandas.read_csv("data/words_to_learn.csv")
|
||||||
|
except FileNotFoundError:
|
||||||
|
original_data = pandas.read_csv("data/french_words.csv")
|
||||||
|
to_learn = original_data.to_dict(orient="records")
|
||||||
|
else:
|
||||||
|
to_learn = data.to_dict(orient="records")
|
||||||
|
|
||||||
|
def next_card():
|
||||||
|
global current_card, flip_timer
|
||||||
|
window.after_cancel(flip_timer)
|
||||||
|
current_card = random.choice(to_learn)
|
||||||
|
canvas.itemconfig(card_title, text="French", fill="black")
|
||||||
|
canvas.itemconfig(card_word, text=current_card["French"], fill="black")
|
||||||
|
canvas.itemconfig(card_background, image=card_front_img)
|
||||||
|
flip_timer = window.after(5000, func=flip_card)
|
||||||
|
|
||||||
|
def flip_card():
|
||||||
|
canvas.itemconfig(card_title, text="English", fill="white")
|
||||||
|
canvas.itemconfig(card_word, text=current_card["English"], fill="white")
|
||||||
|
canvas.itemconfig(card_background, image=card_back_img)
|
||||||
|
|
||||||
|
def is_known():
|
||||||
|
to_learn.remove(current_card)
|
||||||
|
data = pandas.DataFrame(to_learn)
|
||||||
|
data.to_csv("data/words_to_learn", index=False)
|
||||||
|
next_card()
|
||||||
|
|
||||||
|
#############################################################------WINDOWS------##########################################################################
|
||||||
|
|
||||||
|
window = Tk()
|
||||||
|
window.title("Flashy")
|
||||||
|
window.config(padx=50, pady=50, bg=BACKGROUND_COLOR)
|
||||||
|
flip_timer = window.after(5000, func=flip_card)
|
||||||
|
|
||||||
|
canvas = Canvas(width=800, height=526)
|
||||||
|
card_front_img = PhotoImage(file="images/card_front.png")
|
||||||
|
card_back_img = PhotoImage(file="images/card_back.png")
|
||||||
|
card_background = canvas.create_image(400, 263, image=card_front_img)
|
||||||
|
card_title = canvas.create_text(400, 150, text="", font=("Ariel", 40, "italic"))
|
||||||
|
card_word = canvas.create_text(400, 263, text="", font=("Ariel", 40, "bold"))
|
||||||
|
canvas.config(bg=BACKGROUND_COLOR, highlightthickness=0)
|
||||||
|
canvas.grid(row=0, column=0, columnspan=2)
|
||||||
|
|
||||||
|
#############################################################------BUTTONS------##########################################################################
|
||||||
|
|
||||||
|
cross_image = PhotoImage(file="images/wrong.png")
|
||||||
|
unknown_button = Button(image=cross_image, highlightthickness=0, command=next_card)
|
||||||
|
unknown_button.grid(row=1, column=0)
|
||||||
|
|
||||||
|
check_image = PhotoImage(file="images/right.png")
|
||||||
|
known_button = Button(image=check_image, highlightthickness=0, command=is_known)
|
||||||
|
known_button.grid(row=1, column=1)
|
||||||
|
|
||||||
|
next_card()
|
||||||
|
|
||||||
|
window.mainloop()
|
||||||
BIN
Visual Studio Code Projects/kanye-quotes-start/background.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
Visual Studio Code Projects/kanye-quotes-start/kanye.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
30
Visual Studio Code Projects/kanye-quotes-start/main.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
from tkinter import *
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
def get_quote():
|
||||||
|
response = requests.get("https://api.kanye.rest")
|
||||||
|
response.raise_for_status()
|
||||||
|
data = response.json()
|
||||||
|
quote = data["quote"]
|
||||||
|
canvas.itemconfig(quote_text, text=quote)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
window = Tk()
|
||||||
|
window.title("Kanye Says...")
|
||||||
|
window.config(padx=50, pady=50)
|
||||||
|
|
||||||
|
canvas = Canvas(width=300, height=414)
|
||||||
|
background_img = PhotoImage(file="Visual_Studio_Code_Projects/Kanye-quotes-start/background.png")
|
||||||
|
canvas.create_image(150, 207, image=background_img)
|
||||||
|
quote_text = canvas.create_text(150, 207, text="Kanye Quote Goes Here", width=250, font=("Arial", 15, "bold"), fill="white")
|
||||||
|
canvas.grid(row=0, column=0)
|
||||||
|
|
||||||
|
kanye_img = PhotoImage(file="kanye.png")
|
||||||
|
kanye_button = Button(image=kanye_img, highlightthickness=0, command=get_quote)
|
||||||
|
kanye_button.grid(row=1, column=0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
window.mainloop()
|
||||||
3
Visual Studio Code Projects/pomodoro-start/.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
21
Visual Studio Code Projects/pomodoro-start/.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredErrors">
|
||||||
|
<list>
|
||||||
|
<option value="E302" />
|
||||||
|
<option value="E265" />
|
||||||
|
<option value="E303" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
<inspection_tool class="PyShadowingBuiltinsInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredNames">
|
||||||
|
<list>
|
||||||
|
<option value="input" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
6
Visual Studio Code Projects/pomodoro-start/.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
7
Visual Studio Code Projects/pomodoro-start/.idea/misc.xml
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.8" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
8
Visual Studio Code Projects/pomodoro-start/.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/pomodoro-start.iml" filepath="$PROJECT_DIR$/.idea/pomodoro-start.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
8
Visual Studio Code Projects/pomodoro-start/.idea/pomodoro-start.iml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
87
Visual Studio Code Projects/pomodoro-start/main.py
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
from tkinter import *
|
||||||
|
import math
|
||||||
|
# ---------------------------- CONSTANTS ------------------------------- #
|
||||||
|
PINK = "#e2979c"
|
||||||
|
RED = "#e7305b"
|
||||||
|
GREEN = "#9bdeac"
|
||||||
|
YELLOW = "#f7f5dd"
|
||||||
|
FONT_NAME = "Courier"
|
||||||
|
WORK_MIN = 25
|
||||||
|
SHORT_BREAK_MIN = 5
|
||||||
|
LONG_BREAK_MIN = 20
|
||||||
|
reps = 0
|
||||||
|
timer = None
|
||||||
|
|
||||||
|
# ---------------------------- TIMER RESET ------------------------------- #
|
||||||
|
def reset_timer():
|
||||||
|
window.after_cancel(timer)
|
||||||
|
canvas.itemconfig(timer_text, text="00:00")
|
||||||
|
title_label.config(text="Timer")
|
||||||
|
check_marks.config(text="")
|
||||||
|
global reps
|
||||||
|
reps = 0
|
||||||
|
|
||||||
|
# ---------------------------- TIMER MECHANISM ------------------------------- #
|
||||||
|
def start_timer():
|
||||||
|
global reps
|
||||||
|
reps += 1
|
||||||
|
|
||||||
|
work_sec = WORK_MIN * 60
|
||||||
|
short_break_sec = SHORT_BREAK_MIN * 60
|
||||||
|
long_break_sec = LONG_BREAK_MIN * 60
|
||||||
|
|
||||||
|
if reps % 8 == 0:
|
||||||
|
count_down(long_break_sec)
|
||||||
|
title_label.config(text="Break", fg=RED)
|
||||||
|
elif reps % 2 == 0:
|
||||||
|
count_down(short_break_sec)
|
||||||
|
title_label.config(text="Break", fg=PINK)
|
||||||
|
else:
|
||||||
|
count_down(work_sec)
|
||||||
|
title_label.config(text="Work", fg=GREEN)
|
||||||
|
|
||||||
|
# ---------------------------- COUNTDOWN MECHANISM ------------------------------- #
|
||||||
|
def count_down(count):
|
||||||
|
|
||||||
|
count_min = math.floor(count / 60)
|
||||||
|
count_sec = count % 60
|
||||||
|
if count_sec < 10:
|
||||||
|
count_sec = f"0{count_sec}"
|
||||||
|
|
||||||
|
canvas.itemconfig(timer_text, text=f"{count_min}:{count_sec}")
|
||||||
|
if count > 0:
|
||||||
|
global timer
|
||||||
|
timer = window.after(1000, count_down, count - 1)
|
||||||
|
else:
|
||||||
|
start_timer()
|
||||||
|
marks = ""
|
||||||
|
work_sessions = math.floor(reps/2)
|
||||||
|
for _ in range(work_sessions):
|
||||||
|
marks += "✓"
|
||||||
|
check_marks.config(text=marks)
|
||||||
|
|
||||||
|
# ---------------------------- UI SETUP ------------------------------- #
|
||||||
|
window = Tk()
|
||||||
|
window.title("Pomodoro")
|
||||||
|
window.config(padx=100, pady=50, bg=YELLOW)
|
||||||
|
|
||||||
|
|
||||||
|
title_label = Label(text="Timer", fg=GREEN, bg=YELLOW, font=(FONT_NAME, 50))
|
||||||
|
title_label.grid(column=1, row=0)
|
||||||
|
|
||||||
|
canvas = Canvas(width=200, height=224, bg=YELLOW, highlightthickness=0)
|
||||||
|
tomato_img = PhotoImage(file="tomato.png")
|
||||||
|
canvas.create_image(100, 112, image=tomato_img)
|
||||||
|
timer_text = canvas.create_text(100, 130, text="00:00", fill="white", font=(FONT_NAME, 29, "bold"))
|
||||||
|
canvas.grid(column=1, row=1)
|
||||||
|
|
||||||
|
start_button = Button(text="Start", highlightthickness=0, command=start_timer)
|
||||||
|
start_button.grid(column=0, row=2)
|
||||||
|
|
||||||
|
reset_button = Button(text="Reset", highlightthickness=0, command=reset_timer)
|
||||||
|
reset_button.grid(column=2, row=2)
|
||||||
|
|
||||||
|
check_marks = Label(fg=GREEN, bg=YELLOW, font=(FONT_NAME, 15))
|
||||||
|
check_marks.grid(column=1, row=3)
|
||||||
|
|
||||||
|
window.mainloop()
|
||||||
BIN
Visual Studio Code Projects/pomodoro-start/tomato.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
3
Visual Studio Code Projects/quizzler-app-start/.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
21
Visual Studio Code Projects/quizzler-app-start/.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredErrors">
|
||||||
|
<list>
|
||||||
|
<option value="E302" />
|
||||||
|
<option value="E265" />
|
||||||
|
<option value="E303" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
<inspection_tool class="PyShadowingBuiltinsInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredNames">
|
||||||
|
<list>
|
||||||
|
<option value="input" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
6
Visual Studio Code Projects/quizzler-app-start/.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
7
Visual Studio Code Projects/quizzler-app-start/.idea/misc.xml
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.12 (pythonProject1)" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (pythonProject1)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
8
Visual Studio Code Projects/quizzler-app-start/.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/quizzler-app-start.iml" filepath="$PROJECT_DIR$/.idea/quizzler-app-start.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
8
Visual Studio Code Projects/quizzler-app-start/.idea/quizzler-app-start.iml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.12 (pythonProject1)" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
12
Visual Studio Code Projects/quizzler-app-start/data.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import requests
|
||||||
|
|
||||||
|
parameters = {
|
||||||
|
"amount": 10,
|
||||||
|
"type": "boolean",
|
||||||
|
"category": ""
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.get("https://opentdb.com/api.php?amount=20&type=boolean", params=parameters)
|
||||||
|
response.raise_for_status()
|
||||||
|
data = response.json()
|
||||||
|
question_data = data["results"]
|
||||||
BIN
Visual Studio Code Projects/quizzler-app-start/images/false.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
Visual Studio Code Projects/quizzler-app-start/images/true.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
21
Visual Studio Code Projects/quizzler-app-start/main.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from question_model import Question
|
||||||
|
from data import question_data
|
||||||
|
from quiz_brain import QuizBrain
|
||||||
|
from ui import QuizInterface
|
||||||
|
|
||||||
|
question_bank = []
|
||||||
|
for question in question_data:
|
||||||
|
question_text = question["question"]
|
||||||
|
question_answer = question["correct_answer"]
|
||||||
|
new_question = Question(question_text, question_answer)
|
||||||
|
question_bank.append(new_question)
|
||||||
|
|
||||||
|
|
||||||
|
quiz = QuizBrain(question_bank)
|
||||||
|
quiz_ui = QuizInterface(quiz)
|
||||||
|
|
||||||
|
# while quiz.still_has_questions():
|
||||||
|
# quiz.next_question()
|
||||||
|
|
||||||
|
print("You've completed the quiz")
|
||||||
|
print(f"Your final score was: {quiz.score}/{quiz.question_number}")
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
class Question:
|
||||||
|
|
||||||
|
def __init__(self, q_text, q_answer):
|
||||||
|
self.text = q_text
|
||||||
|
self.answer = q_answer
|
||||||
30
Visual Studio Code Projects/quizzler-app-start/quiz_brain.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import html
|
||||||
|
class QuizBrain:
|
||||||
|
|
||||||
|
def __init__(self, q_list):
|
||||||
|
self.question_number = 0
|
||||||
|
self.score = 0
|
||||||
|
self.question_list = q_list
|
||||||
|
self.current_question = None
|
||||||
|
|
||||||
|
def still_has_questions(self):
|
||||||
|
return self.question_number < len(self.question_list)
|
||||||
|
|
||||||
|
def next_question(self):
|
||||||
|
self.current_question = self.question_list[self.question_number]
|
||||||
|
self.question_number += 1
|
||||||
|
q_text = html.unescape(self.current_question.text)
|
||||||
|
return f"Q.{self.question_number}: {q_text} True or False: "
|
||||||
|
# user_answer = input(f"Q.{self.question_number}: {self.current_question.text} (True/False): ")
|
||||||
|
# self.check_answer(user_answer)
|
||||||
|
|
||||||
|
def check_answer(self, user_answer):
|
||||||
|
correct_answer = self.current_question.answer
|
||||||
|
if user_answer.lower() == correct_answer.lower():
|
||||||
|
self.score += 1
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
print(f"Your current score is: {self.score}/{self.question_number}")
|
||||||
|
print("\n")
|
||||||
70
Visual Studio Code Projects/quizzler-app-start/ui.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
from tkinter import *
|
||||||
|
from quiz_brain import QuizBrain
|
||||||
|
|
||||||
|
THEME_COLOR = "#375362"
|
||||||
|
|
||||||
|
class QuizInterface:
|
||||||
|
|
||||||
|
def __init__(self, quiz_brain: QuizBrain):
|
||||||
|
self.quiz = quiz_brain
|
||||||
|
|
||||||
|
self.window = Tk()
|
||||||
|
self.window.title("Quizzler")
|
||||||
|
self.window.config(padx=40, pady=40, bg=THEME_COLOR)
|
||||||
|
|
||||||
|
self.score_label = Label(text="Score: 0",
|
||||||
|
fg="white",
|
||||||
|
bg=THEME_COLOR,
|
||||||
|
font=("Times", 18, "bold")
|
||||||
|
)
|
||||||
|
self.score_label.grid(row=0, column=1)
|
||||||
|
|
||||||
|
self.canvas = Canvas(width=300, height=250, bg="white")
|
||||||
|
self.question_text = self.canvas.create_text(
|
||||||
|
150,
|
||||||
|
125,
|
||||||
|
width=280,
|
||||||
|
text="Some Question Text",
|
||||||
|
fill='black',
|
||||||
|
font=("Times", 20, "bold")
|
||||||
|
|
||||||
|
)
|
||||||
|
self.canvas.grid(row=1, column=0, columnspan=2, pady=50, padx=30)
|
||||||
|
|
||||||
|
true_image = PhotoImage(file="images/true.png")
|
||||||
|
false_image = PhotoImage(file="images/false.png")
|
||||||
|
self.true_button = Button(image=true_image, highlightthickness=0, bg=THEME_COLOR, fg=THEME_COLOR, command=self.true_pressed)
|
||||||
|
self.false_button = Button(image=false_image, highlightthickness=0, bg=THEME_COLOR, fg=THEME_COLOR, command=self.false_pressed)
|
||||||
|
self.true_button.grid(row=2, column=1)
|
||||||
|
self.false_button.grid(row=2, column=0)
|
||||||
|
|
||||||
|
self.get_next_question()
|
||||||
|
|
||||||
|
self.window.mainloop()
|
||||||
|
|
||||||
|
def get_next_question(self):
|
||||||
|
self.canvas.config(bg="white")
|
||||||
|
if self.quiz.still_has_questions():
|
||||||
|
self.score_label.config(text=f"Score: {self.quiz.score}")
|
||||||
|
q_text = self.quiz.next_question()
|
||||||
|
self.canvas.itemconfig(self.question_text, text=q_text)
|
||||||
|
else:
|
||||||
|
self.canvas.itemconfig(self.question_text, text="Hey looks like you were enjoying the quiz but I am sorry"
|
||||||
|
" to inform you that we have ran out of questions")
|
||||||
|
self.true_button.config(state="disabled")
|
||||||
|
self.false_button.config(state="disabled")
|
||||||
|
|
||||||
|
def true_pressed(self):
|
||||||
|
self.give_feedback(self.quiz.check_answer("True"))
|
||||||
|
|
||||||
|
def false_pressed(self):
|
||||||
|
is_right = self.quiz.check_answer("False")
|
||||||
|
self.give_feedback((is_right))
|
||||||
|
|
||||||
|
def give_feedback(self, is_right):
|
||||||
|
if is_right:
|
||||||
|
self.canvas.config(bg="lime green")
|
||||||
|
else:
|
||||||
|
self.canvas.config(bg="red")
|
||||||
|
|
||||||
|
self.window.after(1000, self.get_next_question)
|
||||||
3
Visual Studio Code Projects/turtle-crossing-start/.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
14
Visual Studio Code Projects/turtle-crossing-start/.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="PyPep8Inspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredErrors">
|
||||||
|
<list>
|
||||||
|
<option value="E302" />
|
||||||
|
<option value="E265" />
|
||||||
|
<option value="E303" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
6
Visual Studio Code Projects/turtle-crossing-start/.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
||||||
7
Visual Studio Code Projects/turtle-crossing-start/.idea/misc.xml
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.8" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (pythonProject1)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
||||||
8
Visual Studio Code Projects/turtle-crossing-start/.idea/modules.xml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/turtle-crossing-start.iml" filepath="$PROJECT_DIR$/.idea/turtle-crossing-start.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
8
Visual Studio Code Projects/turtle-crossing-start/.idea/turtle-crossing-start.iml
generated
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.12 (pythonProject1)" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
@ -0,0 +1 @@
|
|||||||
|
print("")
|
||||||
28
Visual Studio Code Projects/turtle-crossing-start/blah.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
from turtle import Turtle
|
||||||
|
|
||||||
|
t = Turtle()
|
||||||
|
t.penup()
|
||||||
|
t.goto(0, 0)
|
||||||
|
|
||||||
|
def draw_square(size, color):
|
||||||
|
t.pendown()
|
||||||
|
t.color(color)
|
||||||
|
for x in range(4):
|
||||||
|
t.forward(size)
|
||||||
|
t.right(90)
|
||||||
|
t.penup()
|
||||||
|
|
||||||
|
def draw_circle(size, color):
|
||||||
|
t.pendown()
|
||||||
|
t.color(color)
|
||||||
|
for x in range(36):
|
||||||
|
t.forward(size)
|
||||||
|
t.right(10)
|
||||||
|
t.penup()
|
||||||
|
|
||||||
|
|
||||||
|
while True:
|
||||||
|
t.speed(100)
|
||||||
|
draw_square(100, "red")
|
||||||
|
draw_circle(20, "blue")
|
||||||
|
t.right(10)
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
from turtle import Turtle
|
||||||
|
import random
|
||||||
|
|
||||||
|
COLORS = ["red", "orange", "yellow", "green", "blue", "purple"]
|
||||||
|
STARTING_MOVE_DISTANCE = 5
|
||||||
|
MOVE_INCREMENT = 10
|
||||||
|
|
||||||
|
|
||||||
|
class CarManager:
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.all_cars = []
|
||||||
|
self.car_speed = STARTING_MOVE_DISTANCE
|
||||||
|
|
||||||
|
def create_car(self):
|
||||||
|
random_chance = random.randint(1, 6)
|
||||||
|
if random_chance == 1:
|
||||||
|
new_car = Turtle("square")
|
||||||
|
new_car.shapesize(stretch_wid=1, stretch_len=2)
|
||||||
|
new_car.penup()
|
||||||
|
new_car.color(random.choice(COLORS))
|
||||||
|
random_y = random.randint(-400, 400)
|
||||||
|
new_car.goto(1000, random_y)
|
||||||
|
self.all_cars.append(new_car)
|
||||||
|
|
||||||
|
def move_cars(self):
|
||||||
|
for car in self.all_cars:
|
||||||
|
car.backward(self.car_speed)
|
||||||
|
|
||||||
|
def level_up(self):
|
||||||
|
self.car_speed += MOVE_INCREMENT
|
||||||
39
Visual Studio Code Projects/turtle-crossing-start/main.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import time
|
||||||
|
from turtle import Screen
|
||||||
|
from player import Player
|
||||||
|
from car_manager import CarManager
|
||||||
|
from scoreboard import Scoreboard
|
||||||
|
|
||||||
|
screen = Screen()
|
||||||
|
screen.setup(width=2000, height=1000)
|
||||||
|
screen.tracer(0)
|
||||||
|
|
||||||
|
player = Player()
|
||||||
|
car_manager = CarManager()
|
||||||
|
scoreboard = Scoreboard()
|
||||||
|
|
||||||
|
screen.listen()
|
||||||
|
screen.onkey(player.go_up, "Up")
|
||||||
|
|
||||||
|
game_is_on = True
|
||||||
|
while game_is_on:
|
||||||
|
time.sleep(0.1)
|
||||||
|
screen.update()
|
||||||
|
|
||||||
|
car_manager.create_car()
|
||||||
|
car_manager.move_cars()
|
||||||
|
|
||||||
|
#Detect collision with car
|
||||||
|
for car in car_manager.all_cars:
|
||||||
|
if car.distance(player) < 20:
|
||||||
|
game_is_on = False
|
||||||
|
scoreboard.game_over()
|
||||||
|
|
||||||
|
#Detect successful crossing
|
||||||
|
if player.is_at_finish_line():
|
||||||
|
player.go_to_start()
|
||||||
|
car_manager.level_up()
|
||||||
|
scoreboard.increase_level()
|
||||||
|
|
||||||
|
|
||||||
|
screen.exitonclick()
|
||||||
27
Visual Studio Code Projects/turtle-crossing-start/player.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
from turtle import Turtle
|
||||||
|
|
||||||
|
STARTING_POSITION = (0, -450)
|
||||||
|
MOVE_DISTANCE = 10
|
||||||
|
FINISH_LINE_Y = 490
|
||||||
|
|
||||||
|
|
||||||
|
class Player(Turtle):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.shape("turtle")
|
||||||
|
self.penup()
|
||||||
|
self.color("turquoise")
|
||||||
|
self.go_to_start()
|
||||||
|
self.setheading(90)
|
||||||
|
|
||||||
|
def go_up(self):
|
||||||
|
self.forward(MOVE_DISTANCE)
|
||||||
|
|
||||||
|
def go_to_start(self):
|
||||||
|
self.goto(STARTING_POSITION)
|
||||||
|
|
||||||
|
def is_at_finish_line(self):
|
||||||
|
if self.ycor() > FINISH_LINE_Y:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
from turtle import Turtle
|
||||||
|
|
||||||
|
FONT = ("Courier", 24, "normal")
|
||||||
|
|
||||||
|
|
||||||
|
class Scoreboard(Turtle):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.level = 1
|
||||||
|
self.hideturtle()
|
||||||
|
self.penup()
|
||||||
|
self.goto(-950, 450)
|
||||||
|
self.update_scoreboard()
|
||||||
|
|
||||||
|
def update_scoreboard(self):
|
||||||
|
self.clear()
|
||||||
|
self.write(f"Level: {self.level}", align="left", font=FONT)
|
||||||
|
|
||||||
|
def increase_level(self):
|
||||||
|
self.level += 1
|
||||||
|
self.update_scoreboard()
|
||||||
|
|
||||||
|
def game_over(self):
|
||||||
|
self.goto(0, 0)
|
||||||
|
self.write("GAME OVER ", align="center", font=FONT)
|
||||||
47
Visual Studio Code Projects/word_2_num.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
Created on Mon Aug 26 15:31:48 2024
|
||||||
|
|
||||||
|
@author: sameer
|
||||||
|
"""
|
||||||
|
|
||||||
|
#Program for converting a number entered as word into integer
|
||||||
|
#Another option is to use word2number library
|
||||||
|
|
||||||
|
def words_to_number(words):
|
||||||
|
num_words = {
|
||||||
|
"zero": 0, "one": 1, "two": 2, "three": 3, "four": 4,
|
||||||
|
"five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9,
|
||||||
|
"ten": 10, "eleven": 11, "twelve": 12, "thirteen": 13,
|
||||||
|
"fourteen": 14, "fifteen": 15, "sixteen": 16, "seventeen": 17,
|
||||||
|
"eighteen": 18, "nineteen": 19, "twenty": 20, "thirty": 30,
|
||||||
|
"forty": 40, "fifty": 50, "sixty": 60, "seventy": 70,
|
||||||
|
"eighty": 80, "ninety": 90, "hundred": 100, "thousand": 1000
|
||||||
|
}
|
||||||
|
|
||||||
|
words = words.lower().split()
|
||||||
|
total = 0
|
||||||
|
current = 0
|
||||||
|
|
||||||
|
for word in words:
|
||||||
|
if word in num_words:
|
||||||
|
scale = num_words[word]
|
||||||
|
if scale == 100:
|
||||||
|
current *= scale
|
||||||
|
elif scale == 1000:
|
||||||
|
current *= scale
|
||||||
|
total += current
|
||||||
|
current = 0
|
||||||
|
else:
|
||||||
|
current += scale
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Word '{word}' is not a valid number")
|
||||||
|
|
||||||
|
return total + current
|
||||||
|
|
||||||
|
# Example usage
|
||||||
|
while words_to_number.words:
|
||||||
|
user = input("guess a number: ")
|
||||||
|
|
||||||
|
print(words_to_number(user))
|
||||||