From 253802ac88106f3c3bf7f544040290a76f0a2096 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Tue, 2 Aug 2022 20:34:11 +0300 Subject: [PATCH] Final changes and commit --- .gitignore | 1 + IKEA_scraper/ikea.py | 126 +++--- IKEA_scraper/web/index.html | 140 +++--- IKEA_scraper/web/style.css | 76 ++-- december/task_011221/task_011221_classwork.py | 54 +-- .../task_011221/task_011221_ss_scraper.py | 161 +++---- december/task_081221/task_081221.py | 13 +- december/task_081221/task_081221_homework.py | 164 +++---- .../task_081221/task_081221_homework_v1.1.py | 198 +++++---- december/task_081221/user_input.py | 45 +- december/task_151221/task2_151221.py | 8 +- december/task_151221/task_151221.py | 7 +- .../task_040222/classwork_040222_Cagulis.py | 85 ++-- february/task_110222/data_processing.py | 87 ++-- february/task_110222/task_110222.py | 15 +- february/task_180222/pd_pandas_k_f_cagulis.py | 306 +++++++------ february/task_180222/ss_scraper.py | 154 ++++--- january/task_050122/main.py | 24 +- january/task_050122/main_csv.py | 12 +- .../task_050122/main_vs_module_A_Bisenieks.py | 4 +- january/task_050122/module.py | 8 +- january/task_050122/task_050122_homework.py | 19 +- january/task_050122/task_190122.py | 113 ++--- november/task_061021/kcagulis_061021.py | 48 +- november/task_171121/task_171121.py | 106 ++--- november/task_241121/demo_ikea.py | 54 +-- november/task_241121/main.py | 35 +- oktober/task_061021/kcagulis_061021.py | 48 +- pygame/snake/source/assets/scripts/classes.py | 281 ++++++------ pygame/snake/source/assets/scripts/menu.py | 319 ++++++++------ pygame/snake/source/assets/scripts/score.py | 49 ++- pygame/snake/source/globals.py | 37 +- pygame/snake/source/snake.py | 159 +++---- .../space_invaders/source/space_invaders.py | 414 +++++++++--------- requirements.txt | 34 +- september/task_150921/kcagulis_150921.py | 107 ++--- september/task_220921/kcagulis_220921.py | 26 +- september/task_290921/kcagulis_290921.py | 88 ++-- 38 files changed, 1917 insertions(+), 1708 deletions(-) mode change 100755 => 100644 pygame/snake/source/snake.py diff --git a/.gitignore b/.gitignore index c927cdba..f95e8617 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ /december/task_081221/*.log **.pkl **test.py +pygame/snake/source/score.csv diff --git a/IKEA_scraper/ikea.py b/IKEA_scraper/ikea.py index 1764c813..4d6ada0f 100644 --- a/IKEA_scraper/ikea.py +++ b/IKEA_scraper/ikea.py @@ -8,56 +8,56 @@ HEADERS = { class IKEA: - def __init__(self, url): - self.url = 'https://www.ikea.lv/en/products/' + url + '?&&page=1&order=PRICEASC' + def __init__(self, url): + self.url = 'https://www.ikea.lv/en/products/' + url + '?&&page=1&order=PRICEASC' - def _get_paige_amount(self): - page_amount = 1 - page = requests.get(self.url, headers=HEADERS) - soup = BeautifulSoup(page.content, 'html.parser') + def _get_paige_amount(self): + page_amount = 1 + page = requests.get(self.url, headers=HEADERS) + soup = BeautifulSoup(page.content, 'html.parser') - # getting max page amount - for el in soup.find_all(class_='page-link'): - cropped_name = el.get_text().strip() - if cropped_name.isnumeric(): - cropped_name = int(cropped_name) - if cropped_name > page_amount: - page_amount = cropped_name + # getting max page amount + for el in soup.find_all(class_='page-link'): + cropped_name = el.get_text().strip() + if cropped_name.isnumeric(): + cropped_name = int(cropped_name) + if cropped_name > page_amount: + page_amount = cropped_name - return page_amount + return page_amount - def get_data(self): - prices = [] - names = [] - prices.clear() - names.clear() - # combined_list.clear() - position = self.url.find('page=') + 5 - for i in range(1, self._get_paige_amount() + 1): - url = self.url[:position] + str(i) + self.url[position + 1:] + def get_data(self): + prices = [] + names = [] + prices.clear() + names.clear() + # combined_list.clear() + position = self.url.find('page=') + 5 + for i in range(1, self._get_paige_amount() + 1): + url = self.url[:position] + str(i) + self.url[position + 1:] - page = requests.get(url, headers=HEADERS) - soup = BeautifulSoup(page.content, 'html.parser') + page = requests.get(url, headers=HEADERS) + soup = BeautifulSoup(page.content, 'html.parser') - # getting product name - for el in soup.find_all(class_='display-7 mr-2'): - cropped_name = el.get_text().strip() - names.append(cropped_name) + # getting product name + for el in soup.find_all(class_='display-7 mr-2'): + cropped_name = el.get_text().strip() + names.append(cropped_name) - # getting product price - for el in soup.find_all(class_='display-6'): - cropped_price = el.get_text().strip() - prices.append(cropped_price[:cropped_price.find("€") + 1]) + # getting product price + for el in soup.find_all(class_='display-6'): + cropped_price = el.get_text().strip() + prices.append(cropped_price[:cropped_price.find("€") + 1]) - combined_list = [i + " - " + j for i, j in zip(names, prices)] - if __name__ == '__main__': - SEPARATOR = "\n" - else: - SEPARATOR = "
" + combined_list = [i + " - " + j for i, j in zip(names, prices)] + if __name__ == '__main__': + SEPARATOR = "\n" + else: + SEPARATOR = "
" - output = SEPARATOR.join(str(elem) for elem in combined_list) - print(len(names)) - return output + output = SEPARATOR.join(str(elem) for elem in combined_list) + print(len(names)) + return output arm_chairs = IKEA('ikea-for-business/office/armchairs') @@ -67,29 +67,36 @@ bed_frames = IKEA('bedroom/beds-and-sofa-beds/bed-frames') bookcases = IKEA('living-room/bookcases/bookcases') boxes_and_baskets = IKEA('bedroom/sorting-solutions/boxes-and-baskets') candles = IKEA('kitchen/kitchen-decoration/candles') -ceiling_lamps_and_spotlights = IKEA('decoration/lighting/ceiling-lamps-and-spotlights') +ceiling_lamps_and_spotlights = IKEA( + 'decoration/lighting/ceiling-lamps-and-spotlights') chairs_and_benches = IKEA('dining-room/dining-seating/chairs-and-benches') -chest_of_drawers = IKEA('bedroom/chest-of-drawers-other-furniture/chest-of-drawers') -children_storage_furniture = IKEA('children-s-room/children-3-7/children-s-storage-furniture') +chest_of_drawers = IKEA( + 'bedroom/chest-of-drawers-other-furniture/chest-of-drawers') +children_storage_furniture = IKEA( + 'children-s-room/children-3-7/children-s-storage-furniture') curtains = IKEA('kitchen/curtains-blinds-and-fabrics/curtains') day_beds = IKEA('bedroom/beds-and-sofa-beds/day-beds') dining_tables = IKEA('dining-room/dining-tables/dining-tables') -dinnerware_and_serving = IKEA('kitchen/cookware-and-dinnerware/dinnerware-and-serving') +dinnerware_and_serving = IKEA( + 'kitchen/cookware-and-dinnerware/dinnerware-and-serving') glasses = IKEA('kitchen/cookware-and-dinnerware/glasses') home_desks = IKEA('home-office/desks/home-desks') interior_organisers = IKEA('home-office/wardrobes/interior-organisers') -kitchen_interior_organisers = IKEA('kitchen/kitchen-interior-organisers/kitchen-interior-organisers') +kitchen_interior_organisers = IKEA( + 'kitchen/kitchen-interior-organisers/kitchen-interior-organisers') light_bulbs = IKEA('bedroom/bedroom-lighting/light-bulbs') mattresses = IKEA('bedroom/mattresses/mattresses') mirrors = IKEA('kitchen/kitchen-decoration/mirrors') office_chairs = IKEA('home-office/work-seating-range/office-chairs') office_desks_and_tables = IKEA('home-office/desks/office-desks-and-tables') -open_shelving_units = IKEA('living-room/shelving-units-systems/open-shelving-units') +open_shelving_units = IKEA( + 'living-room/shelving-units-systems/open-shelving-units') pax_wardrobes = IKEA('ikea-for-business/retail/system-wardrobes') pendant_lamps = IKEA('ikea-for-business/retail/pendant-lamps') pillows = IKEA('bedroom/bedding/pillows') pots = IKEA('kitchen/cookware-and-dinnerware/pots') -quilt_covers_and_pillow_cases = IKEA('bedroom/bedding/quilt-covers-and-pillow-cases') +quilt_covers_and_pillow_cases = IKEA( + 'bedroom/bedding/quilt-covers-and-pillow-cases') quilts = IKEA('bedroom/bedding/quilts') rugs = IKEA('living-room/home-furnishing-rugs/rugs') sheets_and_pillow_cases = IKEA('bedroom/bedding/sheets-and-pillow-cases') @@ -100,22 +107,23 @@ solitaire_wardrobes = IKEA('bedroom/wardrobes/solitaire-wardrobes') system_cabinets = IKEA('living-room/solitaire-cabinets/system-cabinets') table_lamps = IKEA('bedroom/bedroom-lighting/table-lamps') towels = IKEA('bathroom/towels/towels') -toys_for_small_children = IKEA('children-s-room/children-3-7/toys-for-small-children') +toys_for_small_children = IKEA( + 'children-s-room/children-3-7/toys-for-small-children') tv_benches = IKEA('living-room/tv-stands-media-units/tv-benches') def main(): - # import cProfile - # import pstats - # with cProfile.Profile() as pr: - # tv_benches.get_data() + # import cProfile + # import pstats + # with cProfile.Profile() as pr: + # tv_benches.get_data() - # stats = pstats.Stats(pr) - # stats.sort_stats(pstats.SortKey.TIME) - # # stats.print_stats() - # stats.dump_stats(filename='stats.prof') - print(tv_benches.get_data()) + # stats = pstats.Stats(pr) + # stats.sort_stats(pstats.SortKey.TIME) + # # stats.print_stats() + # stats.dump_stats(filename='stats.prof') + print(tv_benches.get_data()) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/IKEA_scraper/web/index.html b/IKEA_scraper/web/index.html index 55f40125..35c4cca4 100644 --- a/IKEA_scraper/web/index.html +++ b/IKEA_scraper/web/index.html @@ -1,72 +1,80 @@ - - - - - - IKEA scraper - - - - - + + + + + + IKEA scraper + + + + + - + -
- - + - + let res = await eel.call_in_js(product)() + document.getElementById('info').innerHTML = res + } + jQuery('#show').on('click', function () { + call() + }) + + diff --git a/IKEA_scraper/web/style.css b/IKEA_scraper/web/style.css index c55bb4c5..6fe2ec1a 100644 --- a/IKEA_scraper/web/style.css +++ b/IKEA_scraper/web/style.css @@ -1,55 +1,55 @@ html, body { - font-family: "Roboto", sans-serif; - background: #f2f2f2; - margin: 0; - padding: 0; + font-family: 'Roboto', sans-serif; + background: #f2f2f2; + margin: 0; + padding: 0; } #product { - display: flex; - margin-top: 10px; - height: 30px; - margin-left: auto; - margin-right: auto; - background-color: #333333; - width: 95%; - min-width: 100px; - border-radius: 5px; - cursor: pointer; - color: #cccccc; + display: flex; + margin-top: 10px; + height: 30px; + margin-left: auto; + margin-right: auto; + background-color: #333333; + width: 95%; + min-width: 100px; + border-radius: 5px; + cursor: pointer; + color: #cccccc; } #show { - display: block; - border: none; - margin: auto; - margin-top: 10px; - margin-bottom: 10px; - min-width: 200px; + display: block; + border: none; + margin: auto; + margin-top: 10px; + margin-bottom: 10px; + min-width: 200px; - background: #666666; + background: #666666; - border-radius: 5px; - padding: 10px; - color: #f2f2f2; - outline: none; - width: 95%; - font-size: 18px; - text-transform: uppercase; - cursor: pointer; - transition: transform 0.7s ease; + border-radius: 5px; + padding: 10px; + color: #f2f2f2; + outline: none; + width: 95%; + font-size: 18px; + text-transform: uppercase; + cursor: pointer; + transition: transform 0.7s ease; } #show:hover { - opacity: 0.9; - transform: scale(1.01); + opacity: 0.9; + transform: scale(1.01); } #info { - color: #666666; - display: block; - text-align: center; - font-size: 16px; - font-weight: bold; + color: #666666; + display: block; + text-align: center; + font-size: 16px; + font-weight: bold; } diff --git a/december/task_011221/task_011221_classwork.py b/december/task_011221/task_011221_classwork.py index 1c28b94b..50bf8218 100644 --- a/december/task_011221/task_011221_classwork.py +++ b/december/task_011221/task_011221_classwork.py @@ -8,37 +8,37 @@ url = "https://www.ikea.lv/" all_page = requests.get(url) if all_page.status_code == 200: - page = BeautifulSoup(all_page.content, 'html.parser') - found = page.find_all(class_="itemBlock") + page = BeautifulSoup(all_page.content, 'html.parser') + found = page.find_all(class_="itemBlock") - info = [] - item_array = [] - for item in found: - item = item.findChild("div").findChild(class_="card-body") + info = [] + item_array = [] + for item in found: + item = item.findChild("div").findChild(class_="card-body") - item_name = item.findChild(class_="itemName") - item_name = item_name.findChild("div").findChild("h6") + item_name = item.findChild(class_="itemName") + item_name = item_name.findChild("div").findChild("h6") - item_array.append(item_name.string) + item_array.append(item_name.string) - price = item.findChild(class_="itemPrice-wrapper") - price = price.findChild("p").findChild("span") + price = item.findChild(class_="itemPrice-wrapper") + price = price.findChild("p").findChild("span") - try: - item_array.append(price.attrs["data-price"]) - except: - item_array.append(price.attrs["data-pricefamily"]) + try: + item_array.append(price.attrs["data-price"]) + except: + item_array.append(price.attrs["data-pricefamily"]) - all_facts = [] - for facts in all_facts: - if len(facts) == 1: - all_facts.append(facts.string) - else: - atrasts = facts.findChildren("span") - for i in atrasts: - all_facts.append(i.string) + all_facts = [] + for facts in all_facts: + if len(facts) == 1: + all_facts.append(facts.string) + else: + atrasts = facts.findChildren("span") + for i in atrasts: + all_facts.append(i.string) - item_array.append(all_facts) - info.append(item_array) - for ieraksts in info: - print(ieraksts) + item_array.append(all_facts) + info.append(item_array) + for ieraksts in info: + print(ieraksts) diff --git a/december/task_011221/task_011221_ss_scraper.py b/december/task_011221/task_011221_ss_scraper.py index 01ca1b74..fbcc47dc 100644 --- a/december/task_011221/task_011221_ss_scraper.py +++ b/december/task_011221/task_011221_ss_scraper.py @@ -10,98 +10,111 @@ from io import BytesIO from openpyxl.styles import Font, Alignment import openpyxl -HEADERS = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.97 Safari/537.36 Vivaldi/4.1.2369.21'} +HEADERS = { + "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.97 Safari/537.36 Vivaldi/4.1.2369.21'} class SS: - def __init__(self, url): - self.url = url + def __init__(self, url): + self.url = url - def _get_page_amount(self): - page = requests.get(self.url, headers=HEADERS) - soup = BeautifulSoup(page.content, 'html.parser') + def _get_page_amount(self): + page = requests.get(self.url, headers=HEADERS) + soup = BeautifulSoup(page.content, 'html.parser') - last_url = soup.find(class_='td2').findChild('a')['href'] - page_amount = last_url[last_url.find("page") + 4:last_url.find(".html")] - print(f"Page amount = {page_amount}") + last_url = soup.find(class_='td2').findChild('a')['href'] + page_amount = last_url[last_url.find( + "page") + 4:last_url.find(".html")] + print(f"Page amount = {page_amount}") - return int(page_amount) + return int(page_amount) - def get_data(self): - items = [] - images = [] - item_no = 1 - for page_number in range(1, self._get_page_amount() + 1): - url = self.url + f"/page{page_number}.html" + def get_data(self): + items = [] + images = [] + item_no = 1 + for page_number in range(1, self._get_page_amount() + 1): + url = self.url + f"/page{page_number}.html" - page = requests.get(url, headers=HEADERS) - soup = BeautifulSoup(page.content, 'html.parser') + page = requests.get(url, headers=HEADERS) + soup = BeautifulSoup(page.content, 'html.parser') - # item ids - ids = [tag['id'] for tag in soup.select('tr[id]')] # creates list with ids - ids = [x for x in ids if "tr_bnr" not in x] # removes "tr_bnr" elements from list - ids.remove("head_line") # removes first "head_line" id - print(f"Page {page_number}") + # item ids + ids = [tag['id'] + for tag in soup.select('tr[id]')] # creates list with ids + # removes "tr_bnr" elements from list + ids = [x for x in ids if "tr_bnr" not in x] + ids.remove("head_line") # removes first "head_line" id + print(f"Page {page_number}") - # getting item data - for el in soup.find_all(id=ids): - print(f"Item {item_no}") - item_no += 1 + # getting item data + for el in soup.find_all(id=ids): + print(f"Item {item_no}") + item_no += 1 - # image - image_url = el.find(class_='msga2').find_next_sibling().findChild('a').findChild('img')['src'] # gets image url - response = requests.get(image_url) - img = Image.open(BytesIO(response.content)) - images.append(img) - print(img) - for elem in el.find_all(class_='msga2-o pp6'): - items.append(elem.get_text()) + # image + image_url = el.find(class_='msga2').find_next_sibling().findChild( + 'a').findChild('img')['src'] # gets image url + response = requests.get(image_url) + img = Image.open(BytesIO(response.content)) + images.append(img) + print(img) + for elem in el.find_all(class_='msga2-o pp6'): + items.append(elem.get_text()) - # adverts url - item_url = el.findChild(class_='msg2').findChild('div').findChild('a')['href'] # gets url - item_url = "https://www.ss.com" + item_url - item_page = requests.get(item_url, headers=HEADERS) - item_soup = BeautifulSoup(item_page.content, 'html.parser') + # adverts url + item_url = el.findChild(class_='msg2').findChild( + 'div').findChild('a')['href'] # gets url + item_url = "https://www.ss.com" + item_url + item_page = requests.get(item_url, headers=HEADERS) + item_soup = BeautifulSoup(item_page.content, 'html.parser') - # adverts full text - item_text = item_soup.find(id='msg_div_msg').get_text() # gets full text - item_text = item_text[:item_text.find("Pilsēta:")] # removes text last part (table) - items.append(item_text) + # adverts full text + item_text = item_soup.find( + id='msg_div_msg').get_text() # gets full text + # removes text last part (table) + item_text = item_text[:item_text.find("Pilsēta:")] + items.append(item_text) - # adverts publication date - item_date = item_soup.find_all('td', class_='msg_footer') # gets all 'msg_footer' class' - item_date = item_date[2].get_text() # extracts 3rd element - items.append(item_date[8:18]) # crops date + # adverts publication date + # gets all 'msg_footer' class' + item_date = item_soup.find_all('td', class_='msg_footer') + item_date = item_date[2].get_text() # extracts 3rd element + items.append(item_date[8:18]) # crops date - chunk_size = 8 - chunked_items_list = [items[i:i + chunk_size] for i in range(0, len(items), chunk_size)] # combines each 'chunk_size' elements into array - columns = ["Atrašanās vieta", "Istabu skaits", "Kvadratūra", "Stāvs", "Sērija", "Cena", "Pilns sludinājuma teksts", "Izvietošanas datums"] - df = pd.DataFrame(chunked_items_list, columns=columns) - df.to_excel(excel_writer='output.xlsx', index=False) + chunk_size = 8 + # combines each 'chunk_size' elements into array + chunked_items_list = [items[i:i + chunk_size] + for i in range(0, len(items), chunk_size)] + columns = ["Atrašanās vieta", "Istabu skaits", "Kvadratūra", "Stāvs", + "Sērija", "Cena", "Pilns sludinājuma teksts", "Izvietošanas datums"] + df = pd.DataFrame(chunked_items_list, columns=columns) + df.to_excel(excel_writer='output.xlsx', index=False) - wb = openpyxl.load_workbook("output.xlsx") - ws = wb.worksheets[0] - sheet = wb.active + wb = openpyxl.load_workbook("output.xlsx") + ws = wb.worksheets[0] + sheet = wb.active - # 'I1' cell setup - ws['I1'] = "Attēli" - ws['I1'].font = Font(bold=True) - ws["I1"].alignment = Alignment(horizontal='center', vertical='top') + # 'I1' cell setup + ws['I1'] = "Attēli" + ws['I1'].font = Font(bold=True) + ws["I1"].alignment = Alignment(horizontal='center', vertical='top') - # sets cell width - sheet.column_dimensions['A'].width = 20 - sheet.column_dimensions['G'].width = 50 - sheet.column_dimensions['H'].width = 20 - sheet.column_dimensions['I'].width = 13 + # sets cell width + sheet.column_dimensions['A'].width = 20 + sheet.column_dimensions['G'].width = 50 + sheet.column_dimensions['H'].width = 20 + sheet.column_dimensions['I'].width = 13 - for i in range(len(images)): - sheet.row_dimensions[i + 2].height = 51 # sets cell height - ws[f'G{i + 2}'].alignment = Alignment(wrap_text=True) # enables word wrap + for i in range(len(images)): + sheet.row_dimensions[i + 2].height = 51 # sets cell height + # enables word wrap + ws[f'G{i + 2}'].alignment = Alignment(wrap_text=True) - img = openpyxl.drawing.image.Image(images[i]) - ws.add_image(img, f"I{i + 2}") # adds images - wb.save("output.xlsx") - print("Done") + img = openpyxl.drawing.image.Image(images[i]) + ws.add_image(img, f"I{i + 2}") # adds images + wb.save("output.xlsx") + print("Done") flats = SS("https://www.ss.com/lv/real-estate/flats/riga/all/sell/") @@ -109,8 +122,8 @@ flats2 = SS("https://www.ss.com/lv/real-estate/flats/riga-region/all/sell/") def main(): - flats.get_data() + flats.get_data() if __name__ == '__main__': - main() + main() diff --git a/december/task_081221/task_081221.py b/december/task_081221/task_081221.py index b6692208..195d17b6 100644 --- a/december/task_081221/task_081221.py +++ b/december/task_081221/task_081221.py @@ -11,9 +11,9 @@ from selenium.webdriver.common.by import By use_firefox = True if use_firefox: - browser = webdriver.Firefox() + browser = webdriver.Firefox() else: - browser = webdriver.Chrome("chromedriver") + browser = webdriver.Chrome("chromedriver") address = "https://www.riga.lv/lv" browser.get(address) @@ -25,7 +25,8 @@ search = browser.find_element_by_class_name('search-link') search.click() delay = 2 -WebDriverWait(browser, delay).until(EC.presence_of_all_elements_located((By.ID, 'edit-search'))) +WebDriverWait(browser, delay).until( + EC.presence_of_all_elements_located((By.ID, 'edit-search'))) search = browser.find_element_by_id('edit-search') search.send_keys("dokum") # writes in search line @@ -33,9 +34,11 @@ search = browser.find_element_by_id('search-header-button') search.click() browser.maximize_window() -WebDriverWait(browser, delay).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'filter-content'))) +WebDriverWait(browser, delay).until( + EC.presence_of_all_elements_located((By.CLASS_NAME, 'filter-content'))) delay = 3 -WebDriverWait(browser, delay).until(EC.presence_of_all_elements_located((By.ID, 'filter_type_file'))) +WebDriverWait(browser, delay).until( + EC.presence_of_all_elements_located((By.ID, 'filter_type_file'))) filter = browser.find_element_by_css_selector('label[for="filter_type_file"]') filter.click() diff --git a/december/task_081221/task_081221_homework.py b/december/task_081221/task_081221_homework.py index 73d33a86..aa6f57d8 100644 --- a/december/task_081221/task_081221_homework.py +++ b/december/task_081221/task_081221_homework.py @@ -16,108 +16,116 @@ firefox = ["2", "firefox"] def get_data(): - user_browser, user_pages, search_word = get_user_input() + user_browser, user_pages, search_word = get_user_input() - for page in user_pages: - if user_browser in chromium: - if os.name in ('nt', 'dos'): - browser = webdriver.Chrome("chromedriver.exe") # windows - else: - browser = webdriver.Chrome("chromedriver") # gnu/linux - elif user_browser in firefox: - browser = webdriver.Firefox() + for page in user_pages: + if user_browser in chromium: + if os.name in ('nt', 'dos'): + browser = webdriver.Chrome("chromedriver.exe") # windows + else: + browser = webdriver.Chrome("chromedriver") # gnu/linux + elif user_browser in firefox: + browser = webdriver.Firefox() - url = f"https://www.riga.lv/lv/search?q={search_word}&types=file&page={page - 1}" - browser.get(url) - browser.find_element(By.CLASS_NAME, 'cookie-accept-all').click() + url = f"https://www.riga.lv/lv/search?q={search_word}&types=file&page={page - 1}" + browser.get(url) + browser.find_element(By.CLASS_NAME, 'cookie-accept-all').click() - files = browser.find_elements(By.CLASS_NAME, 'file') - for file in files: - file_name = file.text - file_url = file.get_attribute('href') - file_download(file_name, file_url) - browser.quit() + files = browser.find_elements(By.CLASS_NAME, 'file') + for file in files: + file_name = file.text + file_url = file.get_attribute('href') + file_download(file_name, file_url) + browser.quit() def get_user_input(): - if debug == True: - search_word = "dokum" - else: - search_word = input("Choose keyword to search: ") + if debug == True: + search_word = "dokum" + else: + search_word = input("Choose keyword to search: ") - last_page = get_max_page_amount(search_word) - print("\nChoose which browser to use:") - print("1 - chromium (chrome)") - print("2 - firefox") + last_page = get_max_page_amount(search_word) + print("\nChoose which browser to use:") + print("1 - chromium (chrome)") + print("2 - firefox") - if debug == True: - browser = "firefox" - else: - browser = input("").lower() + if debug == True: + browser = "firefox" + else: + browser = input("").lower() - print(f"\nChoose from which pages you want to download files (1 4 7; 2-5; all). Maximum is {last_page} pages.") - try: - if debug == True: - user_input = "1" - else: - user_input = input("").lower() + print( + f"\nChoose from which pages you want to download files (1 4 7; 2-5; all). Maximum is {last_page} pages.") + try: + if debug == True: + user_input = "1" + else: + user_input = input("").lower() - if user_input == "all": - pages = list(map(int, range(1, last_page + 1))) # creates list with all pages - else: - user_page_list = user_input.split(" ") - for page_range in user_page_list: - if "-" in page_range: + if user_input == "all": + # creates list with all pages + pages = list(map(int, range(1, last_page + 1))) + else: + user_page_list = user_input.split(" ") + for page_range in user_page_list: + if "-" in page_range: - first_num = int(page_range[:page_range.find("-")]) # gets first number - second_num = int(page_range[page_range.find("-") + 1:]) + 1 # gets second number + # gets first number + first_num = int(page_range[:page_range.find("-")]) + # gets second number + second_num = int(page_range[page_range.find("-") + 1:]) + 1 - if second_num > last_page: # reduces user input to max page amount - second_num = last_page + if second_num > last_page: # reduces user input to max page amount + second_num = last_page - user_page_list = user_page_list + list(map(str, range(first_num, second_num))) # creates list with str range - pages = [elem for elem in user_page_list if not "-" in elem] # removes all elements containing "-" - pages = list(map(int, pages)) # convers str to int - pages.sort() # sorts list - pages = list(set(pages)) # removes duplicates from list - except: - print("Enered incorrect number/s. Try again.") - return browser, pages, search_word + user_page_list = user_page_list + \ + list(map(str, range(first_num, second_num)) + ) # creates list with str range + # removes all elements containing "-" + pages = [elem for elem in user_page_list if not "-" in elem] + pages = list(map(int, pages)) # convers str to int + pages.sort() # sorts list + pages = list(set(pages)) # removes duplicates from list + except: + print("Enered incorrect number/s. Try again.") + return browser, pages, search_word def get_max_page_amount(keyword: str): - url = f"https://www.riga.lv/lv/search?q={keyword}&types=file" - page = requests.get(url) - soup = BeautifulSoup(page.content, 'html.parser') - try: - last_page = soup.find(class_='pager__item--last').get_text().strip() - except: - try: - last_page = soup.find_all(class_='pager__item page-item') - last_page = last_page[-1].get_text().strip()[-1] # gets last number from navigation bar - except: - print("Something went wrong. Please try again or try another keyword.") - return int(last_page) + url = f"https://www.riga.lv/lv/search?q={keyword}&types=file" + page = requests.get(url) + soup = BeautifulSoup(page.content, 'html.parser') + try: + last_page = soup.find(class_='pager__item--last').get_text().strip() + except: + try: + last_page = soup.find_all(class_='pager__item page-item') + # gets last number from navigation bar + last_page = last_page[-1].get_text().strip()[-1] + except: + print("Something went wrong. Please try again or try another keyword.") + return int(last_page) def file_download(file_name, file_url): - print(f"\nNAME: {file_name}") - print(f"URL: {file_url}") + print(f"\nNAME: {file_name}") + print(f"URL: {file_url}") - path = "files" - if not exists(path): - os.mkdir(path) + path = "files" + if not exists(path): + os.mkdir(path) - response = requests.get(file_url) - if ".pdf" in file_name: - open(f"{path}/{file_name}", "wb").write(response.content) - else: - open(f"{path}/{file_name}.pdf", "wb").write(response.content) + response = requests.get(file_url) + if ".pdf" in file_name: + open(f"{path}/{file_name}", "wb").write(response.content) + else: + open(f"{path}/{file_name}.pdf", "wb").write(response.content) def main(): - get_data() + get_data() if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/december/task_081221/task_081221_homework_v1.1.py b/december/task_081221/task_081221_homework_v1.1.py index b8f25d80..ffec2baa 100644 --- a/december/task_081221/task_081221_homework_v1.1.py +++ b/december/task_081221/task_081221_homework_v1.1.py @@ -21,126 +21,138 @@ firefox = ["2", "firefox"] def get_data(): - user_browser, user_pages, search_word, last_page = get_user_input() + user_browser, user_pages, search_word, last_page = get_user_input() - if user_browser in chromium: - if os.name in ('nt', 'dos'): - browser = webdriver.Chrome("chromedriver.exe") # windows - else: - browser = webdriver.Chrome("chromedriver") # gnu/linux - elif user_browser in firefox: - browser = webdriver.Firefox() - url = "https://www.riga.lv/lv/" - browser.get(url) - browser.find_element(By.CLASS_NAME, 'cookie-accept-all').click() + if user_browser in chromium: + if os.name in ('nt', 'dos'): + browser = webdriver.Chrome("chromedriver.exe") # windows + else: + browser = webdriver.Chrome("chromedriver") # gnu/linux + elif user_browser in firefox: + browser = webdriver.Firefox() + url = "https://www.riga.lv/lv/" + browser.get(url) + browser.find_element(By.CLASS_NAME, 'cookie-accept-all').click() - browser.find_element(By.CLASS_NAME, 'search-link').click() + browser.find_element(By.CLASS_NAME, 'search-link').click() - delay = 2 - WebDriverWait(browser, delay).until(EC.presence_of_all_elements_located((By.ID, 'edit-search'))) - search = browser.find_element(By.ID, 'edit-search') - search.send_keys(search_word) # writes in search line + delay = 2 + WebDriverWait(browser, delay).until( + EC.presence_of_all_elements_located((By.ID, 'edit-search'))) + search = browser.find_element(By.ID, 'edit-search') + search.send_keys(search_word) # writes in search line - browser.find_element(By.ID, 'search-header-button').click() + browser.find_element(By.ID, 'search-header-button').click() - WebDriverWait(browser, delay).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'filter-content'))) - WebDriverWait(browser, delay).until(EC.presence_of_all_elements_located((By.ID, 'filter_type_file'))) + WebDriverWait(browser, delay).until( + EC.presence_of_all_elements_located((By.CLASS_NAME, 'filter-content'))) + WebDriverWait(browser, delay).until( + EC.presence_of_all_elements_located((By.ID, 'filter_type_file'))) - browser.find_element(By.CSS_SELECTOR, 'label[for="filter_type_file"]').click() + browser.find_element( + By.CSS_SELECTOR, 'label[for="filter_type_file"]').click() - browser.find_element(By.ID, 'search-view-button').click() - for current_page in range(1, last_page + 1): - if current_page in user_pages: - files = browser.find_elements(By.CLASS_NAME, 'file') - for file in files: - file_name = file.text - file_url = file.get_attribute('href') - file_download(file_name, file_url) - if current_page != last_page: - browser.find_element(By.CLASS_NAME, 'pager__item--next').click() - if current_page == user_pages[-1]: - break - browser.quit() + browser.find_element(By.ID, 'search-view-button').click() + for current_page in range(1, last_page + 1): + if current_page in user_pages: + files = browser.find_elements(By.CLASS_NAME, 'file') + for file in files: + file_name = file.text + file_url = file.get_attribute('href') + file_download(file_name, file_url) + if current_page != last_page: + browser.find_element(By.CLASS_NAME, 'pager__item--next').click() + if current_page == user_pages[-1]: + break + browser.quit() def get_user_input(): - if debug == True: - search_word = "dokum" - else: - search_word = input("Choose keyword to search: ") + if debug == True: + search_word = "dokum" + else: + search_word = input("Choose keyword to search: ") - last_page = get_max_page_amount(search_word) - print("\nChoose which browser to use:") - print("1 - chromium (chrome)") - print("2 - firefox") + last_page = get_max_page_amount(search_word) + print("\nChoose which browser to use:") + print("1 - chromium (chrome)") + print("2 - firefox") - if debug == True: - browser = "firefox" - else: - browser = input("").lower() + if debug == True: + browser = "firefox" + else: + browser = input("").lower() - print(f"\nChoose from which pages you want to download files (1 4 7; 2-5; all). Maximum is {last_page} pages.") - try: - if debug == True: - user_input = "16-17" - else: - user_input = input("").lower() + print( + f"\nChoose from which pages you want to download files (1 4 7; 2-5; all). Maximum is {last_page} pages.") + try: + if debug == True: + user_input = "16-17" + else: + user_input = input("").lower() - if user_input == "all": - pages = list(map(int, range(1, last_page + 1))) # creates list with all pages - else: - user_page_list = user_input.split(" ") - for page_range in user_page_list: - if "-" in page_range: + if user_input == "all": + # creates list with all pages + pages = list(map(int, range(1, last_page + 1))) + else: + user_page_list = user_input.split(" ") + for page_range in user_page_list: + if "-" in page_range: - first_num = int(page_range[:page_range.find("-")]) # gets first number - second_num = int(page_range[page_range.find("-") + 1:]) + 1 # gets second number + # gets first number + first_num = int(page_range[:page_range.find("-")]) + # gets second number + second_num = int(page_range[page_range.find("-") + 1:]) + 1 - if second_num > last_page: # reduces user input to max page amount - second_num = last_page - user_page_list = user_page_list + list(map(str, range(first_num, second_num + 1))) # creates list with str range - pages = [elem for elem in user_page_list if not "-" in elem] # removes all elements containing "-" - pages = list(map(int, pages)) # convers str to int - pages.sort() # sorts list - pages = list(set(pages)) # removes duplicates from list - except: - print("Enered incorrect number/s. Try again.") - return browser, pages, search_word, last_page + if second_num > last_page: # reduces user input to max page amount + second_num = last_page + user_page_list = user_page_list + \ + list(map(str, range(first_num, second_num + 1)) + ) # creates list with str range + # removes all elements containing "-" + pages = [elem for elem in user_page_list if not "-" in elem] + pages = list(map(int, pages)) # convers str to int + pages.sort() # sorts list + pages = list(set(pages)) # removes duplicates from list + except: + print("Enered incorrect number/s. Try again.") + return browser, pages, search_word, last_page def get_max_page_amount(keyword: str): - url = f"https://www.riga.lv/lv/search?q={keyword}&types=file" - page = requests.get(url) - soup = BeautifulSoup(page.content, 'html.parser') - try: - last_page = soup.find(class_='pager__item--last').get_text().strip() - except: - try: - last_page = soup.find_all(class_='pager__item page-item') - last_page = last_page[-1].get_text().strip()[-1] # gets last number from navigation bar - except: - print("Something went wrong. Please try again or try another keyword.") - return int(last_page) + url = f"https://www.riga.lv/lv/search?q={keyword}&types=file" + page = requests.get(url) + soup = BeautifulSoup(page.content, 'html.parser') + try: + last_page = soup.find(class_='pager__item--last').get_text().strip() + except: + try: + last_page = soup.find_all(class_='pager__item page-item') + # gets last number from navigation bar + last_page = last_page[-1].get_text().strip()[-1] + except: + print("Something went wrong. Please try again or try another keyword.") + return int(last_page) def file_download(file_name, file_url): - print(f"\nNAME: {file_name}") - print(f"URL: {file_url}") + print(f"\nNAME: {file_name}") + print(f"URL: {file_url}") - path = "files" - if not exists(path): - os.mkdir(path) + path = "files" + if not exists(path): + os.mkdir(path) - response = requests.get(file_url) - if ".pdf" in file_name: - open(f"{path}/{file_name}", "wb").write(response.content) - else: - open(f"{path}/{file_name}.pdf", "wb").write(response.content) + response = requests.get(file_url) + if ".pdf" in file_name: + open(f"{path}/{file_name}", "wb").write(response.content) + else: + open(f"{path}/{file_name}.pdf", "wb").write(response.content) def main(): - get_data() + get_data() if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/december/task_081221/user_input.py b/december/task_081221/user_input.py index 52e0a0f0..4d92cd64 100644 --- a/december/task_081221/user_input.py +++ b/december/task_081221/user_input.py @@ -1,26 +1,31 @@ def main(): - try: - user_input = input("Input: ") - user_input_array = user_input.split(" ") - if user_input == "all": - pages = list(map(int, range(1, 17 + 1))) - else: - for page_range in user_input_array: - if "-" in page_range: - first_num = int(page_range[:page_range.find("-")]) # gets first number - second_num = int(page_range[page_range.find("-") + 1:]) + 1 # gets second number - user_input_array = user_input_array + list(map(str, range(first_num, second_num))) # creates list with str range - pages = [elem for elem in user_input_array if not "-" in elem] # removes all elements containing "-" - pages = list(map(int, pages)) # convers str to int - pages.sort() # sorts list - pages = list(set(pages)) # removes duplicates from list - print(pages) + try: + user_input = input("Input: ") + user_input_array = user_input.split(" ") + if user_input == "all": + pages = list(map(int, range(1, 17 + 1))) + else: + for page_range in user_input_array: + if "-" in page_range: + # gets first number + first_num = int(page_range[:page_range.find("-")]) + # gets second number + second_num = int(page_range[page_range.find("-") + 1:]) + 1 + user_input_array = user_input_array + \ + list(map(str, range(first_num, second_num)) + ) # creates list with str range + # removes all elements containing "-" + pages = [elem for elem in user_input_array if not "-" in elem] + pages = list(map(int, pages)) # convers str to int + pages.sort() # sorts list + pages = list(set(pages)) # removes duplicates from list + print(pages) - except: - print("Something went wrong. Try again.") + except: + print("Something went wrong. Try again.") if __name__ == '__main__': - main() + main() -# 3 1 5 2 7-11 3-30 \ No newline at end of file +# 3 1 5 2 7-11 3-30 diff --git a/december/task_151221/task2_151221.py b/december/task_151221/task2_151221.py index 31617f72..5d94e963 100644 --- a/december/task_151221/task2_151221.py +++ b/december/task_151221/task2_151221.py @@ -9,7 +9,7 @@ file = pd.ExcelFile("dati_masiviem.xlsx") data = [] for sheet_name in file.sheet_names: - data.append(file.parse(sheet_name)) + data.append(file.parse(sheet_name)) # print(data[0]["Nosaukums"]) data[0]["Cena"] = round((data[0]["Pašizmaksa"] + .4) * 1.21, 2) @@ -42,6 +42,6 @@ found = data[2]["Datums2"] == "2020-09-09" page_num = 1 with pd.ExcelWriter("new_file2.xlsx") as file: - for page in data: - page.to_excel(file, sheet_name=str(page_num), index=False) - page_num += 1 \ No newline at end of file + for page in data: + page.to_excel(file, sheet_name=str(page_num), index=False) + page_num += 1 diff --git a/december/task_151221/task_151221.py b/december/task_151221/task_151221.py index b6d3665c..e755d282 100644 --- a/december/task_151221/task_151221.py +++ b/december/task_151221/task_151221.py @@ -9,7 +9,7 @@ file = pd.ExcelFile("dzivnieki.xls") data = [] for sheet_name in file.sheet_names: - data.append(file.parse(sheet_name)) + data.append(file.parse(sheet_name)) # print(data) # print(data[0]) @@ -22,6 +22,7 @@ for sheet_name in file.sheet_names: new_data = pd.concat([data[0], data[1]]) # concatenates data # print(new_data) -print(new_data.sort_values("Vecums", ascending=False)) # sorts table by age, inverted +# sorts table by age, inverted +print(new_data.sort_values("Vecums", ascending=False)) -new_data.to_excel("new_file.xls", index=False) \ No newline at end of file +new_data.to_excel("new_file.xls", index=False) diff --git a/february/task_040222/classwork_040222_Cagulis.py b/february/task_040222/classwork_040222_Cagulis.py index 82f9fb20..2d95bb67 100644 --- a/february/task_040222/classwork_040222_Cagulis.py +++ b/february/task_040222/classwork_040222_Cagulis.py @@ -15,62 +15,63 @@ import matplotlib.pyplot as plt def get_data(): - data = pd.read_csv("auto_imports_mainits.csv") + data = pd.read_csv("auto_imports_mainits.csv") - data_copy = data.copy() + data_copy = data.copy() - del data_copy["normalized-losses"] + del data_copy["normalized-losses"] - dislike = ["N/A", "NA", "--"] - data_copy3 = pd.read_csv("auto_imports_mainits.csv", na_values=dislike) + dislike = ["N/A", "NA", "--"] + data_copy3 = pd.read_csv("auto_imports_mainits.csv", na_values=dislike) - # Replaces word written numbers to intigers - columns = ["num-of-doors", "num-of-cylinders"] - for column in columns: - for value in data_copy3[column]: - try: - data_copy3 = data_copy3.replace(to_replace=value, value=w2n.word_to_num(value)) - except: - pass - print(data_copy3[["num-of-doors", "num-of-cylinders"]]) + # Replaces word written numbers to intigers + columns = ["num-of-doors", "num-of-cylinders"] + for column in columns: + for value in data_copy3[column]: + try: + data_copy3 = data_copy3.replace( + to_replace=value, value=w2n.word_to_num(value)) + except: + pass + print(data_copy3[["num-of-doors", "num-of-cylinders"]]) - # Leaves only columns that contain numbers - data_copy4 = data_copy3.copy() - for column in data_copy4: - if isinstance(data_copy4[column][0], str): - del data_copy4[column] - print(data_copy4) - return data_copy4 + # Leaves only columns that contain numbers + data_copy4 = data_copy3.copy() + for column in data_copy4: + if isinstance(data_copy4[column][0], str): + del data_copy4[column] + print(data_copy4) + return data_copy4 def graph_plot(): - data = get_data() + data = get_data() - sns.set_style("whitegrid") - plt.figure(figsize=(15, 10)) - sns.heatmap(data.corr()) - plt.savefig("plot1.png") - # plt.show() + sns.set_style("whitegrid") + plt.figure(figsize=(15, 10)) + sns.heatmap(data.corr()) + plt.savefig("plot1.png") + # plt.show() - # korealācija novērojama starp kolonnām [length,width,wheel-base] un [engine-size,price,horsepower] - # noderīga ir otrā korelācija, jo tā atklāj to savstarpējo ietekmi + # korealācija novērojama starp kolonnām [length,width,wheel-base] un [engine-size,price,horsepower] + # noderīga ir otrā korelācija, jo tā atklāj to savstarpējo ietekmi - # matplotlib heatmap veido korealāciju starp datiem savstarpēji salīdzinot to vērtības un norādot iegūtos koeficientus - # seaborn heatmap veido korealāciju starp datu vērtībām pēc pašnoteiktas korealācijas skalas + # matplotlib heatmap veido korealāciju starp datiem savstarpēji salīdzinot to vērtības un norādot iegūtos koeficientus + # seaborn heatmap veido korealāciju starp datu vērtībām pēc pašnoteiktas korealācijas skalas - sns.displot(data["price"]) - plt.savefig("plot2.png") - # plt.show() + sns.displot(data["price"]) + plt.savefig("plot2.png") + # plt.show() - plt.scatter(data["price"], data["engine-size"]) - plt.savefig("plot3.png") - # plt.show() + plt.scatter(data["price"], data["engine-size"]) + plt.savefig("plot3.png") + # plt.show() - sns.scatterplot(data["price"], data["engine-size"]) - plt.savefig("plot4.png") - # plt.show() + sns.scatterplot(data["price"], data["engine-size"]) + plt.savefig("plot4.png") + # plt.show() if __name__ == '__main__': - # get_data() - graph_plot() \ No newline at end of file + # get_data() + graph_plot() diff --git a/february/task_110222/data_processing.py b/february/task_110222/data_processing.py index 146e8f12..22840d3e 100644 --- a/february/task_110222/data_processing.py +++ b/february/task_110222/data_processing.py @@ -2,75 +2,76 @@ # Date - 04.02.2022 # Title - Classwork +import matplotlib.pyplot as plt import pandas as pd from word2number import w2n import seaborn as sns import matplotlib matplotlib.use('Qt5Agg') -import matplotlib.pyplot as plt # mathplotlib ir bibliotēka statisku, animētu un interaktīvu vizualizāciju izveidei # seaborn padara matplotlib sarežģītākos momentus par vienkāršākiem def get_data(): - data = pd.read_csv("auto_imports_mainits.csv") + data = pd.read_csv("auto_imports_mainits.csv") - data_copy = data.copy() + data_copy = data.copy() - del data_copy["normalized-losses"] + del data_copy["normalized-losses"] - dislike = ["N/A", "NA", "--"] - data_copy3 = pd.read_csv("auto_imports_mainits.csv", na_values=dislike) + dislike = ["N/A", "NA", "--"] + data_copy3 = pd.read_csv("auto_imports_mainits.csv", na_values=dislike) - # Replaces word written numbers to intigers - columns = ["num-of-doors", "num-of-cylinders"] - for column in columns: - for value in data_copy3[column]: - try: - data_copy3 = data_copy3.replace(to_replace=value, value=w2n.word_to_num(value)) - except: - pass - print(data_copy3[["num-of-doors", "num-of-cylinders"]]) + # Replaces word written numbers to intigers + columns = ["num-of-doors", "num-of-cylinders"] + for column in columns: + for value in data_copy3[column]: + try: + data_copy3 = data_copy3.replace( + to_replace=value, value=w2n.word_to_num(value)) + except: + pass + print(data_copy3[["num-of-doors", "num-of-cylinders"]]) - # Leaves only columns that contain numbers - data_copy4 = data_copy3.copy() - for column in data_copy4: - if isinstance(data_copy4[column][0], str): - del data_copy4[column] - print(data_copy4) - return data_copy4 + # Leaves only columns that contain numbers + data_copy4 = data_copy3.copy() + for column in data_copy4: + if isinstance(data_copy4[column][0], str): + del data_copy4[column] + print(data_copy4) + return data_copy4 def graph_plot(): - data = get_data() + data = get_data() - sns.set_style("whitegrid") - plt.figure(figsize=(15, 10)) - sns.heatmap(data.corr()) - plt.savefig("plot1.png") - plt.show() + sns.set_style("whitegrid") + plt.figure(figsize=(15, 10)) + sns.heatmap(data.corr()) + plt.savefig("plot1.png") + plt.show() - # korealācija novērojama starp kolonnām [length,width,wheel-base] un [engine-size,price,horsepower] - # noderīga ir otrā korelācija, jo tā atklāj to savstarpējo ietekmi + # korealācija novērojama starp kolonnām [length,width,wheel-base] un [engine-size,price,horsepower] + # noderīga ir otrā korelācija, jo tā atklāj to savstarpējo ietekmi - # matplotlib heatmap veido korealāciju starp datiem savstarpēji salīdzinot to vērtības un norādot iegūtos koeficientus - # seaborn heatmap veido korealāciju starp datu vērtībām pēc pašnoteiktas korealācijas skalas + # matplotlib heatmap veido korealāciju starp datiem savstarpēji salīdzinot to vērtības un norādot iegūtos koeficientus + # seaborn heatmap veido korealāciju starp datu vērtībām pēc pašnoteiktas korealācijas skalas - sns.displot(data["price"]) - plt.savefig("plot2.png") - plt.show() + sns.displot(data["price"]) + plt.savefig("plot2.png") + plt.show() - plt.scatter(data["price"], data["engine-size"]) - plt.savefig("plot3.png") - plt.show() + plt.scatter(data["price"], data["engine-size"]) + plt.savefig("plot3.png") + plt.show() - sns.scatterplot(data["price"], data["engine-size"]) - plt.savefig("plot4.png") - plt.show() + sns.scatterplot(data["price"], data["engine-size"]) + plt.savefig("plot4.png") + plt.show() if __name__ == '__main__': - # get_data() - graph_plot() \ No newline at end of file + # get_data() + graph_plot() diff --git a/february/task_110222/task_110222.py b/february/task_110222/task_110222.py index b592965e..caf5623a 100644 --- a/february/task_110222/task_110222.py +++ b/february/task_110222/task_110222.py @@ -18,17 +18,20 @@ data = pd.read_csv("auto_imports_mainits.csv", na_values=dislike) del data["normalized-losses"] select_data = data[["make", "engine-size", "num-of-doors"]] -select_data = select_data.sort_values(by=["make", "engine-size", "num-of-doors"]) +select_data = select_data.sort_values( + by=["make", "engine-size", "num-of-doors"]) select_data = select_data.drop_duplicates() col_width = usable_w / 3 height = pdf.font_size * 2 for i in range(select_data.shape[0]): - pdf.cell(col_width, height, str(select_data["make"].iloc[i]), border=1) - pdf.cell(col_width, height, str(select_data["engine-size"].iloc[i]), border=1) - pdf.cell(col_width, height, str(select_data["num-of-doors"].iloc[i]), border=1) - pdf.ln(height) + pdf.cell(col_width, height, str(select_data["make"].iloc[i]), border=1) + pdf.cell(col_width, height, str( + select_data["engine-size"].iloc[i]), border=1) + pdf.cell(col_width, height, str( + select_data["num-of-doors"].iloc[i]), border=1) + pdf.ln(height) # pdf.image("output.png", x=None, y=None, w=usable_w, h=0) -pdf.output("output.pdf") \ No newline at end of file +pdf.output("output.pdf") diff --git a/february/task_180222/pd_pandas_k_f_cagulis.py b/february/task_180222/pd_pandas_k_f_cagulis.py index 1f4cc174..1a8a3dc1 100644 --- a/february/task_180222/pd_pandas_k_f_cagulis.py +++ b/february/task_180222/pd_pandas_k_f_cagulis.py @@ -49,190 +49,206 @@ series_photos = { class priceGraph: - def __init__(self, data, pos, title, x_value, xlabel, xticks=None, y_value=PRICE, ylabel="Price"): - self.pos = pos - self.x_value = data[x_value] - self.y_value = data[y_value] - self.title = title - self.xlabel = xlabel - self.ylabel = ylabel - self.xticks = xticks + def __init__(self, data, pos, title, x_value, xlabel, xticks=None, y_value=PRICE, ylabel="Price"): + self.pos = pos + self.x_value = data[x_value] + self.y_value = data[y_value] + self.title = title + self.xlabel = xlabel + self.ylabel = ylabel + self.xticks = xticks - def _graph_price(self): - plot = plt.subplot2grid((3, 2), self.pos) - plot.scatter(self.x_value, self.y_value) - plot.set_title(self.title) - plot.set_xlabel(self.xlabel) - plot.set_ylabel(self.ylabel) - if self.xticks != None: - plot.set_xticks(self.xticks) + def _graph_price(self): + plot = plt.subplot2grid((3, 2), self.pos) + plot.scatter(self.x_value, self.y_value) + plot.set_title(self.title) + plot.set_xlabel(self.xlabel) + plot.set_ylabel(self.ylabel) + if self.xticks != None: + plot.set_xticks(self.xticks) def read(): - files = list(Path(Path(__file__).parent.absolute()).glob("**/*.xlsx")) + files = list(Path(Path(__file__).parent.absolute()).glob("**/*.xlsx")) - for file_path in files: - all_df.append(pd.read_excel(file_path)) - df_combined = pd.concat(all_df).reset_index(drop=True) # combine DataFrames - df_combined.sort_values(by=[PRICE, PUB_DATE], inplace=True) # sort DataFrame - df_combined.drop_duplicates(keep="first", inplace=True) # drop duplicates - # replaces floor value to intiger - for value in df_combined[FLOOR]: - df_combined = df_combined.replace(value, int(float(value[:value.find("/")]))) + for file_path in files: + all_df.append(pd.read_excel(file_path)) + df_combined = pd.concat(all_df).reset_index( + drop=True) # combine DataFrames + df_combined.sort_values(by=[PRICE, PUB_DATE], + inplace=True) # sort DataFrame + df_combined.drop_duplicates(keep="first", inplace=True) # drop duplicates + # replaces floor value to intiger + for value in df_combined[FLOOR]: + df_combined = df_combined.replace( + value, int(float(value[:value.find("/")]))) - # replaces price value to intiger - for value in df_combined[PRICE]: - df_combined = df_combined.replace(value, replace_value(value, " ", ",", "")) + # replaces price value to intiger + for value in df_combined[PRICE]: + df_combined = df_combined.replace( + value, replace_value(value, " ", ",", "")) - # replaces "Citi" to 7 - for _ in df_combined[ROOM_AMOUNT]: - df_combined = df_combined.replace(["citi", "Citi"], "7") + # replaces "Citi" to 7 + for _ in df_combined[ROOM_AMOUNT]: + df_combined = df_combined.replace(["citi", "Citi"], "7") - # converts room amount to intiger - for value in df_combined[ROOM_AMOUNT]: - df_combined = df_combined.replace(value, int(value)) + # converts room amount to intiger + for value in df_combined[ROOM_AMOUNT]: + df_combined = df_combined.replace(value, int(value)) - # converts to datetime - df_combined[PUB_DATE] = pd.to_datetime(df_combined[PUB_DATE], format="%d.%m.%Y").dt.date + # converts to datetime + df_combined[PUB_DATE] = pd.to_datetime( + df_combined[PUB_DATE], format="%d.%m.%Y").dt.date - df_combined.to_excel("output/excel/combined.xlsx", index=False) - return df_combined.sort_values(by=PUB_DATE) + df_combined.to_excel("output/excel/combined.xlsx", index=False) + return df_combined.sort_values(by=PUB_DATE) # replace value -replace_value = lambda value, find, replace, replace_to: int(value[:value.find(find)].replace(replace, replace_to)) +def replace_value(value, find, replace, replace_to): return int( + value[:value.find(find)].replace(replace, replace_to)) def graph_corr(data): - data_corr = data.copy() - plt.rc("font", size=8) - # gets all series - series = [] - for i in data_corr[SERIES]: - if i not in series: - series.append(i) - # change series names to numbers - data_corr[SERIES] = data_corr[SERIES].replace(series, range(len(series))) + data_corr = data.copy() + plt.rc("font", size=8) + # gets all series + series = [] + for i in data_corr[SERIES]: + if i not in series: + series.append(i) + # change series names to numbers + data_corr[SERIES] = data_corr[SERIES].replace(series, range(len(series))) - sns.heatmap(data_corr.corr()) - plt.savefig(f"{output_path}/korelacija.png") + sns.heatmap(data_corr.corr()) + plt.savefig(f"{output_path}/korelacija.png") def graph_price(data): - plt.figure(figsize=(50, 30)) - plt.rc("font", size=15) + plt.figure(figsize=(50, 30)) + plt.rc("font", size=15) - plot1 = priceGraph(data, (0, 0), "Price to floor", FLOOR, "Floor", range(1, max(data[FLOOR]) + 1)) - plot2 = priceGraph(data, (0, 1), "Price to room amount", ROOM_AMOUNT, "Room amount") - plot3 = priceGraph(data, (1, 0), "Price to quadrature", QUADRATURE, "Quadrature") - plot4 = priceGraph(data, (1, 1), "Price to series", SERIES, "Series") - plot5 = priceGraph(data, (2, 0), "Price to date", PUB_DATE, "Date") + plot1 = priceGraph(data, (0, 0), "Price to floor", FLOOR, + "Floor", range(1, max(data[FLOOR]) + 1)) + plot2 = priceGraph(data, (0, 1), "Price to room amount", + ROOM_AMOUNT, "Room amount") + plot3 = priceGraph(data, (1, 0), "Price to quadrature", + QUADRATURE, "Quadrature") + plot4 = priceGraph(data, (1, 1), "Price to series", SERIES, "Series") + plot5 = priceGraph(data, (2, 0), "Price to date", PUB_DATE, "Date") - plot1._graph_price() - plot2._graph_price() - plot3._graph_price() - plot4._graph_price() - plot5._graph_price() + plot1._graph_price() + plot2._graph_price() + plot3._graph_price() + plot4._graph_price() + plot5._graph_price() - plt.savefig(f"{output_path}/cenu_grafiki.png") + plt.savefig(f"{output_path}/cenu_grafiki.png") def create_pdf(data): - pdf = FPDF("P", "mm", "A4") - pdf.add_page() - pdf.add_font("Roboto", fname="fonts/Roboto-Regular.ttf", uni=True) - pdf.set_font("Roboto", size=12) + pdf = FPDF("P", "mm", "A4") + pdf.add_page() + pdf.add_font("Roboto", fname="fonts/Roboto-Regular.ttf", uni=True) + pdf.set_font("Roboto", size=12) - usable_w = pdf.w - 2 * pdf.l_margin - width = usable_w / 7 - height = pdf.font_size * 2 - LINE_HEIGHT = 5 + usable_w = pdf.w - 2 * pdf.l_margin + width = usable_w / 7 + height = pdf.font_size * 2 + LINE_HEIGHT = 5 - # table head - for column in COLUMNS: - if column == PUB_DATE: - col_width = width * 2 - else: - col_width = width - pdf.cell(col_width, height, column, border=1) + # table head + for column in COLUMNS: + if column == PUB_DATE: + col_width = width * 2 + else: + col_width = width + pdf.cell(col_width, height, column, border=1) - pdf.ln(height) - # table contents - for _ in range(5): - rand_num = randint(2, len(data)) - for column in COLUMNS: - if column == PUB_DATE: - col_width = width * 2 - else: - col_width = width - pdf.cell(col_width, height, str(data[column].iloc[rand_num]), border=1) - pdf.ln(height) + pdf.ln(height) + # table contents + for _ in range(5): + rand_num = randint(2, len(data)) + for column in COLUMNS: + if column == PUB_DATE: + col_width = width * 2 + else: + col_width = width + pdf.cell(col_width, height, str( + data[column].iloc[rand_num]), border=1) + pdf.ln(height) - pdf.ln(height) - pdf.image(f"{output_path}/korelacija.png", w=usable_w) # corr graph - pdf.write(LINE_HEIGHT, "Starp istabu skaitu un cenu, kvadratūru un cenu ir liela korelācija.") - pdf.ln(height) - pdf.image(f"{output_path}/cenu_grafiki.png", w=usable_w) # price graph + pdf.ln(height) + pdf.image(f"{output_path}/korelacija.png", w=usable_w) # corr graph + pdf.write( + LINE_HEIGHT, "Starp istabu skaitu un cenu, kvadratūru un cenu ir liela korelācija.") + pdf.ln(height) + pdf.image(f"{output_path}/cenu_grafiki.png", w=usable_w) # price graph - # price graph conclusions - text = """ + # price graph conclusions + text = """ "Price to floor" grafiks - lielākā daļa pārdodamo dzīvokļu ir līdz 6. stāvam. "Price to room amount" grafiks - veido normālo sadalījumu (Gausa sadalījumu). "Price to quadrature" grafiks - jo lielāka dzīvokļa platība, jo dārgāks dzīvoklis. "Price to series" grafiks - jaunie, renovētie un pēc kara dzīvokļi ir dārgāki. "Price to date" grafiks - nav nekādas sakarības. """ - for txt in text.split("\n"): - pdf.write(LINE_HEIGHT, txt.strip()) - pdf.ln(LINE_HEIGHT) + for txt in text.split("\n"): + pdf.write(LINE_HEIGHT, txt.strip()) + pdf.ln(LINE_HEIGHT) - # mean/mode values - text = [ - "Vidējā cena: ", "Vidējā cena attiecībā pret kvadratūru: ", "Sērijas moda: ", "Vidējā cena attiecībā pret istabu skaitu: ", - "Vidējā cena attiecībā pret stāvu: " - ] - values = [ - round(mean(data[PRICE]), 2), - round(mean(data[PRICE]) / mean(data[QUADRATURE])), - mode(data[SERIES]), - round(mean(data[PRICE]) / mean(data[ROOM_AMOUNT])), - round(mean(data[PRICE]) / mean(data[FLOOR])) - ] - for txt, value in zip(text, values): - pdf.write(LINE_HEIGHT, f"{txt}{value}") - pdf.ln(LINE_HEIGHT) + # mean/mode values + text = [ + "Vidējā cena: ", "Vidējā cena attiecībā pret kvadratūru: ", "Sērijas moda: ", "Vidējā cena attiecībā pret istabu skaitu: ", + "Vidējā cena attiecībā pret stāvu: " + ] + values = [ + round(mean(data[PRICE]), 2), + round(mean(data[PRICE]) / mean(data[QUADRATURE])), + mode(data[SERIES]), + round(mean(data[PRICE]) / mean(data[ROOM_AMOUNT])), + round(mean(data[PRICE]) / mean(data[FLOOR])) + ] + for txt, value in zip(text, values): + pdf.write(LINE_HEIGHT, f"{txt}{value}") + pdf.ln(LINE_HEIGHT) - # adds photo of most frequent series - response = requests.get(series_photos[mode(data[SERIES])]) - img = Image.open(BytesIO(response.content)) - pdf.image(img) + # adds photo of most frequent series + response = requests.get(series_photos[mode(data[SERIES])]) + img = Image.open(BytesIO(response.content)) + pdf.image(img) - pdf.output("output/pdf/secinajumi.pdf") + pdf.output("output/pdf/secinajumi.pdf") def make_dir(): - if "output" not in listdir(): - mkdir("output") - if "excel" not in listdir("output"): - mkdir("output/excel") - if "graphs" not in listdir("output"): - mkdir("output/graphs") - if "pdf" not in listdir("output"): - mkdir("output/pdf") + if "output" not in listdir(): + mkdir("output") + if "excel" not in listdir("output"): + mkdir("output/excel") + if "graphs" not in listdir("output"): + mkdir("output/graphs") + if "pdf" not in listdir("output"): + mkdir("output/pdf") def graph_plot(): - data = read() - graph_corr(data) - graph_price(data) - create_pdf(data) + data = read() + graph_corr(data) + graph_price(data) + create_pdf(data) -flats_riga = SS("https://www.ss.com/lv/real-estate/flats/riga/all/sell/", "riga") -flats_rigareg = SS("https://www.ss.com/lv/real-estate/flats/riga-region/all/sell/", "rigareg") -flats_aizkraukle = SS("https://www.ss.com/lv/real-estate/flats/aizkraukle-and-reg/sell/", "aizkraukle") -flats_tukums = SS("https://www.ss.com/lv/real-estate/flats/tukums-and-reg/sell/", "tukums") -flats_ogre = SS("https://www.ss.com/lv/real-estate/flats/ogre-and-reg/sell/", "ogre") +flats_riga = SS( + "https://www.ss.com/lv/real-estate/flats/riga/all/sell/", "riga") +flats_rigareg = SS( + "https://www.ss.com/lv/real-estate/flats/riga-region/all/sell/", "rigareg") +flats_aizkraukle = SS( + "https://www.ss.com/lv/real-estate/flats/aizkraukle-and-reg/sell/", "aizkraukle") +flats_tukums = SS( + "https://www.ss.com/lv/real-estate/flats/tukums-and-reg/sell/", "tukums") +flats_ogre = SS( + "https://www.ss.com/lv/real-estate/flats/ogre-and-reg/sell/", "ogre") OPERATIONS = """ python pd_pandas_k_f_cagulis.py @@ -245,15 +261,15 @@ Operations: def main(argv): - for arg in argv: - if arg in ["-h", "--help"]: - print(OPERATIONS) - exit() - elif arg in ["-n", "--new"]: - flats_riga.get_data() - make_dir() - graph_plot() + for arg in argv: + if arg in ["-h", "--help"]: + print(OPERATIONS) + exit() + elif arg in ["-n", "--new"]: + flats_riga.get_data() + make_dir() + graph_plot() if __name__ == "__main__": - main(sys.argv[1:]) \ No newline at end of file + main(sys.argv[1:]) diff --git a/february/task_180222/ss_scraper.py b/february/task_180222/ss_scraper.py index 5a0a490f..55ee8b0c 100644 --- a/february/task_180222/ss_scraper.py +++ b/february/task_180222/ss_scraper.py @@ -17,94 +17,110 @@ HEADERS = { class SS: - def __init__(self, url, name): - self.url = url - self.name = name + def __init__(self, url, name): + self.url = url + self.name = name - def _get_page_amount(self): - page = requests.get(self.url, headers=HEADERS) - soup = BeautifulSoup(page.content, 'html.parser') + def _get_page_amount(self): + page = requests.get(self.url, headers=HEADERS) + soup = BeautifulSoup(page.content, 'html.parser') - try: - last_url = soup.find(class_='td2').findChild('a')['href'] - page_amount = last_url[last_url.find("page") + 4:last_url.find(".html")] - except: - page_amount = 1 - # print(f"Page amount = {page_amount}") + try: + last_url = soup.find(class_='td2').findChild('a')['href'] + page_amount = last_url[last_url.find( + "page") + 4:last_url.find(".html")] + except: + page_amount = 1 + # print(f"Page amount = {page_amount}") - return int(page_amount) + return int(page_amount) - def get_data(self): - items = [] - item_no = 1 - page_amount = self._get_page_amount() - # widgets = ["Getting data...", pbar.Bar("*")] - # bar = pbar.ProgressBar(max_value=page_amount, widgets=widgets).start() - bar = LoadBar(max=page_amount * 30, head="#", body="#") - bar.start() + def get_data(self): + items = [] + item_no = 1 + page_amount = self._get_page_amount() + # widgets = ["Getting data...", pbar.Bar("*")] + # bar = pbar.ProgressBar(max_value=page_amount, widgets=widgets).start() + bar = LoadBar(max=page_amount * 30, head="#", body="#") + bar.start() - for page_number in range(1, page_amount + 1): + for page_number in range(1, page_amount + 1): - url = self.url + f"/page{page_number}.html" - page = requests.get(url, headers=HEADERS) - soup = BeautifulSoup(page.content, 'html.parser') + url = self.url + f"/page{page_number}.html" + page = requests.get(url, headers=HEADERS) + soup = BeautifulSoup(page.content, 'html.parser') - # item ids - ids = [tag['id'] for tag in soup.select('tr[id]')] # creates list with ids - ids = [x for x in ids if "tr_bnr" not in x] # removes "tr_bnr" elements from list - ids.remove("head_line") # removes first "head_line" id - # print(f"Page {page_number}") + # item ids + ids = [tag['id'] + for tag in soup.select('tr[id]')] # creates list with ids + # removes "tr_bnr" elements from list + ids = [x for x in ids if "tr_bnr" not in x] + ids.remove("head_line") # removes first "head_line" id + # print(f"Page {page_number}") - # getting item data - for id in soup.find_all(id=ids): - # print(f"Item {item_no}") - bar.update(step=item_no) + # getting item data + for id in soup.find_all(id=ids): + # print(f"Item {item_no}") + bar.update(step=item_no) - item_no += 1 + item_no += 1 - for elem in id.find_all(class_='msga2-o pp6'): - items.append(elem.get_text()) + for elem in id.find_all(class_='msga2-o pp6'): + items.append(elem.get_text()) - if len(id.find_all(class_='msga2-o pp6')) == 7: - del items[-2] + if len(id.find_all(class_='msga2-o pp6')) == 7: + del items[-2] - # adverts url - item_url = id.findChild(class_='msg2').findChild('div').findChild('a')['href'] # gets url - item_url = "https://www.ss.com" + item_url - item_page = requests.get(item_url, headers=HEADERS) - item_soup = BeautifulSoup(item_page.content, 'html.parser') + # adverts url + item_url = id.findChild(class_='msg2').findChild( + 'div').findChild('a')['href'] # gets url + item_url = "https://www.ss.com" + item_url + item_page = requests.get(item_url, headers=HEADERS) + item_soup = BeautifulSoup(item_page.content, 'html.parser') - # adverts full text - item_text = item_soup.find(id='msg_div_msg').get_text() # gets full text - item_text = item_text[:item_text.find("Pilsēta:")] # removes text last part (table) - items.append(item_text) + # adverts full text + item_text = item_soup.find( + id='msg_div_msg').get_text() # gets full text + # removes text last part (table) + item_text = item_text[:item_text.find("Pilsēta:")] + items.append(item_text) - # adverts publication date - item_date = item_soup.find_all('td', class_='msg_footer') # gets all 'msg_footer' class' - item_date = item_date[2].get_text() # extracts 3rd element - items.append(item_date[8:18]) # crops date - bar.end() - chunk_size = 8 - chunked_items_list = [items[i:i + chunk_size] for i in range(0, len(items), chunk_size)] # combines each 'chunk_size' elements into array - columns = ["Atrašanās vieta", "Istabu skaits", "Kvadratūra", "Stāvs", "Sērija", "Cena", "Pilns sludinājuma teksts", "Izvietošanas datums"] - df = pd.DataFrame(chunked_items_list, columns=columns) - time = datetime.now().strftime("%d%m%y%H%M%S") # current time - if "excel" not in listdir("output"): - mkdir("output/excel") - df.to_excel(excel_writer=f"output/excel/ss_{self.name}_{time}.xlsx", index=False) + # adverts publication date + # gets all 'msg_footer' class' + item_date = item_soup.find_all('td', class_='msg_footer') + item_date = item_date[2].get_text() # extracts 3rd element + items.append(item_date[8:18]) # crops date + bar.end() + chunk_size = 8 + # combines each 'chunk_size' elements into array + chunked_items_list = [items[i:i + chunk_size] + for i in range(0, len(items), chunk_size)] + columns = ["Atrašanās vieta", "Istabu skaits", "Kvadratūra", "Stāvs", + "Sērija", "Cena", "Pilns sludinājuma teksts", "Izvietošanas datums"] + df = pd.DataFrame(chunked_items_list, columns=columns) + time = datetime.now().strftime("%d%m%y%H%M%S") # current time + if "excel" not in listdir("output"): + mkdir("output/excel") + df.to_excel( + excel_writer=f"output/excel/ss_{self.name}_{time}.xlsx", index=False) -flats_riga = SS("https://www.ss.com/lv/real-estate/flats/riga/all/sell/", "riga") -flats_rigareg = SS("https://www.ss.com/lv/real-estate/flats/riga-region/all/sell/", "rigareg") -flats_aizkraukle = SS("https://www.ss.com/lv/real-estate/flats/aizkraukle-and-reg/sell/", "aizkraukle") -flats_tukums = SS("https://www.ss.com/lv/real-estate/flats/tukums-and-reg/sell/", "tukums") -flats_ogre = SS("https://www.ss.com/lv/real-estate/flats/ogre-and-reg/sell/", "ogre") +flats_riga = SS( + "https://www.ss.com/lv/real-estate/flats/riga/all/sell/", "riga") +flats_rigareg = SS( + "https://www.ss.com/lv/real-estate/flats/riga-region/all/sell/", "rigareg") +flats_aizkraukle = SS( + "https://www.ss.com/lv/real-estate/flats/aizkraukle-and-reg/sell/", "aizkraukle") +flats_tukums = SS( + "https://www.ss.com/lv/real-estate/flats/tukums-and-reg/sell/", "tukums") +flats_ogre = SS( + "https://www.ss.com/lv/real-estate/flats/ogre-and-reg/sell/", "ogre") def main(): - flats_riga.get_data() - # flats_rigareg.get_data() + flats_riga.get_data() + # flats_rigareg.get_data() if __name__ == '__main__': - main() + main() diff --git a/january/task_050122/main.py b/january/task_050122/main.py index ca75e365..17200e7f 100644 --- a/january/task_050122/main.py +++ b/january/task_050122/main.py @@ -7,24 +7,24 @@ import pandas as pd def main(): - print(consuption(6.7, 2500)) + print(consuption(6.7, 2500)) def try_except(): - try: - # print(error) # "Name Error" - data = pd.read_csv("auto_imports_mainits.csx") # "Error 2" + try: + # print(error) # "Name Error" + data = pd.read_csv("auto_imports_mainits.csx") # "Error 2" - except NameError: - print("Name Error") + except NameError: + print("Name Error") - except Exception as error: - print(error) + except Exception as error: + print(error) - except: - print("Error 2") + except: + print("Error 2") if __name__ == '__main__': - # main() - try_except() + # main() + try_except() diff --git a/january/task_050122/main_csv.py b/january/task_050122/main_csv.py index 278942de..85a87f15 100644 --- a/january/task_050122/main_csv.py +++ b/january/task_050122/main_csv.py @@ -6,13 +6,13 @@ import pandas as pd def main(): - data = pd.read_csv("auto_imports_mainits.csv") - blank = data.isnull().any().sum() - print(f"There are empty spaces in {blank} columns") + data = pd.read_csv("auto_imports_mainits.csv") + blank = data.isnull().any().sum() + print(f"There are empty spaces in {blank} columns") - print(data.isnull().sum()) - print(data.columns[data.isnull().any()]) + print(data.isnull().sum()) + print(data.columns[data.isnull().any()]) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/january/task_050122/main_vs_module_A_Bisenieks.py b/january/task_050122/main_vs_module_A_Bisenieks.py index 1f0f9e16..5aa2ab73 100644 --- a/january/task_050122/main_vs_module_A_Bisenieks.py +++ b/january/task_050122/main_vs_module_A_Bisenieks.py @@ -3,4 +3,6 @@ import pandas dati = pandas.read_csv('auto_imports_mainits.csv') for index, element in enumerate(dati.isnull().sum()): - if element != 0: print(f"| {dati.columns[index]}" + " " * (25 - len(str(dati.columns[index]))) + f"{element}") + if element != 0: + print(f"| {dati.columns[index]}" + " " * (25 - + len(str(dati.columns[index]))) + f"{element}") diff --git a/january/task_050122/module.py b/january/task_050122/module.py index cc440b6d..b327494d 100644 --- a/january/task_050122/module.py +++ b/january/task_050122/module.py @@ -1,11 +1,11 @@ def consuption(consuption: float, distance: int, price: float = 1.34): - result = distance / 100 * consuption * price - return round(result, 3) + result = distance / 100 * consuption * price + return round(result, 3) def main(): - print(consuption(7.2, 7200)) + print(consuption(7.2, 7200)) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/january/task_050122/task_050122_homework.py b/january/task_050122/task_050122_homework.py index 3d1b3045..81c6a115 100644 --- a/january/task_050122/task_050122_homework.py +++ b/january/task_050122/task_050122_homework.py @@ -6,17 +6,18 @@ import pandas as pd def main(): - data = pd.read_csv("auto_imports_mainits.csv") - # 1st method - for column in data.columns: - if data[column].isnull().sum() > 0: - print(f"{column} {data[column].isnull().sum()}") + data = pd.read_csv("auto_imports_mainits.csv") + # 1st method + for column in data.columns: + if data[column].isnull().sum() > 0: + print(f"{column} {data[column].isnull().sum()}") - print("-" * 22) + print("-" * 22) - # 2nd method - print(pd.DataFrame(data.isnull().sum(), data.columns[data.isnull().any()]).to_string(header=None)) + # 2nd method + print(pd.DataFrame(data.isnull().sum(), + data.columns[data.isnull().any()]).to_string(header=None)) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/january/task_050122/task_190122.py b/january/task_050122/task_190122.py index 2a0eea69..cf115f5e 100644 --- a/january/task_050122/task_190122.py +++ b/january/task_050122/task_190122.py @@ -7,75 +7,76 @@ from word2number import w2n def main(): - data = pd.read_csv("auto_imports_mainits.csv") + data = pd.read_csv("auto_imports_mainits.csv") - # summary = data["normalized-losses"].notnull() # returns boolean - # print(data[summary], "\n") # "normalized-losses" is not empty - # print(data[~summary]) # inverts all the bits - # print(len(data[~summary])) + # summary = data["normalized-losses"].notnull() # returns boolean + # print(data[summary], "\n") # "normalized-losses" is not empty + # print(data[~summary]) # inverts all the bits + # print(len(data[~summary])) - data_copy = data.copy() + data_copy = data.copy() - # Delete rows with empty spots - # print(f"Before erasing: {data_copy.shape}") - # print(f"After erasing: {data_copy.dropna().shape}") + # Delete rows with empty spots + # print(f"Before erasing: {data_copy.shape}") + # print(f"After erasing: {data_copy.dropna().shape}") - # Delete column - # print(f"Before erasing: {data_copy.shape}") - del data_copy["normalized-losses"] - # print(f"After erasing: {data_copy.shape}") - # print(f"Blank spots: {data_copy.isnull().any().sum()}") + # Delete column + # print(f"Before erasing: {data_copy.shape}") + del data_copy["normalized-losses"] + # print(f"After erasing: {data_copy.shape}") + # print(f"Blank spots: {data_copy.isnull().any().sum()}") - # data_copy2 = data_copy.copy() - # print(data_copy2.head()) - # data_copy2.drop(data_copy2.columns[[0, 1]], axis=1, inplace=True) - # print(data_copy2.head()) + # data_copy2 = data_copy.copy() + # print(data_copy2.head()) + # data_copy2.drop(data_copy2.columns[[0, 1]], axis=1, inplace=True) + # print(data_copy2.head()) - dislike = ["N/A", "NA", "--"] - data_copy3 = pd.read_csv("auto_imports_mainits.csv", na_values=dislike) + dislike = ["N/A", "NA", "--"] + data_copy3 = pd.read_csv("auto_imports_mainits.csv", na_values=dislike) - # Mean - # print(data_copy3.iloc[52], "\n") - # mean = data_copy3["bore"].mean() - # data_copy3["bore"].fillna(mean, inplace=True) - # print(data_copy3.iloc[52]) + # Mean + # print(data_copy3.iloc[52], "\n") + # mean = data_copy3["bore"].mean() + # data_copy3["bore"].fillna(mean, inplace=True) + # print(data_copy3.iloc[52]) - # Median - # print(data_copy3.iloc[53], "\n") - # median = data_copy3["bore"].median() - # data_copy3["bore"].fillna(median, inplace=True) - # print(data_copy3.iloc[53]) + # Median + # print(data_copy3.iloc[53], "\n") + # median = data_copy3["bore"].median() + # data_copy3["bore"].fillna(median, inplace=True) + # print(data_copy3.iloc[53]) - # Mode - # print(data_copy3.iloc[60], "\n") - # mode = data_copy3["bore"].mode() - # data_copy3["bore"].fillna(mode, inplace=True) - # print(data_copy3.iloc[60]) + # Mode + # print(data_copy3.iloc[60], "\n") + # mode = data_copy3["bore"].mode() + # data_copy3["bore"].fillna(mode, inplace=True) + # print(data_copy3.iloc[60]) - # print(data_copy3.dtypes) + # print(data_copy3.dtypes) - # data_copy3["curb-weight"] = pd.to_numeric(data_copy3["curb-weight"], errors='coerce') - # data_copy3["curb-weight"] = data_copy3["curb-weight"].astype("float64") - # print(data_copy3.dtypes) + # data_copy3["curb-weight"] = pd.to_numeric(data_copy3["curb-weight"], errors='coerce') + # data_copy3["curb-weight"] = data_copy3["curb-weight"].astype("float64") + # print(data_copy3.dtypes) - # Replaces word written numbers to intigers - columns = ["num-of-doors", "num-of-cylinders"] - for column in columns: - for value in data_copy3[column]: - try: - data_copy3 = data_copy3.replace(to_replace=value, value=w2n.word_to_num(value)) - print(type(w2n.word_to_num(value))) - except: - pass - print(data_copy3[["num-of-doors", "num-of-cylinders"]]) + # Replaces word written numbers to intigers + columns = ["num-of-doors", "num-of-cylinders"] + for column in columns: + for value in data_copy3[column]: + try: + data_copy3 = data_copy3.replace( + to_replace=value, value=w2n.word_to_num(value)) + print(type(w2n.word_to_num(value))) + except: + pass + print(data_copy3[["num-of-doors", "num-of-cylinders"]]) - # Leaves only columns that contain numbers - data_copy4 = data_copy3.copy() - for column in data_copy4: - if isinstance(data_copy4[column][0], str): - del data_copy4[column] - print(data_copy4) + # Leaves only columns that contain numbers + data_copy4 = data_copy3.copy() + for column in data_copy4: + if isinstance(data_copy4[column][0], str): + del data_copy4[column] + print(data_copy4) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/november/task_061021/kcagulis_061021.py b/november/task_061021/kcagulis_061021.py index bc1b2f94..9c1fe820 100644 --- a/november/task_061021/kcagulis_061021.py +++ b/november/task_061021/kcagulis_061021.py @@ -7,38 +7,42 @@ CHAPTERS = 61 # creates file with chapters and row numbers def read_array(document): - with open(document, "r", encoding='utf-8') as book: - lines = [line.strip('\n') for line in book] # removes 'enter' characters - with open('array_output.txt', 'w') as output: - for i in range(1, CHAPTERS + 1): - line = lines.index(f"Chapter {i}") + 1 # finds all chapter indexes/lines - output.write(f"Line {line} - Chapter {i}\n") # writes line in file + with open(document, "r", encoding='utf-8') as book: + lines = [line.strip('\n') + for line in book] # removes 'enter' characters + with open('array_output.txt', 'w') as output: + for i in range(1, CHAPTERS + 1): + # finds all chapter indexes/lines + line = lines.index(f"Chapter {i}") + 1 + output.write(f"Line {line} - Chapter {i}\n") # writes line in file # creates file with chapter positions def read_string(document): - with open(document, "r", encoding='utf-8') as book: - lines = book.read() - with open('str_output.txt', 'w') as output: - for i in range(1, CHAPTERS + 1): - _, position = re.finditer(rf"\bChapter {i}\b", lines) # finds all chapter positions - output.write(f"Position {position.start()} - Chapter {i}\n") # writes position in file + with open(document, "r", encoding='utf-8') as book: + lines = book.read() + with open('str_output.txt', 'w') as output: + for i in range(1, CHAPTERS + 1): + # finds all chapter positions + _, position = re.finditer(rf"\bChapter {i}\b", lines) + # writes position in file + output.write(f"Position {position.start()} - Chapter {i}\n") def read_book(document): - read_array(document) - read_string(document) + read_array(document) + read_string(document) def main(): - try: - read_book("book.txt") - except: - try: - read_book("1342-0.txt") - except: - read_book(input("Ievadiet faila nosaukumu: ")) + try: + read_book("book.txt") + except: + try: + read_book("1342-0.txt") + except: + read_book(input("Ievadiet faila nosaukumu: ")) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/november/task_171121/task_171121.py b/november/task_171121/task_171121.py index 67d92608..730f1cfe 100644 --- a/november/task_171121/task_171121.py +++ b/november/task_171121/task_171121.py @@ -8,91 +8,95 @@ data = pd.read_csv("company_sales_data.csv") def task_1(): - plt.figure(figsize=(10, 6)) # (x, y) - x = range(len(data["month_number"])) # gets range of months - plt.plot(x, data["total_profit"]) # sets up the plot - plt.xticks(x, data["month_number"], fontsize=15) # sets x value step - plt.yticks(fontsize=15) - plt.ylim(ymin=100000) # sets minimal y value + plt.figure(figsize=(10, 6)) # (x, y) + x = range(len(data["month_number"])) # gets range of months + plt.plot(x, data["total_profit"]) # sets up the plot + plt.xticks(x, data["month_number"], fontsize=15) # sets x value step + plt.yticks(fontsize=15) + plt.ylim(ymin=100000) # sets minimal y value - set_labels("Company profit per month", "Month number", "Total profit") + set_labels("Company profit per month", "Month number", "Total profit") - plt.show() + plt.show() def task_2(): - plt.figure(figsize=(10, 6)) # (x, y) + plt.figure(figsize=(10, 6)) # (x, y) - x = range(len(data["month_number"])) # gets range of months + x = range(len(data["month_number"])) # gets range of months - data_list = list(data.columns)[1:-2] # gets and trims column names + data_list = list(data.columns)[1:-2] # gets and trims column names - for column in data_list: - plt.plot(x, data[column], lw=4, marker='o', ms=10) # ms = marker size + for column in data_list: + plt.plot(x, data[column], lw=4, marker='o', ms=10) # ms = marker size - plt.xticks(x, data["month_number"], fontsize=15) # sets x value step - plt.yticks(fontsize=15) + plt.xticks(x, data["month_number"], fontsize=15) # sets x value step + plt.yticks(fontsize=15) - set_labels("Sales data", "Month number", "Sales units in number") + set_labels("Sales data", "Month number", "Sales units in number") - new_data_list = list(map(lambda x: x.capitalize() + " Sales Data", data_list)) # capitalizes each word in list - plt.legend(new_data_list, loc='upper left', fontsize=15) - plt.show() + # capitalizes each word in list + new_data_list = list( + map(lambda x: x.capitalize() + " Sales Data", data_list)) + plt.legend(new_data_list, loc='upper left', fontsize=15) + plt.show() def task_3(): - plt.figure(figsize=(10, 6)) # (x, y) - x = range(len(data["month_number"])) # gets range of months + plt.figure(figsize=(10, 6)) # (x, y) + x = range(len(data["month_number"])) # gets range of months - plt.scatter(x, data["toothpaste"], s=75) # sets up the plot - plt.grid(ls='dashed', lw=1.5) # sets grid line type and width - plt.xticks(x, data["month_number"], fontsize=15) # sets x value step - plt.yticks(fontsize=15) + plt.scatter(x, data["toothpaste"], s=75) # sets up the plot + plt.grid(ls='dashed', lw=1.5) # sets grid line type and width + plt.xticks(x, data["month_number"], fontsize=15) # sets x value step + plt.yticks(fontsize=15) - set_labels("Toothpaste Sales data", "Month number", "Number of units Sold") - plt.legend(["Toothpaste Sales data"], loc='upper left', fontsize=15) - plt.show() + set_labels("Toothpaste Sales data", "Month number", "Number of units Sold") + plt.legend(["Toothpaste Sales data"], loc='upper left', fontsize=15) + plt.show() def task_4(): - items = ["facecream", "facewash"] + items = ["facecream", "facewash"] - data.plot(x="month_number", y=["facecream", "facewash"], kind='bar', figsize=(10, 6), fontsize=15) + data.plot(x="month_number", y=[ + "facecream", "facewash"], kind='bar', figsize=(10, 6), fontsize=15) - plt.xticks(rotation=0) # rotates x lables to 0 - plt.grid(ls='dashed', lw=1.5) # sets grid line type and width + plt.xticks(rotation=0) # rotates x lables to 0 + plt.grid(ls='dashed', lw=1.5) # sets grid line type and width - set_labels("Facewash and Facecream Sales data", "Month number", "Sales units in number") - new_items_list = list(map(lambda x: x.capitalize() + " Sales Data", items)) - plt.legend(new_items_list, loc='upper left', fontsize=15) - plt.show() + set_labels("Facewash and Facecream Sales data", + "Month number", "Sales units in number") + new_items_list = list(map(lambda x: x.capitalize() + " Sales Data", items)) + plt.legend(new_items_list, loc='upper left', fontsize=15) + plt.show() def set_labels(title: str, xlabel: str, ylabel: str): - plt.title(title, fontsize=15) - plt.xlabel(xlabel, fontsize=15) - plt.ylabel(ylabel, fontsize=15) + plt.title(title, fontsize=15) + plt.xlabel(xlabel, fontsize=15) + plt.ylabel(ylabel, fontsize=15) def main(): - task = input("""Ivēlieties uzdevumu: + task = input("""Ivēlieties uzdevumu: 1 - pirmais uzdevums 2 - otrais uzdevums 3 - trešais uzdevums 4 - ceturtais uzdevums """) - if task == "1": - task_1() - elif task == "2": - task_2() - elif task == "3": - task_3() - elif task == "4": - task_4() - else: - print("Tika ievadīts nepareiz cipars") + if task == "1": + task_1() + elif task == "2": + task_2() + elif task == "3": + task_3() + elif task == "4": + task_4() + else: + print("Tika ievadīts nepareiz cipars") if __name__ == '__main__': - main() + main() diff --git a/november/task_241121/demo_ikea.py b/november/task_241121/demo_ikea.py index 1c28b94b..50bf8218 100644 --- a/november/task_241121/demo_ikea.py +++ b/november/task_241121/demo_ikea.py @@ -8,37 +8,37 @@ url = "https://www.ikea.lv/" all_page = requests.get(url) if all_page.status_code == 200: - page = BeautifulSoup(all_page.content, 'html.parser') - found = page.find_all(class_="itemBlock") + page = BeautifulSoup(all_page.content, 'html.parser') + found = page.find_all(class_="itemBlock") - info = [] - item_array = [] - for item in found: - item = item.findChild("div").findChild(class_="card-body") + info = [] + item_array = [] + for item in found: + item = item.findChild("div").findChild(class_="card-body") - item_name = item.findChild(class_="itemName") - item_name = item_name.findChild("div").findChild("h6") + item_name = item.findChild(class_="itemName") + item_name = item_name.findChild("div").findChild("h6") - item_array.append(item_name.string) + item_array.append(item_name.string) - price = item.findChild(class_="itemPrice-wrapper") - price = price.findChild("p").findChild("span") + price = item.findChild(class_="itemPrice-wrapper") + price = price.findChild("p").findChild("span") - try: - item_array.append(price.attrs["data-price"]) - except: - item_array.append(price.attrs["data-pricefamily"]) + try: + item_array.append(price.attrs["data-price"]) + except: + item_array.append(price.attrs["data-pricefamily"]) - all_facts = [] - for facts in all_facts: - if len(facts) == 1: - all_facts.append(facts.string) - else: - atrasts = facts.findChildren("span") - for i in atrasts: - all_facts.append(i.string) + all_facts = [] + for facts in all_facts: + if len(facts) == 1: + all_facts.append(facts.string) + else: + atrasts = facts.findChildren("span") + for i in atrasts: + all_facts.append(i.string) - item_array.append(all_facts) - info.append(item_array) - for ieraksts in info: - print(ieraksts) + item_array.append(all_facts) + info.append(item_array) + for ieraksts in info: + print(ieraksts) diff --git a/november/task_241121/main.py b/november/task_241121/main.py index 9ddcf320..33dbf789 100644 --- a/november/task_241121/main.py +++ b/november/task_241121/main.py @@ -7,21 +7,22 @@ all_page = requests.get(url) # print(all_page) if all_page.status_code == 200: - print(":)") - page = BeautifulSoup(all_page.content, 'html.parser') - found = page.find(id="Etymology") - # print(found) - # print(found.constents) - # print(found.string) - found = page.find_all(class_="mw-headline") - # print(found) - found = page.find_all("li", class_="interlanguage-link") - # print(found) - found = page.find_all("a", class_="interlanguage-link-target") - # print(found) - for i in found: - # print(i.prettify()) - if i.attrs["lang"] == "ru": - print(f"{i.attrs['lang']} \t {i.attrs['title']} \n {i.attrs['href']}") + print(":)") + page = BeautifulSoup(all_page.content, 'html.parser') + found = page.find(id="Etymology") + # print(found) + # print(found.constents) + # print(found.string) + found = page.find_all(class_="mw-headline") + # print(found) + found = page.find_all("li", class_="interlanguage-link") + # print(found) + found = page.find_all("a", class_="interlanguage-link-target") + # print(found) + for i in found: + # print(i.prettify()) + if i.attrs["lang"] == "ru": + print( + f"{i.attrs['lang']} \t {i.attrs['title']} \n {i.attrs['href']}") else: - print(":(") \ No newline at end of file + print(":(") diff --git a/oktober/task_061021/kcagulis_061021.py b/oktober/task_061021/kcagulis_061021.py index bc1b2f94..9c1fe820 100644 --- a/oktober/task_061021/kcagulis_061021.py +++ b/oktober/task_061021/kcagulis_061021.py @@ -7,38 +7,42 @@ CHAPTERS = 61 # creates file with chapters and row numbers def read_array(document): - with open(document, "r", encoding='utf-8') as book: - lines = [line.strip('\n') for line in book] # removes 'enter' characters - with open('array_output.txt', 'w') as output: - for i in range(1, CHAPTERS + 1): - line = lines.index(f"Chapter {i}") + 1 # finds all chapter indexes/lines - output.write(f"Line {line} - Chapter {i}\n") # writes line in file + with open(document, "r", encoding='utf-8') as book: + lines = [line.strip('\n') + for line in book] # removes 'enter' characters + with open('array_output.txt', 'w') as output: + for i in range(1, CHAPTERS + 1): + # finds all chapter indexes/lines + line = lines.index(f"Chapter {i}") + 1 + output.write(f"Line {line} - Chapter {i}\n") # writes line in file # creates file with chapter positions def read_string(document): - with open(document, "r", encoding='utf-8') as book: - lines = book.read() - with open('str_output.txt', 'w') as output: - for i in range(1, CHAPTERS + 1): - _, position = re.finditer(rf"\bChapter {i}\b", lines) # finds all chapter positions - output.write(f"Position {position.start()} - Chapter {i}\n") # writes position in file + with open(document, "r", encoding='utf-8') as book: + lines = book.read() + with open('str_output.txt', 'w') as output: + for i in range(1, CHAPTERS + 1): + # finds all chapter positions + _, position = re.finditer(rf"\bChapter {i}\b", lines) + # writes position in file + output.write(f"Position {position.start()} - Chapter {i}\n") def read_book(document): - read_array(document) - read_string(document) + read_array(document) + read_string(document) def main(): - try: - read_book("book.txt") - except: - try: - read_book("1342-0.txt") - except: - read_book(input("Ievadiet faila nosaukumu: ")) + try: + read_book("book.txt") + except: + try: + read_book("1342-0.txt") + except: + read_book(input("Ievadiet faila nosaukumu: ")) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/pygame/snake/source/assets/scripts/classes.py b/pygame/snake/source/assets/scripts/classes.py index c13aad1a..c663aeff 100644 --- a/pygame/snake/source/assets/scripts/classes.py +++ b/pygame/snake/source/assets/scripts/classes.py @@ -5,182 +5,189 @@ from random import randrange class Cube: - def __init__(self, position, color=DARK_PURPLE) -> None: - self.pos = position - self.direction = (1, 0) - self.color = color + def __init__(self, position, color=DARK_PURPLE) -> None: + self.pos = position + self.direction = (1, 0) + self.color = color - def move(self, direction: tuple) -> None: - self.direction = direction - self.pos = (self.pos[0] + self.direction[0], self.pos[1] + self.direction[1]) + def move(self, direction: tuple) -> None: + self.direction = direction + self.pos = (self.pos[0] + self.direction[0], + self.pos[1] + self.direction[1]) - def draw(self, eyes=False) -> None: - distance = WIDTH // ROWS - i, j = self.pos + def draw(self, eyes=False) -> None: + distance = WIDTH // ROWS + i, j = self.pos - pygame.draw.rect(WINDOW, self.color, (i * distance + 1, j * distance + 1, distance - 2, distance - 2)) - if eyes: - center = distance // 2 - radius = 3 - circle_middle = (i * distance + center - radius, j * distance + 8) - circle_middle_2 = (i * distance + distance - radius * 2, j * distance + 8) - pygame.draw.circle(WINDOW, BLACK, circle_middle, radius) - pygame.draw.circle(WINDOW, BLACK, circle_middle_2, radius) + pygame.draw.rect(WINDOW, self.color, (i * distance + 1, + j * distance + 1, distance - 2, distance - 2)) + if eyes: + center = distance // 2 + radius = 3 + circle_middle = (i * distance + center - radius, j * distance + 8) + circle_middle_2 = (i * distance + distance - + radius * 2, j * distance + 8) + pygame.draw.circle(WINDOW, BLACK, circle_middle, radius) + pygame.draw.circle(WINDOW, BLACK, circle_middle_2, radius) class Snake: - def __init__(self, position: tuple, color: tuple, name: str, player_number: int = 1, multiplayer: bool = False) -> None: - self.color = color - self.head = Cube(position, self.color) - self.body = [] - self.body.append(self.head) - self.turns = {} - self.direction = (1, 0) - self.number = player_number - self.name = name - self.multiplayer = multiplayer + def __init__(self, position: tuple, color: tuple, name: str, player_number: int = 1, multiplayer: bool = False) -> None: + self.color = color + self.head = Cube(position, self.color) + self.body = [] + self.body.append(self.head) + self.turns = {} + self.direction = (1, 0) + self.number = player_number + self.name = name + self.multiplayer = multiplayer - def move(self) -> None: - keys = pygame.key.get_pressed() - if self.multiplayer: - num_1, num_2 = 1, 2 - else: - num_1, num_2 = 1, 1 + def move(self) -> None: + keys = pygame.key.get_pressed() + if self.multiplayer: + num_1, num_2 = 1, 2 + else: + num_1, num_2 = 1, 1 - if self.number == num_1: - if keys[pygame.K_LEFT] and self.direction != (1, 0): # turn left - self.direction = -1, 0 - self.turns[self.head.pos[:]] = self.direction + if self.number == num_1: + if keys[pygame.K_LEFT] and self.direction != (1, 0): # turn left + self.direction = -1, 0 + self.turns[self.head.pos[:]] = self.direction - if keys[pygame.K_RIGHT] and self.direction != (-1, 0): # turn right - self.direction = 1, 0 - self.turns[self.head.pos[:]] = self.direction + # turn right + if keys[pygame.K_RIGHT] and self.direction != (-1, 0): + self.direction = 1, 0 + self.turns[self.head.pos[:]] = self.direction - if keys[pygame.K_UP] and self.direction != (0, 1): # turn up - self.direction = 0, -1 - self.turns[self.head.pos[:]] = self.direction + if keys[pygame.K_UP] and self.direction != (0, 1): # turn up + self.direction = 0, -1 + self.turns[self.head.pos[:]] = self.direction - if keys[pygame.K_DOWN] and self.direction != (0, -1): # turn down - self.direction = 0, 1 - self.turns[self.head.pos[:]] = self.direction + if keys[pygame.K_DOWN] and self.direction != (0, -1): # turn down + self.direction = 0, 1 + self.turns[self.head.pos[:]] = self.direction - if self.number == num_2: - if keys[pygame.K_a] and self.direction != (1, 0): # turn left - self.direction = -1, 0 - self.turns[self.head.pos[:]] = self.direction + if self.number == num_2: + if keys[pygame.K_a] and self.direction != (1, 0): # turn left + self.direction = -1, 0 + self.turns[self.head.pos[:]] = self.direction - if keys[pygame.K_d] and self.direction != (-1, 0): # turn right - self.direction = 1, 0 - self.turns[self.head.pos[:]] = self.direction + if keys[pygame.K_d] and self.direction != (-1, 0): # turn right + self.direction = 1, 0 + self.turns[self.head.pos[:]] = self.direction - if keys[pygame.K_w] and self.direction != (0, 1): # turn up - self.direction = 0, -1 - self.turns[self.head.pos[:]] = self.direction + if keys[pygame.K_w] and self.direction != (0, 1): # turn up + self.direction = 0, -1 + self.turns[self.head.pos[:]] = self.direction - if keys[pygame.K_s] and self.direction != (0, -1): # turn down - self.direction = 0, 1 - self.turns[self.head.pos[:]] = self.direction + if keys[pygame.K_s] and self.direction != (0, -1): # turn down + self.direction = 0, 1 + self.turns[self.head.pos[:]] = self.direction - for index, head in enumerate(self.body): - head_pos = head.pos[:] - if head_pos in self.turns: - turn = self.turns[head_pos] - head.move((turn[0], turn[1])) - if index == len(self.body) - 1: - self.turns.pop(head_pos) - else: - from globals import walls - from snake import end_screen - if walls: # end game if goes into the wall - head.move(head.direction) - if head.direction[0] == -1 and head.pos[0] < 0: # left to right - end_screen() + for index, head in enumerate(self.body): + head_pos = head.pos[:] + if head_pos in self.turns: + turn = self.turns[head_pos] + head.move((turn[0], turn[1])) + if index == len(self.body) - 1: + self.turns.pop(head_pos) + else: + from globals import walls + from snake import end_screen + if walls: # end game if goes into the wall + head.move(head.direction) + if head.direction[0] == -1 and head.pos[0] < 0: # left to right + end_screen() - if head.direction[0] == 1 and head.pos[0] >= ROWS: # right to left - end_screen() + if head.direction[0] == 1 and head.pos[0] >= ROWS: # right to left + end_screen() - if head.direction[1] == 1 and head.pos[1] >= COLUMNS: # bottom to top - end_screen() + if head.direction[1] == 1 and head.pos[1] >= COLUMNS: # bottom to top + end_screen() - if head.direction[1] == -1 and head.pos[1] < 0: # top to bottom - end_screen() + if head.direction[1] == -1 and head.pos[1] < 0: # top to bottom + end_screen() - else: # move player to other screen size - if head.direction[0] == -1 and head.pos[0] <= 0: # left to right - head.pos = (ROWS - 1, head.pos[1]) + else: # move player to other screen size + if head.direction[0] == -1 and head.pos[0] <= 0: # left to right + head.pos = (ROWS - 1, head.pos[1]) - elif head.direction[0] == 1 and head.pos[0] >= ROWS - 1: # right to left - head.pos = (0, head.pos[1]) + elif head.direction[0] == 1 and head.pos[0] >= ROWS - 1: # right to left + head.pos = (0, head.pos[1]) - elif head.direction[1] == 1 and head.pos[1] >= COLUMNS - 1: # bottom to top - head.pos = (head.pos[0], 0) + # bottom to top + elif head.direction[1] == 1 and head.pos[1] >= COLUMNS - 1: + head.pos = (head.pos[0], 0) - elif head.direction[1] == -1 and head.pos[1] <= 0: # top to bottom - head.pos = (head.pos[0], COLUMNS - 1) + elif head.direction[1] == -1 and head.pos[1] <= 0: # top to bottom + head.pos = (head.pos[0], COLUMNS - 1) - else: - head.move(head.direction) + else: + head.move(head.direction) - def add_cube(self) -> None: - tail = self.body[-1] - if tail.direction == (1, 0): - self.body.append(Cube((tail.pos[0] - 1, tail.pos[1]), self.color)) - elif tail.direction == (-1, 0): - self.body.append(Cube((tail.pos[0] + 1, tail.pos[1]), self.color)) - elif tail.direction == (0, 1): - self.body.append(Cube((tail.pos[0], tail.pos[1] - 1), self.color)) - elif tail.direction == (0, -1): - self.body.append(Cube((tail.pos[0], tail.pos[1] + 1), self.color)) + def add_cube(self) -> None: + tail = self.body[-1] + if tail.direction == (1, 0): + self.body.append(Cube((tail.pos[0] - 1, tail.pos[1]), self.color)) + elif tail.direction == (-1, 0): + self.body.append(Cube((tail.pos[0] + 1, tail.pos[1]), self.color)) + elif tail.direction == (0, 1): + self.body.append(Cube((tail.pos[0], tail.pos[1] - 1), self.color)) + elif tail.direction == (0, -1): + self.body.append(Cube((tail.pos[0], tail.pos[1] + 1), self.color)) - self.body[-1].direction = tail.direction + self.body[-1].direction = tail.direction - def remove_cube(self) -> None: - self.body.pop(-1) + def remove_cube(self) -> None: + self.body.pop(-1) - def draw(self) -> None: - for index, head in enumerate(self.body): - if index == 0: - head.draw(eyes=True) - else: - head.draw() + def draw(self) -> None: + for index, head in enumerate(self.body): + if index == 0: + head.draw(eyes=True) + else: + head.draw() class Snack: - def __init__(self, texture) -> None: - self.texture = texture - self.randomize() + def __init__(self, texture) -> None: + self.texture = texture + self.randomize() - def draw_snack(self) -> None: - snack_rect = pygame.Rect(self.pos[0] * CELL_SIZE, self.pos[1] * CELL_SIZE, CELL_SIZE, CELL_SIZE) - WINDOW.blit(self.texture, snack_rect) + def draw_snack(self) -> None: + snack_rect = pygame.Rect( + self.pos[0] * CELL_SIZE, self.pos[1] * CELL_SIZE, CELL_SIZE, CELL_SIZE) + WINDOW.blit(self.texture, snack_rect) - def randomize(self) -> None: - self.pos = (randrange(ROWS), randrange(COLUMNS)) + def randomize(self) -> None: + self.pos = (randrange(ROWS), randrange(COLUMNS)) class Button(): - def __init__(self, position, text, font_size, base_color, hover_color) -> None: - self.pos = position - self.font = set_font(font_size) - self.base_color = base_color - self.hover_color = hover_color - self.text = text - self.text_rect = self.font.render(self.text, 1, self.base_color).get_rect(center=(self.pos)) + def __init__(self, position, text, font_size, base_color, hover_color) -> None: + self.pos = position + self.font = set_font(font_size) + self.base_color = base_color + self.hover_color = hover_color + self.text = text + self.text_rect = self.font.render( + self.text, 1, self.base_color).get_rect(center=(self.pos)) - def update(self) -> None: - WINDOW.blit(self.text, self.text_rect) + def update(self) -> None: + WINDOW.blit(self.text, self.text_rect) - def check_input(self, mouse_pos) -> bool: - if mouse_pos[0] in range(self.text_rect.left, self.text_rect.right) and mouse_pos[1] in range(self.text_rect.top, self.text_rect.bottom): - return True - return False + def check_input(self, mouse_pos) -> bool: + if mouse_pos[0] in range(self.text_rect.left, self.text_rect.right) and mouse_pos[1] in range(self.text_rect.top, self.text_rect.bottom): + return True + return False - def change_color(self, mouse_pos) -> None: - if mouse_pos[0] in range(self.text_rect.left, - self.text_rect.right) and mouse_pos[1] in range(self.text_rect.top, self.text_rect.bottom): # on hover - self.text = self.font.render(self.text, 1, self.hover_color) - else: - self.text = self.font.render(self.text, 1, self.base_color) \ No newline at end of file + def change_color(self, mouse_pos) -> None: + if mouse_pos[0] in range(self.text_rect.left, + self.text_rect.right) and mouse_pos[1] in range(self.text_rect.top, self.text_rect.bottom): # on hover + self.text = self.font.render(self.text, 1, self.hover_color) + else: + self.text = self.font.render(self.text, 1, self.base_color) diff --git a/pygame/snake/source/assets/scripts/menu.py b/pygame/snake/source/assets/scripts/menu.py index dd94603e..6a917cf6 100644 --- a/pygame/snake/source/assets/scripts/menu.py +++ b/pygame/snake/source/assets/scripts/menu.py @@ -11,178 +11,225 @@ color_index = [0, 1] def main_menu() -> None: - pygame.display.set_caption("Snake - Menu") - while True: - WINDOW.fill(BLACK) - mouse_pos = pygame.mouse.get_pos() - menu_text = set_font(100).render("SNAKE GAME", 1, WHITE) - menu_rect = menu_text.get_rect(center=(MID_WIDTH, 125)) - WINDOW.blit(menu_text, menu_rect) + pygame.display.set_caption("Snake - Menu") + while True: + WINDOW.fill(BLACK) + mouse_pos = pygame.mouse.get_pos() + menu_text = set_font(100).render("SNAKE GAME", 1, WHITE) + menu_rect = menu_text.get_rect(center=(MID_WIDTH, 125)) + WINDOW.blit(menu_text, menu_rect) - play_button = Button((MID_WIDTH, MID_HEIGHT - 50), "PLAY", 75, GRAY, WHITE) - options_button = Button((MID_WIDTH, MID_HEIGHT + 50), "OPTIONS", 75, GRAY, WHITE) - score_button = Button((MID_WIDTH, MID_HEIGHT + 150), "SCORE", 75, GRAY, WHITE) - quit_button = Button((MID_WIDTH, MID_HEIGHT + 250), "QUIT", 75, GRAY, WHITE) - buttons = [play_button, options_button, score_button, quit_button] + play_button = Button((MID_WIDTH, MID_HEIGHT - 50), + "PLAY", 75, GRAY, WHITE) + options_button = Button( + (MID_WIDTH, MID_HEIGHT + 50), "OPTIONS", 75, GRAY, WHITE) + score_button = Button((MID_WIDTH, MID_HEIGHT + 150), + "SCORE", 75, GRAY, WHITE) + quit_button = Button((MID_WIDTH, MID_HEIGHT + 250), + "QUIT", 75, GRAY, WHITE) + buttons = [play_button, options_button, score_button, quit_button] - on_hover(buttons) + on_hover(buttons) - for event in pygame.event.get(): - if event.type == pygame.QUIT: quit() - if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: - if play_button.check_input(mouse_pos): user_input(0) - if options_button.check_input(mouse_pos): options() - if score_button.check_input(mouse_pos): scoreboard() - if quit_button.check_input(mouse_pos): quit() + for event in pygame.event.get(): + if event.type == pygame.QUIT: + quit() + if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: + if play_button.check_input(mouse_pos): + user_input(0) + if options_button.check_input(mouse_pos): + options() + if score_button.check_input(mouse_pos): + scoreboard() + if quit_button.check_input(mouse_pos): + quit() - pygame.display.update() + pygame.display.update() def user_input(player: int) -> None: - from snake import main - global user_name - global color_index - pygame.display.set_caption("Snake") - select_active = True - outline_color = WHITE - name_rect_w = 140 - while True: - from globals import multiplayer - WINDOW.fill(BLACK) - mouse_pos = pygame.mouse.get_pos() - menu_text = set_font(100).render(f"PLAYER {player + 1}", 1, WHITE) - menu_rect = menu_text.get_rect(center=(MID_WIDTH, 125)) - WINDOW.blit(menu_text, menu_rect) + from snake import main + global user_name + global color_index + pygame.display.set_caption("Snake") + select_active = True + outline_color = WHITE + name_rect_w = 140 + while True: + from globals import multiplayer + WINDOW.fill(BLACK) + mouse_pos = pygame.mouse.get_pos() + menu_text = set_font(100).render(f"PLAYER {player + 1}", 1, WHITE) + menu_rect = menu_text.get_rect(center=(MID_WIDTH, 125)) + WINDOW.blit(menu_text, menu_rect) - back_button = Button((130, WINDOW_HEIGHT - 50), "BACK", 75, GRAY, WHITE) - if multiplayer and player == 0: - next_button = Button((WIDTH - 130, WINDOW_HEIGHT - 50), "NEXT", 75, GRAY, WHITE) - buttons = [back_button, next_button] - else: - play_button = Button((WIDTH - 130, WINDOW_HEIGHT - 50), "PLAY", 75, GRAY, WHITE) - buttons = [back_button, play_button] + back_button = Button((130, WINDOW_HEIGHT - 50), + "BACK", 75, GRAY, WHITE) + if multiplayer and player == 0: + next_button = Button( + (WIDTH - 130, WINDOW_HEIGHT - 50), "NEXT", 75, GRAY, WHITE) + buttons = [back_button, next_button] + else: + play_button = Button( + (WIDTH - 130, WINDOW_HEIGHT - 50), "PLAY", 75, GRAY, WHITE) + buttons = [back_button, play_button] - on_hover(buttons) + on_hover(buttons) - name_rect = pygame.Rect(MID_WIDTH - name_rect_w / 2, 200, name_rect_w, 32) - pygame.draw.rect(WINDOW, outline_color, name_rect, 2) - user_text = set_font(20).render(user_name[player], 1, WHITE) - WINDOW.blit(user_text, (name_rect.x + 5, name_rect.y + 5)) - name_rect_w = max(140, user_text.get_width() + 10) + name_rect = pygame.Rect( + MID_WIDTH - name_rect_w / 2, 200, name_rect_w, 32) + pygame.draw.rect(WINDOW, outline_color, name_rect, 2) + user_text = set_font(20).render(user_name[player], 1, WHITE) + WINDOW.blit(user_text, (name_rect.x + 5, name_rect.y + 5)) + name_rect_w = max(140, user_text.get_width() + 10) - color = COLORS[color_index[player]] - color_rect = pygame.Rect(MID_WIDTH - 50, 350, 100, 100) - pygame.draw.rect(WINDOW, color, color_rect) + color = COLORS[color_index[player]] + color_rect = pygame.Rect(MID_WIDTH - 50, 350, 100, 100) + pygame.draw.rect(WINDOW, color, color_rect) - if select_active: outline_color = WHITE - else: outline_color = DARK_GRAY + if select_active: + outline_color = WHITE + else: + outline_color = DARK_GRAY - for event in pygame.event.get(): - if event.type == pygame.QUIT: quit() + for event in pygame.event.get(): + if event.type == pygame.QUIT: + quit() - if event.type == pygame.MOUSEBUTTONDOWN: - if event.button == 1: - if name_rect.collidepoint(event.pos): select_active = True - else: select_active = False + if event.type == pygame.MOUSEBUTTONDOWN: + if event.button == 1: + if name_rect.collidepoint(event.pos): + select_active = True + else: + select_active = False - if back_button.check_input(mouse_pos): main_menu() - if multiplayer and player == 0: - if next_button.check_input(mouse_pos): user_input(1) - else: - if play_button.check_input(mouse_pos): main() - if color_rect.collidepoint(event.pos): - color_index[player] += 1 - if color_index[player] == len(COLORS) - 1: - color_index[player] = 0 + if back_button.check_input(mouse_pos): + main_menu() + if multiplayer and player == 0: + if next_button.check_input(mouse_pos): + user_input(1) + else: + if play_button.check_input(mouse_pos): + main() + if color_rect.collidepoint(event.pos): + color_index[player] += 1 + if color_index[player] == len(COLORS) - 1: + color_index[player] = 0 - if event.button == 3: # clear user name on mouse right click - if name_rect.collidepoint(event.pos): user_name[player] = "" + if event.button == 3: # clear user name on mouse right click + if name_rect.collidepoint(event.pos): + user_name[player] = "" - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_ESCAPE: main_menu() + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_ESCAPE: + main_menu() - if select_active: - if event.key == pygame.K_BACKSPACE: user_name[player] = user_name[player][:-1] - elif event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER: continue - else: user_name[player] += event.unicode + if select_active: + if event.key == pygame.K_BACKSPACE: + user_name[player] = user_name[player][:-1] + elif event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER: + continue + else: + user_name[player] += event.unicode - if event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER: - if multiplayer and player == 0: user_input(1) - else: main() + if event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER: + if multiplayer and player == 0: + user_input(1) + else: + main() - pygame.display.update() + pygame.display.update() def options() -> None: - pygame.display.set_caption("Snake - Options") - while True: - from globals import fps, multiplayer, walls - mouse_pos = pygame.mouse.get_pos() + pygame.display.set_caption("Snake - Options") + while True: + from globals import fps, multiplayer, walls + mouse_pos = pygame.mouse.get_pos() - WINDOW.fill(BLACK) - options_text = set_font(100).render("OPTIONS", 1, WHITE) - options_rect = options_text.get_rect(center=(MID_WIDTH, 125)) - WINDOW.blit(options_text, options_rect) + WINDOW.fill(BLACK) + options_text = set_font(100).render("OPTIONS", 1, WHITE) + options_rect = options_text.get_rect(center=(MID_WIDTH, 125)) + WINDOW.blit(options_text, options_rect) - # change state names - # multiplayer - if multiplayer: multiplayer_state = "on" - else: multiplayer_state = "off" - # walls - if walls: walls_state = "on" - else: walls_state = "off" + # change state names + # multiplayer + if multiplayer: + multiplayer_state = "on" + else: + multiplayer_state = "off" + # walls + if walls: + walls_state = "on" + else: + walls_state = "off" - speed_state = {5: "Slow", 10: "Normal", 15: "Fast"} + speed_state = {5: "Slow", 10: "Normal", 15: "Fast"} - speed_button = Button((MID_WIDTH, MID_HEIGHT - 100), f"SPEED - {speed_state[fps]}", 75, GRAY, WHITE) - multiplayer_button = Button((MID_WIDTH, MID_HEIGHT), f"MULTIPLAYER - {multiplayer_state}", 75, GRAY, WHITE) - walls_button = Button((MID_WIDTH, MID_HEIGHT + 100), f"WALLS - {walls_state}", 75, GRAY, WHITE) - back_button = Button((MID_WIDTH, MID_HEIGHT + 200), "BACK", 75, GRAY, WHITE) - buttons = [speed_button, multiplayer_button, walls_button, back_button] + speed_button = Button((MID_WIDTH, MID_HEIGHT - 100), + f"SPEED - {speed_state[fps]}", 75, GRAY, WHITE) + multiplayer_button = Button( + (MID_WIDTH, MID_HEIGHT), f"MULTIPLAYER - {multiplayer_state}", 75, GRAY, WHITE) + walls_button = Button((MID_WIDTH, MID_HEIGHT + 100), + f"WALLS - {walls_state}", 75, GRAY, WHITE) + back_button = Button((MID_WIDTH, MID_HEIGHT + 200), + "BACK", 75, GRAY, WHITE) + buttons = [speed_button, multiplayer_button, walls_button, back_button] - on_hover(buttons) + on_hover(buttons) - for event in pygame.event.get(): - if event.type == pygame.QUIT: quit() - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_ESCAPE: main_menu() - if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: - if speed_button.check_input(mouse_pos): change_speed() - if multiplayer_button.check_input(mouse_pos): switch_multiplayer() - if walls_button.check_input(mouse_pos): switch_walls() - if back_button.check_input(mouse_pos): main_menu() + for event in pygame.event.get(): + if event.type == pygame.QUIT: + quit() + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_ESCAPE: + main_menu() + if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: + if speed_button.check_input(mouse_pos): + change_speed() + if multiplayer_button.check_input(mouse_pos): + switch_multiplayer() + if walls_button.check_input(mouse_pos): + switch_walls() + if back_button.check_input(mouse_pos): + main_menu() - pygame.display.update() + pygame.display.update() def scoreboard() -> None: - while True: - mouse_pos = pygame.mouse.get_pos() - WINDOW.fill(BLACK) - top_text = set_font(100).render("TOP 10", 1, WHITE) - top_rect = top_text.get_rect(center=(MID_WIDTH, 55)) - WINDOW.blit(top_text, top_rect) - back_button = Button((MID_WIDTH, MID_HEIGHT + 250), "BACK", 75, GRAY, WHITE) - on_hover([back_button]) + while True: + mouse_pos = pygame.mouse.get_pos() + WINDOW.fill(BLACK) + top_text = set_font(100).render("TOP 10", 1, WHITE) + top_rect = top_text.get_rect(center=(MID_WIDTH, 55)) + WINDOW.blit(top_text, top_rect) + back_button = Button((MID_WIDTH, MID_HEIGHT + 250), + "BACK", 75, GRAY, WHITE) + on_hover([back_button]) - for event in pygame.event.get(): - if event.type == pygame.QUIT: quit() - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_ESCAPE: main_menu() - if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: - if back_button.check_input(mouse_pos): main_menu() + for event in pygame.event.get(): + if event.type == pygame.QUIT: + quit() + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_ESCAPE: + main_menu() + if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: + if back_button.check_input(mouse_pos): + main_menu() - csv_file = read_score(BASE_PATH) - for i, line in enumerate(sort(csv_file, reverse=True)[:11]): - for j, text in enumerate(line): - score_text = set_font(30).render(text, 1, WHITE) - score_rect = score_text.get_rect(center=(MID_WIDTH - 150 + 300 * j, 150 + 30 * i)) - WINDOW.blit(score_text, score_rect) + csv_file = read_score(BASE_PATH) + for i, line in enumerate(sort(csv_file, reverse=True)[:11]): + for j, text in enumerate(line): + score_text = set_font(30).render(text, 1, WHITE) + score_rect = score_text.get_rect( + center=(MID_WIDTH - 150 + 300 * j, 150 + 30 * i)) + WINDOW.blit(score_text, score_rect) - pygame.display.update() + pygame.display.update() def on_hover(buttons: list) -> None: - for button in buttons: - button.change_color(pygame.mouse.get_pos()) - button.update() \ No newline at end of file + for button in buttons: + button.change_color(pygame.mouse.get_pos()) + button.update() diff --git a/pygame/snake/source/assets/scripts/score.py b/pygame/snake/source/assets/scripts/score.py index a338976d..143d026c 100644 --- a/pygame/snake/source/assets/scripts/score.py +++ b/pygame/snake/source/assets/scripts/score.py @@ -5,33 +5,34 @@ fields = ["Name", "Score"] def write_score(name: str, score: int, base_path: str) -> None: - create_header = False - path = join(base_path, "score.csv") - if not exists(path): - create_header = True - with open(path, 'a', encoding='UTF-8', newline='') as file: - write = csv.writer(file) - if create_header: - write.writerow(fields) - write.writerows([[name, score]]) + create_header = False + path = join(base_path, "score.csv") + if not exists(path): + create_header = True + with open(path, 'a', encoding='UTF-8', newline='') as file: + write = csv.writer(file) + if create_header: + write.writerow(fields) + write.writerows([[name, score]]) def read_score(path: str): - lines = [] - path = join(path, "score.csv") - try: - with open(path, 'r', encoding='UTF-8') as file: - for line in csv.reader(file): - lines.append(line) - return lines - except FileNotFoundError: - return [fields] + lines = [] + path = join(path, "score.csv") + try: + with open(path, 'r', encoding='UTF-8') as file: + for line in csv.reader(file): + lines.append(line) + return lines + except FileNotFoundError: + return [fields] def sort(data, reverse: bool): - if reverse == None: reverse = False - header = data[0] - data.remove(header) # remove header - data = sorted(data, key=lambda x: int(x[1]), reverse=reverse) # sort data - data.insert(0, header) # add header - return data \ No newline at end of file + if reverse == None: + reverse = False + header = data[0] + data.remove(header) # remove header + data = sorted(data, key=lambda x: int(x[1]), reverse=reverse) # sort data + data.insert(0, header) # add header + return data diff --git a/pygame/snake/source/globals.py b/pygame/snake/source/globals.py index 8f13751c..0905693f 100644 --- a/pygame/snake/source/globals.py +++ b/pygame/snake/source/globals.py @@ -1,5 +1,5 @@ -import pygame from os.path import join, abspath, dirname +import pygame CELL_SIZE = 30 ROWS, COLUMNS = 30, 20 @@ -11,9 +11,12 @@ pygame.font.init() BASE_PATH = abspath(dirname(__file__)) FONT = join(BASE_PATH, "fonts", "roboto.ttf") SPRITE_PATH = join(BASE_PATH, "assets", "sprites") -APPLE_TEXTURE = pygame.transform.scale(pygame.image.load(join(SPRITE_PATH, "golden_apple.png")), (CELL_SIZE, CELL_SIZE)) -POISON_TEXTURE = pygame.transform.scale(pygame.image.load(join(SPRITE_PATH, "poison.png")), (CELL_SIZE, CELL_SIZE)) -COBBLESTONE_TEXTURE = pygame.transform.scale(pygame.image.load(join(SPRITE_PATH, "cobblestone.jpeg")), (CELL_SIZE, CELL_SIZE)) +APPLE_TEXTURE = pygame.transform.scale(pygame.image.load( + join(SPRITE_PATH, "golden_apple.png")), (CELL_SIZE, CELL_SIZE)) +POISON_TEXTURE = pygame.transform.scale(pygame.image.load( + join(SPRITE_PATH, "poison.png")), (CELL_SIZE, CELL_SIZE)) +COBBLESTONE_TEXTURE = pygame.transform.scale(pygame.image.load( + join(SPRITE_PATH, "cobblestone.jpeg")), (CELL_SIZE, CELL_SIZE)) BLACK = (0, 0, 0) DARK_BLUE = (0, 0, 170) @@ -32,9 +35,12 @@ LIGHT_PURPLE = (255, 85, 255) YELLOW = (255, 255, 85) WHITE = (242, 242, 242) -COLORS = [DARK_BLUE, DARK_GREEN, DARK_AQUA, DARK_RED, DARK_PURPLE, GOLD, BLUE, GREEN, AQUA, RED, LIGHT_PURPLE, YELLOW] +COLORS = [DARK_BLUE, DARK_GREEN, DARK_AQUA, DARK_RED, DARK_PURPLE, + GOLD, BLUE, GREEN, AQUA, RED, LIGHT_PURPLE, YELLOW] + + +def set_font(size): return pygame.font.Font(FONT, size) # sets font size -set_font = lambda size: pygame.font.Font(FONT, size) # sets font size fps = 10 # speed multiplayer = False @@ -42,17 +48,20 @@ walls = False def change_speed() -> None: - global fps - if fps == 5: fps = 10 - elif fps == 10: fps = 15 - elif fps == 15: fps = 5 + global fps + if fps == 5: + fps = 10 + elif fps == 10: + fps = 15 + elif fps == 15: + fps = 5 def switch_multiplayer() -> None: - global multiplayer - multiplayer = not multiplayer + global multiplayer + multiplayer = not multiplayer def switch_walls() -> None: - global walls - walls = not walls + global walls + walls = not walls diff --git a/pygame/snake/source/snake.py b/pygame/snake/source/snake.py old mode 100755 new mode 100644 index 69bc84d8..0e63b2f3 --- a/pygame/snake/source/snake.py +++ b/pygame/snake/source/snake.py @@ -17,104 +17,109 @@ snakes = [] def draw_grid() -> None: - x, y = 0, 0 - for _ in range(ROWS): - x += CELL_SIZE - pygame.draw.line(WINDOW, WHITE, (x, 0), (x, HEIGHT)) - for _ in range(COLUMNS): - y += CELL_SIZE - pygame.draw.line(WINDOW, WHITE, (0, y), (WIDTH, y)) + x, y = 0, 0 + for _ in range(ROWS): + x += CELL_SIZE + pygame.draw.line(WINDOW, WHITE, (x, 0), (x, HEIGHT)) + for _ in range(COLUMNS): + y += CELL_SIZE + pygame.draw.line(WINDOW, WHITE, (0, y), (WIDTH, y)) def draw_score(snakes) -> None: - for index, snake in enumerate(snakes): - score_label = set_font(40).render(f"Score {len(snake.body) - 1}", 1, snake.color) - WINDOW.blit(score_label, (10 + (index * (WIDTH - score_label.get_width() - 20)), (WINDOW_HEIGHT - score_label.get_height()))) + for index, snake in enumerate(snakes): + score_label = set_font(40).render( + f"Score {len(snake.body) - 1}", 1, snake.color) + WINDOW.blit(score_label, (10 + (index * (WIDTH - score_label.get_width() - 20)), + (WINDOW_HEIGHT - score_label.get_height()))) def collision_check(snakes, snack) -> None: - for snake in snakes: - for block in snake.body: - if block.pos == snack.pos: - snack.randomize() + for snake in snakes: + for block in snake.body: + if block.pos == snack.pos: + snack.randomize() def end_screen() -> None: - for snake in snakes: - if len(snake.body) > 1: - write_score(snake.name, len(snake.body) - 1, BASE_PATH) - main_menu() + for snake in snakes: + if len(snake.body) > 1: + write_score(snake.name, len(snake.body) - 1, BASE_PATH) + main_menu() def main() -> None: - snakes.clear() - from globals import fps, multiplayer, walls - pygame.display.set_caption("Snake") + snakes.clear() + from globals import fps, multiplayer, walls + pygame.display.set_caption("Snake") - clock = pygame.time.Clock() - from assets.scripts.menu import user_name, color_index - snake_one = Snake((randint(0, ROWS - 1), randint(0, COLUMNS - 1)), COLORS[color_index[0]], user_name[0], 1, multiplayer) - snakes.append(snake_one) + clock = pygame.time.Clock() + from assets.scripts.menu import user_name, color_index + snake_one = Snake((randint(0, ROWS - 1), randint(0, COLUMNS - 1)), + COLORS[color_index[0]], user_name[0], 1, multiplayer) + snakes.append(snake_one) - if multiplayer: - snake_two = Snake((randint(0, ROWS - 1), randint(0, COLUMNS - 1)), COLORS[color_index[1]], user_name[1], 2, multiplayer) - snakes.append(snake_two) - apple = Snack(APPLE_TEXTURE) - collision_check(snakes, apple) - poison = Snack(POISON_TEXTURE) - collision_check(snakes, poison) + if multiplayer: + snake_two = Snake((randint(0, ROWS - 1), randint(0, COLUMNS - 1)), + COLORS[color_index[1]], user_name[1], 2, multiplayer) + snakes.append(snake_two) + apple = Snack(APPLE_TEXTURE) + collision_check(snakes, apple) + poison = Snack(POISON_TEXTURE) + collision_check(snakes, poison) - def redraw_window() -> None: - WINDOW.fill(BLACK) - draw_grid() - draw_score(snakes) - for snake in snakes: - snake.draw() - apple.draw_snack() - poison.draw_snack() - if walls: - for i in range(ROWS): - COBBLE_RECT = pygame.Rect(i * CELL_SIZE, HEIGHT, WIDTH, CELL_SIZE) - WINDOW.blit(COBBLESTONE_TEXTURE, COBBLE_RECT) - pygame.display.update() + def redraw_window() -> None: + WINDOW.fill(BLACK) + draw_grid() + draw_score(snakes) + for snake in snakes: + snake.draw() + apple.draw_snack() + poison.draw_snack() + if walls: + for i in range(ROWS): + COBBLE_RECT = pygame.Rect( + i * CELL_SIZE, HEIGHT, WIDTH, CELL_SIZE) + WINDOW.blit(COBBLESTONE_TEXTURE, COBBLE_RECT) + pygame.display.update() - while True: - clock.tick(fps) - pygame.time.delay(0) + while True: + clock.tick(fps) + pygame.time.delay(0) - for event in pygame.event.get(): - if event.type == pygame.QUIT: - quit() - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_ESCAPE: - end_screen() + for event in pygame.event.get(): + if event.type == pygame.QUIT: + quit() + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_ESCAPE: + end_screen() - for snake in snakes: - snake.move() - if snake.body[0].pos == apple.pos: - snake.add_cube() - apple = Snack(APPLE_TEXTURE) - collision_check(snakes, apple) + for snake in snakes: + snake.move() + if snake.body[0].pos == apple.pos: + snake.add_cube() + apple = Snack(APPLE_TEXTURE) + collision_check(snakes, apple) - if snake.body[0].pos == poison.pos: - if len(snake.body) > 1: - snake.remove_cube() - poison = Snack(POISON_TEXTURE) - collision_check(snakes, poison) + if snake.body[0].pos == poison.pos: + if len(snake.body) > 1: + snake.remove_cube() + poison = Snack(POISON_TEXTURE) + collision_check(snakes, poison) - for i in range(len(snake.body)): - if snake.body[i].pos in list(map(lambda z: z.pos, snake.body[i + 1:])): - end_screen() - if multiplayer: - for i in snakes[0].body: - if i.pos == snakes[1].head.pos: - end_screen() - for i in snakes[1].body: - if i.pos == snakes[0].head.pos: - end_screen() + for i in range(len(snake.body)): + if snake.body[i].pos in list(map(lambda z: z.pos, snake.body[i + 1:])): + end_screen() + if multiplayer: + for i in snakes[0].body: + if i.pos == snakes[1].head.pos: + end_screen() + for i in snakes[1].body: + if i.pos == snakes[0].head.pos: + end_screen() - redraw_window() + redraw_window() if __name__ == '__main__': - main_menu() \ No newline at end of file + main_menu() diff --git a/pygame/space_invaders/source/space_invaders.py b/pygame/space_invaders/source/space_invaders.py index 111dcc96..d7411831 100644 --- a/pygame/space_invaders/source/space_invaders.py +++ b/pygame/space_invaders/source/space_invaders.py @@ -20,17 +20,23 @@ FONT = join(BASE_PATH, "fonts", "space_invaders.ttf") # load sprites SPACESHIP = pygame.image.load(join(SPRITE_PATH, "playership.png")) # player -PLAYER_MISSILE = pygame.image.load(join(SPRITE_PATH, "missiles", "playermissile.png")) # player missile +PLAYER_MISSILE = pygame.image.load( + join(SPRITE_PATH, "missiles", "playermissile.png")) # player missile # enemies -ENEMY_1 = pygame.transform.scale(pygame.image.load(join(ENEMY_PATH, "enemy_magenta.png")), (40, 35)) -ENEMY_2 = pygame.transform.scale(pygame.image.load(join(ENEMY_PATH, "enemy_cyan.png")), (40, 35)) -ENEMY_3 = pygame.transform.scale(pygame.image.load(join(ENEMY_PATH, "enemy_lime.png")), (40, 35)) -ENEMY_MISSILE = pygame.image.load(join(SPRITE_PATH, "missiles", "enemymissile.png")) # enemy missile +ENEMY_1 = pygame.transform.scale(pygame.image.load( + join(ENEMY_PATH, "enemy_magenta.png")), (40, 35)) +ENEMY_2 = pygame.transform.scale(pygame.image.load( + join(ENEMY_PATH, "enemy_cyan.png")), (40, 35)) +ENEMY_3 = pygame.transform.scale(pygame.image.load( + join(ENEMY_PATH, "enemy_lime.png")), (40, 35)) +ENEMY_MISSILE = pygame.image.load( + join(SPRITE_PATH, "missiles", "enemymissile.png")) # enemy missile pygame.display.set_icon(ENEMY_3) # background -BACKGROUND = pygame.transform.scale(pygame.image.load(join(BASE_PATH, "assets", "background.jpg")), (WIDTH, HEIGHT)) +BACKGROUND = pygame.transform.scale(pygame.image.load( + join(BASE_PATH, "assets", "background.jpg")), (WIDTH, HEIGHT)) # colors (R, G, B) BLUE = (16, 16, 69) @@ -40,259 +46,267 @@ RED = (188, 2, 5) class Missile: - def __init__(self, x: int, y: int, img) -> None: - self.x = x - self.y = y - self.img = img - self.mask = pygame.mask.from_surface(self.img) + def __init__(self, x: int, y: int, img) -> None: + self.x = x + self.y = y + self.img = img + self.mask = pygame.mask.from_surface(self.img) - def draw(self, window) -> None: - window.blit(self.img, (self.x, self.y)) + def draw(self, window) -> None: + window.blit(self.img, (self.x, self.y)) - def move(self, vel: int) -> None: - self.y += vel + def move(self, vel: int) -> None: + self.y += vel - def off_screen(self, height: int) -> bool: - return not (self.y <= height and self.y >= 0) + def off_screen(self, height: int) -> bool: + return not (self.y <= height and self.y >= 0) - def collision(self, obj) -> bool: - return collide(self, obj) + def collision(self, obj) -> bool: + return collide(self, obj) class Ship: - COOLDOWN = 30 # cooldown before shooting next missile + COOLDOWN = 30 # cooldown before shooting next missile - def __init__(self, x: int, y: int, lives: int = 3) -> None: - self.x = x - self.y = y - self.lives = lives - self.ship_img = None - self.missile_img = None - self.missiles = [] - self.cooldown_counter = 0 + def __init__(self, x: int, y: int, lives: int = 3) -> None: + self.x = x + self.y = y + self.lives = lives + self.ship_img = None + self.missile_img = None + self.missiles = [] + self.cooldown_counter = 0 - def draw(self, window) -> None: - window.blit(self.ship_img, (self.x, self.y)) - for missile in self.missiles: - missile.draw(WINDOW) + def draw(self, window) -> None: + window.blit(self.ship_img, (self.x, self.y)) + for missile in self.missiles: + missile.draw(WINDOW) - def move_missiles(self, vel: int, obj) -> None: - self.cooldown() - for missile in self.missiles: - missile.move(vel) - if missile.off_screen(HEIGHT): - self.missiles.remove(missile) - elif missile.collision(obj): - obj.lives -= 1 - self.missiles.remove(missile) + def move_missiles(self, vel: int, obj) -> None: + self.cooldown() + for missile in self.missiles: + missile.move(vel) + if missile.off_screen(HEIGHT): + self.missiles.remove(missile) + elif missile.collision(obj): + obj.lives -= 1 + self.missiles.remove(missile) - def cooldown(self) -> None: - if self.cooldown_counter >= self.COOLDOWN: - self.cooldown_counter = 0 - elif self.cooldown_counter > 0: - self.cooldown_counter += 1 + def cooldown(self) -> None: + if self.cooldown_counter >= self.COOLDOWN: + self.cooldown_counter = 0 + elif self.cooldown_counter > 0: + self.cooldown_counter += 1 - def shoot(self) -> None: - if self.cooldown_counter == 0: - missile = Missile(self.x + self.get_width() / 2 - 5 / 2, self.y, self.missile_img) # missile spawn with offset - self.missiles.append(missile) - self.cooldown_counter = 1 + def shoot(self) -> None: + if self.cooldown_counter == 0: + missile = Missile(self.x + self.get_width() / 2 - 5 / 2, + self.y, self.missile_img) # missile spawn with offset + self.missiles.append(missile) + self.cooldown_counter = 1 - def get_width(self) -> int: - return self.ship_img.get_width() + def get_width(self) -> int: + return self.ship_img.get_width() - def get_height(self) -> int: - return self.ship_img.get_height() + def get_height(self) -> int: + return self.ship_img.get_height() class Player(Ship): - def __init__(self, x: int, y: int, lives: int = 3) -> None: - super().__init__(x, y, lives) - self.ship_img = SPACESHIP - self.missile_img = PLAYER_MISSILE - self.mask = pygame.mask.from_surface(self.ship_img) - self.max_lives = lives - self.score = 0 + def __init__(self, x: int, y: int, lives: int = 3) -> None: + super().__init__(x, y, lives) + self.ship_img = SPACESHIP + self.missile_img = PLAYER_MISSILE + self.mask = pygame.mask.from_surface(self.ship_img) + self.max_lives = lives + self.score = 0 - def move_missiles(self, vel: int, objs: list) -> None: - self.cooldown() - for missile in self.missiles: - missile.move(vel) - if missile.off_screen(HEIGHT): - self.missiles.remove(missile) - self.score -= 10 - else: - for obj in objs: - if missile.collision(obj): - objs.remove(obj) + def move_missiles(self, vel: int, objs: list) -> None: + self.cooldown() + for missile in self.missiles: + missile.move(vel) + if missile.off_screen(HEIGHT): + self.missiles.remove(missile) + self.score -= 10 + else: + for obj in objs: + if missile.collision(obj): + objs.remove(obj) - # different scores for different colored enemies - if obj.color == "lime": - self.score += 10 - elif obj.color == "cyan": - self.score += 20 - elif obj.color == "magenta": - self.score += 30 - if missile in self.missiles: - self.missiles.remove(missile) + # different scores for different colored enemies + if obj.color == "lime": + self.score += 10 + elif obj.color == "cyan": + self.score += 20 + elif obj.color == "magenta": + self.score += 30 + if missile in self.missiles: + self.missiles.remove(missile) class Enemy(Ship): - COLOR_MAP = { - "magenta": ENEMY_1, - "cyan": ENEMY_2, - "lime": ENEMY_3, - } + COLOR_MAP = { + "magenta": ENEMY_1, + "cyan": ENEMY_2, + "lime": ENEMY_3, + } - def __init__(self, x: int, y: int, color: str) -> None: - super().__init__(x, y) - self.missile_img = ENEMY_MISSILE - self.ship_img = self.COLOR_MAP[color] - self.mask = pygame.mask.from_surface(self.ship_img) - self.color = color + def __init__(self, x: int, y: int, color: str) -> None: + super().__init__(x, y) + self.missile_img = ENEMY_MISSILE + self.ship_img = self.COLOR_MAP[color] + self.mask = pygame.mask.from_surface(self.ship_img) + self.color = color - def move(self, vel_x: int, vel_y: int = 0) -> None: - self.x += vel_x - self.y += vel_y + def move(self, vel_x: int, vel_y: int = 0) -> None: + self.x += vel_x + self.y += vel_y def main() -> None: - FPS = 60 - run = True - lost = False - lost_count = 0 - level = 0 + FPS = 60 + run = True + lost = False + lost_count = 0 + level = 0 - enemies = [] - player_vel = 7 - player_missile_vel = 15 - enemy_x_vel = 2 - enemy_y_vel = 2 - vel_x = enemy_x_vel - enemy_missile_vel = 6 - last_enemy_shot = 0 + enemies = [] + player_vel = 7 + player_missile_vel = 15 + enemy_x_vel = 2 + enemy_y_vel = 2 + vel_x = enemy_x_vel + enemy_missile_vel = 6 + last_enemy_shot = 0 - player = Player(WIDTH / 2, 650) + player = Player(WIDTH / 2, 650) - clock = pygame.time.Clock() + clock = pygame.time.Clock() - def redraw_window() -> None: - WINDOW.blit(BACKGROUND, (0, 0)) - # draw text - lives_label = set_font(40).render(f"Lives: {player.lives}", 1, WHITE) - score_label = set_font(40).render(f"Score {player.score}", 1, WHITE) - level_label = set_font(40).render(f"Level: {level}", 1, WHITE) - WINDOW.blit(lives_label, (10, 10)) - WINDOW.blit(score_label, (10, lives_label.get_height() + 10)) - WINDOW.blit(level_label, (WIDTH - level_label.get_width() - 10, 10)) + def redraw_window() -> None: + WINDOW.blit(BACKGROUND, (0, 0)) + # draw text + lives_label = set_font(40).render(f"Lives: {player.lives}", 1, WHITE) + score_label = set_font(40).render(f"Score {player.score}", 1, WHITE) + level_label = set_font(40).render(f"Level: {level}", 1, WHITE) + WINDOW.blit(lives_label, (10, 10)) + WINDOW.blit(score_label, (10, lives_label.get_height() + 10)) + WINDOW.blit(level_label, (WIDTH - level_label.get_width() - 10, 10)) - for enemy in enemies: - enemy.draw(WINDOW) + for enemy in enemies: + enemy.draw(WINDOW) - player.draw(WINDOW) + player.draw(WINDOW) - if lost: - lost_label = set_font(60).render("You lost!", 1, RED) - WINDOW.blit(lost_label, (WIDTH / 2 - lost_label.get_width() / 2, 350)) + if lost: + lost_label = set_font(60).render("You lost!", 1, RED) + WINDOW.blit(lost_label, (WIDTH / 2 - + lost_label.get_width() / 2, 350)) - pygame.display.update() + pygame.display.update() - while run: - clock.tick(FPS) - redraw_window() + while run: + clock.tick(FPS) + redraw_window() - if player.lives <= 0: - lost = True - lost_count += 1 + if player.lives <= 0: + lost = True + lost_count += 1 - # stop game - if lost: - if lost_count > FPS * 3: # wait for 3 sec - run = False - else: - continue + # stop game + if lost: + if lost_count > FPS * 3: # wait for 3 sec + run = False + else: + continue - # spawn enemies - if len(enemies) == 0: - level += 1 - margin = 75 - for x in range(margin, WIDTH - margin, margin): - for y in range(margin, int(HEIGHT / 2), margin): - if y == margin: # top row - color = "magenta" - elif y == 2 * margin: # rows 2-3 - color = "cyan" - elif y == 4 * margin: # rows 4-5 - color = "lime" - enemy = Enemy(x, y, color) - enemies.append(enemy) + # spawn enemies + if len(enemies) == 0: + level += 1 + margin = 75 + for x in range(margin, WIDTH - margin, margin): + for y in range(margin, int(HEIGHT / 2), margin): + if y == margin: # top row + color = "magenta" + elif y == 2 * margin: # rows 2-3 + color = "cyan" + elif y == 4 * margin: # rows 4-5 + color = "lime" + enemy = Enemy(x, y, color) + enemies.append(enemy) - for event in pygame.event.get(): - # quit game - if event.type == pygame.QUIT: - quit() + for event in pygame.event.get(): + # quit game + if event.type == pygame.QUIT: + quit() - keys = pygame.key.get_pressed() + keys = pygame.key.get_pressed() - # move left - if (keys[pygame.K_a] or keys[pygame.K_LEFT]) and (player.x - player_vel > 0): - player.x -= player_vel - # move right - if (keys[pygame.K_d] or keys[pygame.K_RIGHT]) and (player.x + player_vel + player.get_width() < WIDTH): - player.x += player_vel - # shoot - if keys[pygame.K_SPACE]: - player.shoot() + # move left + if (keys[pygame.K_a] or keys[pygame.K_LEFT]) and (player.x - player_vel > 0): + player.x -= player_vel + # move right + if (keys[pygame.K_d] or keys[pygame.K_RIGHT]) and (player.x + player_vel + player.get_width() < WIDTH): + player.x += player_vel + # shoot + if keys[pygame.K_SPACE]: + player.shoot() - # enemies action - for enemy in enemies[:]: - if enemy.x >= WIDTH - enemy.get_width(): - move(0, enemy_y_vel, enemies) - vel_x = -enemy_x_vel + # enemies action + for enemy in enemies[:]: + if enemy.x >= WIDTH - enemy.get_width(): + move(0, enemy_y_vel, enemies) + vel_x = -enemy_x_vel - elif enemy.x <= 0: - move(0, enemy_y_vel, enemies) - vel_x = enemy_x_vel + elif enemy.x <= 0: + move(0, enemy_y_vel, enemies) + vel_x = enemy_x_vel - enemy.move_missiles(enemy_missile_vel, player) + enemy.move_missiles(enemy_missile_vel, player) - if collide(enemy, player) or (enemy.y + enemy.get_height() > HEIGHT): - player.score -= 10 - player.lives -= 1 - enemies.remove(enemy) + if collide(enemy, player) or (enemy.y + enemy.get_height() > HEIGHT): + player.score -= 10 + player.lives -= 1 + enemies.remove(enemy) - move(vel_x, 0, enemies) + move(vel_x, 0, enemies) - if pygame.time.get_ticks() - last_enemy_shot > 2000: - choice(enemies).shoot() - last_enemy_shot = pygame.time.get_ticks() + if pygame.time.get_ticks() - last_enemy_shot > 2000: + choice(enemies).shoot() + last_enemy_shot = pygame.time.get_ticks() - player.move_missiles(-player_missile_vel, enemies) + player.move_missiles(-player_missile_vel, enemies) # lambda functions -set_font = lambda size, font=FONT: pygame.font.Font(font, size) # sets font size -collide = lambda obj1, obj2: obj1.mask.overlap(obj2.mask, (obj2.x - obj1.x, obj2.y - obj1.y)) != None # checks if 2 objs collide/overlap +def set_font(size, font=FONT): return pygame.font.Font( + font, size) # sets font size + + +def collide(obj1, obj2): return obj1.mask.overlap(obj2.mask, (obj2.x - + obj1.x, obj2.y - obj1.y)) != None # checks if 2 objs collide/overlap def move(vel_x: int, vel_y: int, enemies: list) -> None: - for enemy in enemies: - enemy.move(vel_x, vel_y) + for enemy in enemies: + enemy.move(vel_x, vel_y) def main_menu() -> None: - while True: - WINDOW.blit(BACKGROUND, (0, 0)) - title_label = set_font(50).render("Press any key to start...", 1, WHITE) - WINDOW.blit(title_label, (WIDTH / 2 - title_label.get_width() / 2, HEIGHT / 2 - title_label.get_height() / 2)) - pygame.display.update() - for event in pygame.event.get(): - if event.type == pygame.QUIT: - quit() - if event.type == pygame.KEYDOWN: - main() + while True: + WINDOW.blit(BACKGROUND, (0, 0)) + title_label = set_font(50).render( + "Press any key to start...", 1, WHITE) + WINDOW.blit(title_label, (WIDTH / 2 - title_label.get_width() / + 2, HEIGHT / 2 - title_label.get_height() / 2)) + pygame.display.update() + for event in pygame.event.get(): + if event.type == pygame.QUIT: + quit() + if event.type == pygame.KEYDOWN: + main() if __name__ == "__main__": - main_menu() \ No newline at end of file + main_menu() diff --git a/requirements.txt b/requirements.txt index 79c355c6..5bf1e899 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,29 +1,29 @@ -beautifulsoup4==4.10.0 +beautifulsoup4==4.11.1 bs4==0.0.1 -certifi==2021.10.8 -charset-normalizer==2.0.12 -click==8.1.2 +certifi==2022.6.15 +charset-normalizer==2.1.0 +click==8.1.3 cycler==0.11.0 defusedxml==0.7.1 et-xmlfile==1.1.0 -fonttools==4.31.2 -fpdf2==2.5.1 +fonttools==4.34.4 +fpdf2==2.5.5 idna==3.3 -kiwisolver==1.4.2 -matplotlib==3.5.1 -numpy==1.22.3 -openpyxl==3.0.9 +kiwisolver==1.4.4 +matplotlib==3.5.2 +numpy==1.23.1 +openpyxl==3.0.10 packaging==21.3 -pandas==1.4.2 -Pillow==9.1.0 -pyparsing==3.0.7 +pandas==1.4.3 +Pillow==9.2.0 +pyparsing==3.0.9 python-dateutil==2.8.2 pytz==2022.1 -requests==2.27.1 -scipy==1.8.0 +requests==2.28.1 +scipy==1.9.0 seaborn==0.11.2 six==1.16.0 -soupsieve==2.3.1 -urllib3==1.26.9 +soupsieve==2.3.2.post1 +urllib3==1.26.11 word2number==1.1 yapf==0.32.0 diff --git a/september/task_150921/kcagulis_150921.py b/september/task_150921/kcagulis_150921.py index 03a4b07a..00992fea 100644 --- a/september/task_150921/kcagulis_150921.py +++ b/september/task_150921/kcagulis_150921.py @@ -4,76 +4,85 @@ # task 1 - train def trains(): - # blue train from Jelgava to Riga - blue_train_speed = 57 - blue_train_time_driven = 10 / 60 + # blue train from Jelgava to Riga + blue_train_speed = 57 + blue_train_time_driven = 10 / 60 - # green train form Riga to Jelgava - green_train_speed = 60 + # green train form Riga to Jelgava + green_train_speed = 60 - # red train from Valka to Jelgava - red_train_speed = 60 - red_train_time_driven = 4 + # red train from Valka to Jelgava + red_train_speed = 60 + red_train_time_driven = 4 - # distances - distance_riga_jelgava = 42 # from Riga to Jelgava (blue and green train) - distance_riga_valka = 164 # from Riga to Valka (red train) + # distances + distance_riga_jelgava = 42 # from Riga to Jelgava (blue and green train) + distance_riga_valka = 164 # from Riga to Valka (red train) - def blue_green_train(): - blue_train_already_driven_distance = blue_train_speed * blue_train_time_driven # blue train driven distance in 10 min - meeting_time = (distance_riga_jelgava - blue_train_already_driven_distance) / (blue_train_speed + green_train_speed) # time after which the two trains meet - green_train_distance = meeting_time * green_train_speed # distance green train has driven - meeting_distance = distance_riga_jelgava - green_train_distance # distance from meeting point to Riga + def blue_green_train(): + blue_train_already_driven_distance = blue_train_speed * \ + blue_train_time_driven # blue train driven distance in 10 min + meeting_time = (distance_riga_jelgava - blue_train_already_driven_distance) / ( + blue_train_speed + green_train_speed) # time after which the two trains meet + green_train_distance = meeting_time * \ + green_train_speed # distance green train has driven + meeting_distance = distance_riga_jelgava - \ + green_train_distance # distance from meeting point to Riga - return f"Zilais un zaļais vilciens tiksies {round(meeting_distance, 2)}km no Rīgas." + return f"Zilais un zaļais vilciens tiksies {round(meeting_distance, 2)}km no Rīgas." - def red_train(): - red_train_distance_driven = red_train_time_driven * red_train_speed # red train driven distance in given time - print(f"Sarkanais vilciens ir nobraucis {round(red_train_distance_driven, 2)}km.") - if red_train_distance_driven > distance_riga_valka: - return "Sarkanais vilciens ir pabraucis garām Rīgai." + def red_train(): + red_train_distance_driven = red_train_time_driven * \ + red_train_speed # red train driven distance in given time + print( + f"Sarkanais vilciens ir nobraucis {round(red_train_distance_driven, 2)}km.") + if red_train_distance_driven > distance_riga_valka: + return "Sarkanais vilciens ir pabraucis garām Rīgai." - print(blue_green_train()) - print(red_train()) + print(blue_green_train()) + print(red_train()) # task 2 - sheep def farm(): - sheep_amount = 255 # amount of sheep in farm - sheep_price = 20.5 # price per sheep's wool - wool_total_price = sheep_amount * sheep_price # price for all sheep wool + sheep_amount = 255 # amount of sheep in farm + sheep_price = 20.5 # price per sheep's wool + wool_total_price = sheep_amount * sheep_price # price for all sheep wool - additional_sheep = 120 # additional sheep - new_sheep_amount = sheep_amount + additional_sheep # sum of original and added sheep - new_wool_total_price = new_sheep_amount * wool_total_price # price for original and added sheep wool + additional_sheep = 120 # additional sheep + # sum of original and added sheep + new_sheep_amount = sheep_amount + additional_sheep + # price for original and added sheep wool + new_wool_total_price = new_sheep_amount * wool_total_price - ostrich_amount = 15 # amount of ostrich in farm - ostrich_egg_price = 30 # price per egg - ostrich_time = 2 # time required to get one ostrich egg - days = 30 # the time when ostriches lay eggs - ostrich_egg_total_price = ostrich_amount * ostrich_egg_price * days / ostrich_time # price for all ostrich eggs in 30 days + ostrich_amount = 15 # amount of ostrich in farm + ostrich_egg_price = 30 # price per egg + ostrich_time = 2 # time required to get one ostrich egg + days = 30 # the time when ostriches lay eggs + ostrich_egg_total_price = ostrich_amount * ostrich_egg_price * \ + days / ostrich_time # price for all ostrich eggs in 30 days - if wool_total_price >= ostrich_egg_total_price: - return "Iegūtās naudas pietiks, lai nopirktu visas mēneša olas." - else: - print("Iegūtās naudas nepietiks, lai nopirktu visas mēneša olas.") - if new_wool_total_price >= ostrich_egg_total_price: - return f"Ja aitu būtu par {additional_sheep}, tad iegūtās naudas pietiktu, lai nopirktu visas mēneša olas." - else: - return f"Ja aitu būtu par {additional_sheep}, tad iegūtās naudas nepietiktu, lai nopirktu visas mēneša olas." + if wool_total_price >= ostrich_egg_total_price: + return "Iegūtās naudas pietiks, lai nopirktu visas mēneša olas." + else: + print("Iegūtās naudas nepietiks, lai nopirktu visas mēneša olas.") + if new_wool_total_price >= ostrich_egg_total_price: + return f"Ja aitu būtu par {additional_sheep}, tad iegūtās naudas pietiktu, lai nopirktu visas mēneša olas." + else: + return f"Ja aitu būtu par {additional_sheep}, tad iegūtās naudas nepietiktu, lai nopirktu visas mēneša olas." def main(): - task = int(input("""Ivēlieties uzdevumu: + task = int(input("""Ivēlieties uzdevumu: 1 - pirmais uzdevums 2 - otrais uzdevums """)) - if task == 1: - trains() - elif task == 2: - print(farm()) + if task == 1: + trains() + elif task == 2: + print(farm()) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/september/task_220921/kcagulis_220921.py b/september/task_220921/kcagulis_220921.py index 3b1d9846..67812df8 100644 --- a/september/task_220921/kcagulis_220921.py +++ b/september/task_220921/kcagulis_220921.py @@ -3,22 +3,24 @@ class SalaryBonus(): - def __init__(self): - self.percent = .15 # percent - self.salary = float(input("Mēneša algas apjoms: ")) # salary per month - self.time_worked = int(input("Nostrādātais gadu skaits: ")) # number of years worked + def __init__(self): + self.percent = .15 # percent + self.salary = float(input("Mēneša algas apjoms: ")) # salary per month + # number of years worked + self.time_worked = int(input("Nostrādātais gadu skaits: ")) - def _calculate_bonus(self): - if self.time_worked > 2: # if worked for more than 2 years - salary_bonus = self.percent * self.salary * (self.time_worked - 2) # calculates salary bonus - return f"Algas bonuss ir {round(salary_bonus, 2)}€" - else: - return "Algas bonuss nepienākas." + def _calculate_bonus(self): + if self.time_worked > 2: # if worked for more than 2 years + salary_bonus = self.percent * self.salary * \ + (self.time_worked - 2) # calculates salary bonus + return f"Algas bonuss ir {round(salary_bonus, 2)}€" + else: + return "Algas bonuss nepienākas." def main(): - print(SalaryBonus()._calculate_bonus()) + print(SalaryBonus()._calculate_bonus()) if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/september/task_290921/kcagulis_290921.py b/september/task_290921/kcagulis_290921.py index 40167a23..c2b46f54 100644 --- a/september/task_290921/kcagulis_290921.py +++ b/september/task_290921/kcagulis_290921.py @@ -4,36 +4,38 @@ # task 1 - prime numbers def is_prime(number): - import math - if number > 0: - if number == 1: - return "1 nav pirmsskaitlis" - else: - for i in range(2, int(math.sqrt(number)) + 1): # range from 2 to sqrt(n) - if number % i == 0: - return f"{number} nav pirmsskaitlis" - return f"{number} ir pirmsskaitlis" - else: - return "Skaitlim jābūt lielākam par 0" + import math + if number > 0: + if number == 1: + return "1 nav pirmsskaitlis" + else: + for i in range(2, int(math.sqrt(number)) + 1): # range from 2 to sqrt(n) + if number % i == 0: + return f"{number} nav pirmsskaitlis" + return f"{number} ir pirmsskaitlis" + else: + return "Skaitlim jābūt lielākam par 0" # task 2 - cities class Cities: - def __init__(self, p0, perc, delta, p): - self.p0 = p0 # initial population - self.perc = float(perc[:-1]) / 100 # annual percentage population growth - self.delta = delta # number of arrivals (departures) per year - self.p = p # population size required + def __init__(self, p0, perc, delta, p): + self.p0 = p0 # initial population + # annual percentage population growth + self.perc = float(perc[:-1]) / 100 + self.delta = delta # number of arrivals (departures) per year + self.p = p # population size required - def _calculate(self): - years = 0 - while (True): - self.p0 = self.p0 + self.p0 * self.perc + self.delta # calculate the new population in each year via the formula - years += 1 - if self.p0 >= self.p: # if the initial population reaches the required - return f"{self.p} iedzīvotāju skaits tiks sasniegts pēc {years} gadiem" - if self.p0 < 0: # if the required population is unreachable - return -1 + def _calculate(self): + years = 0 + while (True): + # calculate the new population in each year via the formula + self.p0 = self.p0 + self.p0 * self.perc + self.delta + years += 1 + if self.p0 >= self.p: # if the initial population reaches the required + return f"{self.p} iedzīvotāju skaits tiks sasniegts pēc {years} gadiem" + if self.p0 < 0: # if the required population is unreachable + return -1 city_0 = Cities(1000, "2%", 50, 1200) @@ -43,33 +45,33 @@ city_3 = Cities(1_500_000, "2.5%", 10_000, 2_000_000) def main(): - task = int(input("""Ivēlieties uzdevumu: + task = int(input("""Ivēlieties uzdevumu: 1 - pirmais uzdevums 2 - otrais uzdevums """)) - if task == 1: - print(is_prime(int(input("Ievadiet skaitli: ")))) - elif task == 2: - city = int(input("""Izvēlieties pilsētu: + if task == 1: + print(is_prime(int(input("Ievadiet skaitli: ")))) + elif task == 2: + city = int(input("""Izvēlieties pilsētu: 0 - piemēra pilsēta 1 - pirmā pilsēta 2 - otrā pilsēta 3 - trešā pilsēta """)) - if city == 0: - print(city_0._calculate()) - elif city == 1: - print(city_1._calculate()) - elif city == 2: - print(city_2._calculate()) - elif city == 3: - print(city_3._calculate()) - else: - print("Ievadīts nepareizs skaitlis.") - else: - print("Ievadīts nepareizs skaitlis.") + if city == 0: + print(city_0._calculate()) + elif city == 1: + print(city_1._calculate()) + elif city == 2: + print(city_2._calculate()) + elif city == 3: + print(city_3._calculate()) + else: + print("Ievadīts nepareizs skaitlis.") + else: + print("Ievadīts nepareizs skaitlis.") if __name__ == '__main__': - main() \ No newline at end of file + main()