├── 20 ├── even_nums.py ├── grab_highest.py ├── average_calculator.py └── main.py ├── 21 ├── __pycache__ │ └── ascii_hangman.cpython-38.pyc ├── ascii_hangman.py └── main.py ├── 22 └── main.py ├── 10-19 ├── 10 │ ├── Database │ │ └── Authentication.db │ └── start.py ├── 11 │ └── start.py ├── 12 │ ├── current_wallpaper.txt │ └── start.py ├── 13 │ ├── current_wallpaper.txt │ ├── database │ │ └── saved.db │ └── start.py ├── 14 │ ├── database │ │ └── saved.db │ └── start.py ├── 15 │ ├── data │ │ └── student │ │ │ ├── student-merge.R │ │ │ ├── student.txt │ │ │ └── student-mat.csv │ └── main.py ├── 16 │ └── main.py ├── 17 │ └── main.py ├── 18 │ └── main.py └── 19 │ └── main.py ├── 1-9 ├── 1 │ └── Dice Rolling.py ├── 2 │ └── Number Guessing.py ├── 3 │ └── Fortune Teller.py ├── 4 │ └── Text Calculator.py ├── 5 │ └── SQLite3 Database Creation.py ├── 6 │ └── SQLite3 User Creation.py ├── 7 │ ├── users.db │ └── Login System.py ├── 8 │ ├── Checklist.db │ ├── Table Creation.py │ └── Checklist.py └── 9 │ └── TKinter Hello World.py └── README.md /10-19/12/current_wallpaper.txt: -------------------------------------------------------------------------------- 1 | Desktop_2020-02-15 11:36:19.179274.jpeg -------------------------------------------------------------------------------- /10-19/13/current_wallpaper.txt: -------------------------------------------------------------------------------- 1 | Desktop_2020-02-15 19:57:17.979478.jpeg -------------------------------------------------------------------------------- /1-9/7/users.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrSaintJCode/100-Days-of-Python/HEAD/1-9/7/users.db -------------------------------------------------------------------------------- /1-9/8/Checklist.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrSaintJCode/100-Days-of-Python/HEAD/1-9/8/Checklist.db -------------------------------------------------------------------------------- /10-19/13/database/saved.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrSaintJCode/100-Days-of-Python/HEAD/10-19/13/database/saved.db -------------------------------------------------------------------------------- /10-19/14/database/saved.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrSaintJCode/100-Days-of-Python/HEAD/10-19/14/database/saved.db -------------------------------------------------------------------------------- /10-19/10/Database/Authentication.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrSaintJCode/100-Days-of-Python/HEAD/10-19/10/Database/Authentication.db -------------------------------------------------------------------------------- /21/__pycache__/ascii_hangman.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MrSaintJCode/100-Days-of-Python/HEAD/21/__pycache__/ascii_hangman.cpython-38.pyc -------------------------------------------------------------------------------- /1-9/9/TKinter Hello World.py: -------------------------------------------------------------------------------- 1 | from tkinter import * 2 | 3 | root = Tk() 4 | 5 | # Creating a Label (Text) 6 | myLabel = Label(root, text="Hello World!") 7 | 8 | # Shoving it onto the screen 9 | myLabel.pack() 10 | 11 | # Event Loop 12 | root.mainloop() 13 | -------------------------------------------------------------------------------- /22/main.py: -------------------------------------------------------------------------------- 1 | def main(): 2 | print("Welcome to the Band Name Generator") 3 | user_city = input("What's the name of the city you grew up in?\n") 4 | user_pet = input("What's your pet's name?\n") 5 | print(f"Your band name could be {user_city} {user_pet}") 6 | 7 | if __name__ == '__main__': 8 | main() -------------------------------------------------------------------------------- /10-19/15/data/student/student-merge.R: -------------------------------------------------------------------------------- 1 | d1=read.table("student-mat.csv",sep=";",header=TRUE) 2 | d2=read.table("student-por.csv",sep=";",header=TRUE) 3 | 4 | d3=merge(d1,d2,by=c("school","sex","age","address","famsize","Pstatus","Medu","Fedu","Mjob","Fjob","reason","nursery","internet")) 5 | print(nrow(d3)) # 382 students 6 | -------------------------------------------------------------------------------- /20/even_nums.py: -------------------------------------------------------------------------------- 1 | # https://www.udemy.com/course/100-days-of-code/ 2 | # Day - 5 | 21/11/2020 3 | # By - Justin St-Laurent 4 | 5 | # Adding Even Numbers 6 | def add_evens(): 7 | total = 0 8 | for num in range(0, 101, 2): 9 | total += num 10 | return total 11 | W 12 | if __name__ == '__main__': 13 | print(add_evens()) -------------------------------------------------------------------------------- /1-9/8/Table Creation.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | dbName = "Checklist" 3 | tableContent = ["itemID", "item"] 4 | newTable = f""" 5 | CREATE TABLE IF NOT EXISTS Lists( 6 | {tableContent[0]} INTEGER PRIMARY KEY, 7 | {tableContent[1]} VARCHAR(20) NOT NULL 8 | ) 9 | """ 10 | database = sqlite3.connect(f"{dbName}.db") 11 | db = database.cursor() 12 | db.execute(newTable) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 100-Days-of-Python 2 | 3 | A new journey has begun. Coming from a beginner stand point as a Python developer. I've decided to challenge myself each day for an hour to code anything in python. It can be anything I want, as long as I take an hour a day to do it. Putting this in a habit will allow me to increasingly develop my skill in Python. Doing is the best method to learn! 4 | 5 | You can follow my progress here! Ideas and tips are welcomed! 6 | 7 | -------------------------------------------------------------------------------- /20/grab_highest.py: -------------------------------------------------------------------------------- 1 | # https://www.udemy.com/course/100-days-of-code/ 2 | # Day - 5 | 21/11/2020 3 | # By - Justin St-Laurent 4 | 5 | # High Score 6 | def grab_highest(arr): 7 | highest_number = 0 8 | for item in arr: 9 | if item > highest_number: 10 | highest_number = item 11 | return highest_number 12 | 13 | if __name__ == '__main__': 14 | student_scores = [78, 65, 89, 86, 55, 81, 91, 105] 15 | highest_number = grab_highest(student_scores) 16 | print(highest_number) -------------------------------------------------------------------------------- /20/average_calculator.py: -------------------------------------------------------------------------------- 1 | # https://www.udemy.com/course/100-days-of-code/ 2 | # Day - 5 | 21/11/2020 3 | # By - Justin St-Laurent 4 | 5 | # Average Height 6 | def calculate_average(arr): 7 | #total = sum(arr) 8 | total = 0 9 | for item in arr: 10 | total += item 11 | #print(total) 12 | 13 | #number_of_elements = len(arr) 14 | number_of_elements = 0 15 | for item in arr: 16 | number_of_elements += 1 17 | #print(number_of_elements) 18 | 19 | average = round(total / number_of_elements) 20 | return average 21 | 22 | if __name__ == '__main__': 23 | student_heights = [180, 124, 165, 173, 189, 169, 146] 24 | average = calculate_average(student_heights) 25 | print(average) -------------------------------------------------------------------------------- /21/ascii_hangman.py: -------------------------------------------------------------------------------- 1 | HANGMANPICS = [''' 2 | +---+ 3 | | 4 | | 5 | | 6 | | 7 | | 8 | =========''',''' 9 | +---+ 10 | | | 11 | | 12 | | 13 | | 14 | | 15 | =========''', ''' 16 | +---+ 17 | | | 18 | O | 19 | | 20 | | 21 | | 22 | =========''', ''' 23 | +---+ 24 | | | 25 | O | 26 | | | 27 | | 28 | | 29 | =========''', ''' 30 | +---+ 31 | | | 32 | O | 33 | /| | 34 | | 35 | | 36 | =========''', ''' 37 | +---+ 38 | | | 39 | O | 40 | /|\ | 41 | | 42 | | 43 | =========''', ''' 44 | +---+ 45 | | | 46 | O | 47 | /|\ | 48 | / | 49 | | 50 | =========''', ''' 51 | +---+ 52 | | | 53 | O | 54 | /|\ | 55 | / \ | 56 | | 57 | ========='''] -------------------------------------------------------------------------------- /10-19/17/main.py: -------------------------------------------------------------------------------- 1 | # https://www.udemy.com/course/100-days-of-code/ 2 | # Day - 2 | 21/11/2020 3 | # By - Justin St-Laurent 4 | 5 | # Tip Calculator 6 | def divide(total, num_guests): 7 | split_value = total / num_guests 8 | return split_value 9 | 10 | def tip(split_value, tip_input): 11 | percentage = tip_input / 100 12 | tip_total = split_value * percentage 13 | total = split_value + tip_total 14 | return total 15 | 16 | if __name__ == '__main__': 17 | total = float(input("Bill Total:")) 18 | num_guests = float(input("Number of Guests:")) 19 | split_value = divide(total, num_guests) 20 | tip_input = float(input(f"Your Total is {split_value}, what would you like to tip:")) 21 | total = tip(split_value, tip_input) 22 | print(f"Your Total is: {total:.2f}") 23 | -------------------------------------------------------------------------------- /1-9/6/SQLite3 User Creation.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | import os.path 3 | import time 4 | import sys 5 | 6 | dbName = "users" 7 | table = "user" 8 | 9 | with sqlite3.connect(f"{dbName}.db") as db: 10 | cursor = db.cursor() 11 | 12 | 13 | while True: 14 | try: 15 | print("") 16 | print("<---- New User ---->") 17 | first_name = input("First Name: ") 18 | last_name = input("Last Name: ") 19 | username = input("Username: ") 20 | password = input("Password: ") 21 | except KeyboardInterrupt: 22 | print("") 23 | print("[X] Closing...") 24 | sys.exit() 25 | 26 | 27 | 28 | 29 | cursor.execute(f""" 30 | INSERT INTO {table}(username,password,FirstName,LastName) 31 | VALUES("{username}","{password}","{first_name}","{last_name}") 32 | """) 33 | db.commit() 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /10-19/15/main.py: -------------------------------------------------------------------------------- 1 | 2 | import pandas as pd 3 | import numpy as np 4 | import sklearn 5 | from sklearn import linear_model 6 | from sklearn.utils import shuffle 7 | 8 | # 9 | # Data From UCI Repo 10 | # https://archive.ics.uci.edu/ml/datasets/Student+Performance 11 | # 12 | data_location = "data/student/student-mat.csv" 13 | data = pd.read_csv(data_location, sep=";") 14 | data = data[["G1","G2","G3","studytime","failures","absences"]] 15 | 16 | # What would you like to predict? 17 | predict = "G3" 18 | 19 | X = np.array(data.drop([predict], 1)) 20 | y = np.array(data[predict]) 21 | 22 | # Splitting Vars - 4 Different arrays 23 | x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X,y, test_size=0.1) 24 | 25 | # Linear Regression - y = mx + b 26 | # Slope = y2 - y1 / x2 - x1 27 | linear = linear_model.LinearRegression() 28 | 29 | linear.fit(x_train, y_train) 30 | 31 | # 83 Percent Accurate 32 | acc_score = linear.score(x_test, y_test) 33 | print("Accurate: ",acc_score) 34 | 35 | print("Co: ", linear.coef_) 36 | print("Intercept: ", linear.intercept_) 37 | 38 | predictions = linear.predict(x_test) 39 | 40 | for x in range(len(predictions)): 41 | print(predictions[x], x_test[x],y_test[x]) 42 | 43 | 44 | -------------------------------------------------------------------------------- /1-9/7/Login System.py: -------------------------------------------------------------------------------- 1 | import time 2 | import sys 3 | import sqlite3 4 | 5 | # DB = users.db 6 | # Table = users 7 | # -- Table Info -- 8 | # userID 9 | # username 10 | # password 11 | # FirstName 12 | # LastName 13 | 14 | database = "users.db" 15 | 16 | def LoginSuccess(username): 17 | print("") 18 | print(f"<-- Welcome {username} -->") 19 | return True 20 | 21 | def login(): 22 | tries = 5 23 | while tries > 0: 24 | try: 25 | print("") 26 | print("--> Login System <--") 27 | username = input("Username: ") 28 | password = input("Password: ") 29 | with sqlite3.connect(database) as db: 30 | cursor = db.cursor() 31 | 32 | find_user = ("SELECT * FROM user WHERE username = ? AND password = ?") 33 | 34 | cursor.execute(find_user,[(username),(password)]) 35 | results = cursor.fetchall() 36 | 37 | if results: 38 | LoginSuccess(username) 39 | #return("exit") 40 | else: 41 | print("") 42 | print("[X] Username or Password Invalid") 43 | tries = tries - 1 44 | 45 | except KeyboardInterrupt: 46 | print("") 47 | print("[X] Closing...") 48 | sys.exit() 49 | 50 | login() -------------------------------------------------------------------------------- /1-9/1/Dice Rolling.py: -------------------------------------------------------------------------------- 1 | import time,sys,random 2 | 3 | yes = ['y','Y','Yes','yes','yea','yeah','Yea','Yeah','Hell Yes!'] 4 | no = ['n','N','No','no','nah','na','Nah','Na'] 5 | 6 | while True: 7 | try: 8 | print("") 9 | userInput = input("Would you like to roll the dice? (Y/N)\n-> ") 10 | if userInput==yes[-1]: 11 | print("") 12 | print("--> Cheater Mode <--") 13 | print("") 14 | print("The Dice is rolling") 15 | num1 = random.randint(1,100) 16 | num2 = random.randint(1,100) 17 | total = num1 + num2 18 | time.sleep(2) 19 | print(f"You have rolled a {num1} and a {num2}") 20 | print(f"Total - {total}") 21 | elif userInput in yes or userInput in no: 22 | if userInput in yes: 23 | print("") 24 | print('The Dice is rolling') 25 | num1 = random.randint(1,6) 26 | num2 = random.randint(1,6) 27 | total = num1 + num2 28 | time.sleep(2) 29 | print(f"You have rolled a {num1} and a {num2}") 30 | print(f"Total - {total}") 31 | elif userInput in no: 32 | print("") 33 | print("[X] Game has been stopped") 34 | sys.exit() 35 | else: 36 | print("") 37 | print("[X] Invalid Argument - Please Try Again") 38 | except KeyboardInterrupt: 39 | print("") 40 | print("[X] Game has been stopped") 41 | sys.exit() 42 | -------------------------------------------------------------------------------- /1-9/3/Fortune Teller.py: -------------------------------------------------------------------------------- 1 | import time 2 | import sys 3 | import random 4 | 5 | def fortune(fortune): 6 | if fortune == 1: 7 | return "Yes" 8 | elif fortune == 2: 9 | return "No" 10 | elif fortune == 3: 11 | return "Doesn't look likely" 12 | elif fortune == 4: 13 | return "It could happen" 14 | elif fortune == 5: 15 | return "Perhaps" 16 | elif fortune == 6: 17 | return "Definitely not" 18 | 19 | print(""" 20 | ____ 21 | .'* *.' 22 | __/_*_*(_ 23 | / _______ 24 | _\_)/___\(_/_ 25 | / _((\- -/))_ 26 | \ \())(-)(()/ / 27 | ' \(((()))/ ' 28 | / ' \)).))/ ' 29 | / _ \ - | - /_ 30 | ( ( .;''';. .' ) 31 | _\"__ / )\ __"/_ 32 | \/ \ ' / \/ 33 | .' '...' ' ) 34 | / / | \ 35 | / . . . 36 | / . . 37 | / / | \ 38 | .' / b '. '. 39 | _.-' / Bb '-. '-._ 40 | _.-' | BBb '-. '-. 41 | (________mrf\____.dBBBb.________)____) 42 | """) 43 | print("") 44 | question = input("What would you like to ask?\nQuestion: ") 45 | print("") 46 | print("The crystal ball starts to glow...") 47 | time.sleep(2) 48 | print("") 49 | print("The walls start to shake surrounding you...") 50 | time.sleep(2) 51 | fortune = fortune(random.randint(1,6)) 52 | print("") 53 | print("Words start to appear in the crystal ball...") 54 | print("") 55 | print(f""" 56 | _...._ 57 | .` `. 58 | / *** \ The Crystal Ball 59 | : ** : says......... 60 | : : {fortune} 61 | \ / 62 | `-.,,,,.-' 63 | _( )_ 64 | ) ( 65 | ( ) 66 | `-......-` 67 | """) 68 | 69 | 70 | -------------------------------------------------------------------------------- /21/main.py: -------------------------------------------------------------------------------- 1 | # https://www.udemy.com/course/100-days-of-code/ 2 | # Day - 7 | 23/11/2020 3 | # By - Justin St-Laurent 4 | 5 | # Hangman 6 | import random 7 | from ascii_hangman import HANGMANPICS 8 | 9 | _header = ''' 10 | +---+ 11 | Hangman | | 12 | Game O | 13 | /|\ | 14 | / \ | 15 | | 16 | ========= 17 | ''' 18 | 19 | def generate_word(): 20 | word_list = ["baboon"] 21 | return random.choice(word_list) 22 | 23 | def start_game(word): 24 | # Creating _ _ _ _ _ and words into an arr 25 | words = list(word) 26 | blanks = [] 27 | for blank in words: 28 | blanks.append(" _ ") 29 | 30 | # There are 7 types of hangman status - ascii_hangman.py 31 | hangman_status = 0 32 | 33 | while True: 34 | print(chr(27) + "[2J") 35 | blanks_display = ''.join(blanks) 36 | _output = f""" 37 | {HANGMANPICS[hangman_status]} 38 | 39 | {blanks_display} 40 | """ 41 | print(_output) 42 | 43 | if hangman_status == 7: 44 | print("Oh dear! You have lost the game") 45 | print(f"Word - {word}") 46 | break 47 | 48 | if blanks_display == word: 49 | print("You have won!") 50 | break 51 | 52 | guess = input("Guess a letter:").lower() 53 | if guess in words: 54 | # Guess is in the words list 55 | for index, char in enumerate(words): 56 | if char == guess: 57 | blanks[index] = guess 58 | else: 59 | # Word isn't in the word list 60 | hangman_status += 1 61 | 62 | 63 | if __name__ == '__main__': 64 | print(_header) 65 | start = input("Would you like to start a new game? (Y/N)") 66 | if start.lower() == "y" or start.lower() == "yes": 67 | word = generate_word() 68 | start_game(word) 69 | 70 | 71 | -------------------------------------------------------------------------------- /1-9/2/Number Guessing.py: -------------------------------------------------------------------------------- 1 | import random 2 | import time 3 | import sys 4 | 5 | minNum = 1 6 | maxNum = 20 7 | lives = 10 8 | 9 | print(""" 10 | _,;;.,_ 11 | ,-;;,_ ;,',,,'''@ 12 | ,;;`` `'\ |//``-:;,. 13 | @` ;^^^; `'@ 14 | :@ @: 15 | \ u / 16 | ,=,------)^^^(------,=, 17 | '-'-----/=====\-----'-' 18 | \_____/ 19 | '`\ /_____ 20 | `\ \_____/_ 21 | \//_____\/| 22 | | || 23 | | |' 24 | :________:` 25 | 26 | ---> Guess The Number <--- 27 | """) 28 | 29 | number = random.randint(minNum,maxNum) 30 | 31 | while lives > 0: 32 | try: 33 | print("") 34 | print(f"Lives - {lives}") 35 | try: 36 | guess = int(input(f"I am thinking of a number between {minNum} and {maxNum}\nGuess: ")) 37 | if guess < minNum or guess > maxNum: 38 | print("") 39 | print(f"[X] The number must be between {minNum} and {maxNum}") 40 | else: 41 | if guess == number: 42 | print("") 43 | print("--> Winner Winner Chicken Dinner <--") 44 | print(f"The number was {number}") 45 | sys.exit() 46 | elif guess > number: 47 | print("") 48 | print(f"The number is LOWER than {guess}") 49 | lives = lives - 1 50 | elif guess < number: 51 | print("") 52 | print(f"The number is HIGHER than {guess}") 53 | lives = lives - 1 54 | 55 | except ValueError: 56 | print("") 57 | print("[X] Please enter a number") 58 | 59 | 60 | except KeyboardInterrupt: 61 | print("") 62 | print("[X] Closing...") 63 | sys.exit() 64 | 65 | if lives == 0: 66 | print("") 67 | print("[X] You have died!") 68 | sys.exit() -------------------------------------------------------------------------------- /20/main.py: -------------------------------------------------------------------------------- 1 | # https://www.udemy.com/course/100-days-of-code/ 2 | # Day - 5 | 22/11/2020 3 | # By - Justin St-Laurent 4 | 5 | # Password Generator 6 | import random 7 | 8 | # Easy Level 9 | def generate_pass(nr_letters, nr_symbols, nr_numbers): 10 | letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 11 | numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] 12 | symbols = ['!', '#', '$', '%', '&', '(', ')', '*', '+'] 13 | 14 | print("[+] Generating Password...") 15 | password = "" 16 | password_list = [] 17 | 18 | # Random letters 19 | for char in range(1, nr_letters + 1): 20 | random_char = random.choice(letters) 21 | password += random_char 22 | password_list.append(random_char) 23 | 24 | # Random symbols 25 | for sym in range(1, nr_symbols + 1): 26 | random_sym = random.choice(symbols) 27 | password += random_sym 28 | password_list.append(random_sym) 29 | 30 | # Random numbers 31 | for num in range(1, nr_numbers + 1): 32 | random_num = random.choice(numbers) 33 | password += random_num 34 | password_list.append(random_num) 35 | 36 | easy_password = password 37 | print(f"[✓] Easy Password Generated - {easy_password}") 38 | 39 | print("[+] Shuffling Password...") 40 | random.shuffle(password_list) 41 | hard_password = ''.join(password_list) 42 | return f"[✓] Hard Password Generated - {hard_password}" 43 | 44 | 45 | if __name__ == '__main__': 46 | print("Welcome to the PyPassword Generator!") 47 | nr_letters= int(input("How many letters would you like in your password?\n")) 48 | nr_symbols = int(input(f"How many symbols would you like?\n")) 49 | nr_numbers = int(input(f"How many numbers would you like?\n")) 50 | password = generate_pass(nr_letters, nr_symbols, nr_numbers) 51 | print(password) 52 | -------------------------------------------------------------------------------- /10-19/12/start.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os.path 3 | import os 4 | import sys, time 5 | from appscript import app, mactypes 6 | from datetime import datetime 7 | import sqlite3 8 | 9 | wallpaper_txt = "current_wallpaper.txt" 10 | 11 | 12 | url = "https://source.unsplash.com/random/2560x1600" 13 | export_name = f"Desktop_{datetime.now()}.jpeg" 14 | 15 | 16 | def grabNew(url, export_name): 17 | print("") 18 | print("* Fetching new wallpaper from the web") 19 | r = requests.get(url) 20 | with open(export_name, 'wb') as image: 21 | image.write(r.content) 22 | 23 | def setNew(export_name,wallpaper_txt): 24 | 25 | new_wallpaper = open(wallpaper_txt, "w+") 26 | 27 | if os.path.isfile(wallpaper_txt): 28 | new_wallpaper.write(export_name) 29 | time.sleep(2) 30 | app('Finder').desktop_picture.set(mactypes.File(export_name)) 31 | else: 32 | print("") 33 | print("* An error occured in setNew function") 34 | sys.exit() 35 | 36 | def cleanOld(wallpaper_txt): 37 | current_wallpaper = open(wallpaper_txt, "r") 38 | wallpaper = current_wallpaper.readline() 39 | os.remove(wallpaper) 40 | time.sleep(1) 41 | os.remove(wallpaper_txt) 42 | if os.path.isfile(wallpaper_txt): 43 | print("") 44 | print("* Error removing current wallpaper") 45 | sys.exit() 46 | else: 47 | print("") 48 | print("* Old wallpaper removed") 49 | 50 | #new_wallpaper = open(wallpaper_txt, "w+") 51 | try: 52 | userInput = int(input("What would you like to do:\n1) New Wallpaper\n2) Save Current Wallpaper\nOption: ")) 53 | 54 | if userInput == 1: 55 | if os.path.isfile(wallpaper_txt): 56 | print("") 57 | print("* Removing pervious wallpaper") 58 | cleanOld(wallpaper_txt) 59 | time.sleep(1) 60 | grabNew(url,export_name) 61 | time.sleep(1) 62 | setNew(export_name,wallpaper_txt) 63 | 64 | else: 65 | # Create New one 66 | print("") 67 | 68 | except (ValueError,KeyboardInterrupt) as reason: 69 | print("") 70 | print(f"* Session closed because of {reason}") 71 | -------------------------------------------------------------------------------- /1-9/4/Text Calculator.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import time 3 | 4 | def addition(): 5 | num1 = int(input("First Number - ")) 6 | num2 = int(input("Second Number - ")) 7 | total = num1 + num2 8 | return total 9 | 10 | def subtracting(): 11 | num1 = int(input("First Number - ")) 12 | num2 = int(input("Second Number - ")) 13 | total = num1 - num2 14 | return total 15 | 16 | def multiplication(): 17 | num1 = int(input("First Number - ")) 18 | num2 = int(input("Second Number - ")) 19 | total = num1 * num2 20 | return total 21 | 22 | def division(): 23 | num1 = int(input("First Number - ")) 24 | num2 = int(input("Second Number - ")) 25 | try: 26 | total = num1 / num2 27 | return total 28 | except ZeroDivisionError: 29 | print("") 30 | print("[X] Can't divide by 0") 31 | sys.exit() 32 | 33 | while True: 34 | try: 35 | try: 36 | print("") 37 | options = int(input("-> Text Calculator <-\n1) Addition\n2) Subtracting\n3) Multiplication\n4) Division\nOption: ")) 38 | 39 | if options == 1: 40 | total = addition() 41 | print("") 42 | print(f"The total is {total}") 43 | time.sleep(3) 44 | elif options == 2: 45 | total = subtracting() 46 | print("") 47 | print(f"The total is {total}") 48 | time.sleep(3) 49 | elif options == 3: 50 | total = multiplication() 51 | print("") 52 | print(f"The total is {total}") 53 | time.sleep(3) 54 | elif options == 4: 55 | total = division() 56 | print("") 57 | print(f"The total is {total}") 58 | time.sleep(3) 59 | else: 60 | print("") 61 | print("[X] Please enter a valid option") 62 | 63 | 64 | except ValueError: 65 | print("") 66 | print("[X] Please enter a valid option") 67 | except KeyboardInterrupt: 68 | print("") 69 | print("[X] Closing...") 70 | sys.exit() -------------------------------------------------------------------------------- /10-19/19/main.py: -------------------------------------------------------------------------------- 1 | # https://www.udemy.com/course/100-days-of-code/ 2 | # Day - 4 | 21/11/2020 3 | # By - Justin St-Laurent 4 | 5 | # Rock, Paper, Scissors Game 6 | import random 7 | def game(player_choice): 8 | # 1 - Rock 9 | # 2 - Paper 10 | # 3 - Scissors 11 | pc_choice = random.randint(1, 3) 12 | if pc_choice == 1: 13 | _rock = ''' 14 | _______ 15 | ---' ____) 16 | (_____) 17 | (_____) 18 | (____) 19 | ---.__(___) 20 | ''' 21 | print(_rock) 22 | print("PC has played: Rock") 23 | if player_choice.lower() == "paper": 24 | return "Player has won!" 25 | elif player_choice.lower() == "scissors": 26 | return "PC has won!" 27 | elif player_choice.lower() == "rock": 28 | return "It's a tie!" 29 | elif pc_choice == 2: 30 | _paper = ''' 31 | _______ 32 | ---' ____) 33 | ______) 34 | _______) 35 | _______) 36 | ---.__________) 37 | ''' 38 | print(_paper) 39 | print("PC has played: Paper") 40 | if player_choice.lower() == "paper": 41 | return "It's a tie!" 42 | elif player_choice.lower() == "scissors": 43 | return "Player has won!" 44 | elif player_choice.lower() == "rock": 45 | return "PC has won!" 46 | elif pc_choice == 3: 47 | _scissors = ''' 48 | _______ 49 | ---' ____)____ 50 | ______) 51 | __________) 52 | (____) 53 | ---.__(___) 54 | ''' 55 | print(_scissors) 56 | print("PC has played: Scissors") 57 | if player_choice.lower() == "paper": 58 | return "PC has won!" 59 | elif player_choice.lower() == "scissors": 60 | return "It's a tie!" 61 | elif player_choice.lower() == "rock": 62 | return "Player has won!" 63 | return "Not a valid option" 64 | 65 | if __name__ == '__main__': 66 | print("Welcome to the Rock, Paper, Scissors Game") 67 | player_choice = input("Player Choice [Rock, Paper, Scissors]:") 68 | print(game(player_choice)) 69 | -------------------------------------------------------------------------------- /10-19/18/main.py: -------------------------------------------------------------------------------- 1 | # https://www.udemy.com/course/100-days-of-code/ 2 | # Day - 3 | 21/11/2020 3 | # By - Justin St-Laurent 4 | 5 | # Control Flow and Logical Operators 6 | if __name__ == '__main__': 7 | player = input("Player:") 8 | _header = (f''' 9 | ******************************************************************************* 10 | | | | | 11 | _________|________________.=""_;=.______________|_____________________|_______ 12 | | | ,-"_,="" `"=.| | 13 | |___________________|__"=._o`"-._ `"=.______________|___________________ 14 | | `"=._o`"=._ _`"=._ | 15 | _________|_____________________:=._o "=._."_.-="'"=.__________________|_______ 16 | | | __.--" , ; `"=._o." ,-"""-._ ". | 17 | |___________________|_._" ,. .` ` `` , `"-._"-._ ". '__|___________________ 18 | | |o`"=._` , "` `; .". , "-._"-._; ; | 19 | _________|___________| ;`-.o`"=._; ." ` '`."\` . "-._ /_______________|_______ 20 | | | |o; `"-.o`"=._`` '` " ,__.--o; | 21 | |___________________|_| ; (#) `-.o `"=.`_.--"_o.-; ;___|___________________ 22 | ____/______/______/___|o;._ " `".o|o_.--" ;o;____/______/______/____ 23 | /______/______/______/_"=._o--._ ; | ; ; ;/______/______/______/_ 24 | ____/______/______/______/__"=._o--._ ;o|o; _._;o;____/______/______/____ 25 | /______/______/______/______/____"=._o._; | ;_.--"o.--"_/______/______/______/_ 26 | ____/______/______/______/______/_____"=.o|o_.--""___/______/______/______/____ 27 | /______/______/______/______/______/______/______/______/______/______/______/ 28 | ******************************************************************************* 29 | Welcome {player} to Tresure Island. 30 | ''') 31 | 32 | 33 | print(_header) 34 | choice = input("You're at a cross road. Where do you want to go? [Left / Right]\n") 35 | if choice.lower() == 'left': 36 | choice = input("You arrive at a lake. There is an island in the middle of the lake. Wait for a boat or swim accross? [Wait / Swim]") 37 | if choice.lower() == "wait": 38 | choice = input("You arrive at the island unharmed. There is a house with 3 doors. One red, one yellow and one blue. Which door would you like to go in? [Red / Yellow / Blue]") 39 | if choice.lower() == 'red': 40 | print(f"Oh dear! {player} has been set on fire! Game over.") 41 | elif choice.lower() == 'yellow': 42 | print(f"{player} found the tresure! You've won!") 43 | elif choice.lower() == "blue": 44 | print(f"Oh dear! {player} has been eaten by a dragon! Game over.") 45 | else: 46 | print(f"Oh dear! {player} has decided to stay and look at the doors! Game over.") 47 | else: 48 | print(f"Oh dear! {player} has been attacked by trout! Game over.") 49 | else: 50 | print(f"Oh dear! {player} has fallen into hole! Game over.") -------------------------------------------------------------------------------- /10-19/15/data/student/student.txt: -------------------------------------------------------------------------------- 1 | # Attributes for both student-mat.csv (Math course) and student-por.csv (Portuguese language course) datasets: 2 | 1 school - student's school (binary: "GP" - Gabriel Pereira or "MS" - Mousinho da Silveira) 3 | 2 sex - student's sex (binary: "F" - female or "M" - male) 4 | 3 age - student's age (numeric: from 15 to 22) 5 | 4 address - student's home address type (binary: "U" - urban or "R" - rural) 6 | 5 famsize - family size (binary: "LE3" - less or equal to 3 or "GT3" - greater than 3) 7 | 6 Pstatus - parent's cohabitation status (binary: "T" - living together or "A" - apart) 8 | 7 Medu - mother's education (numeric: 0 - none, 1 - primary education (4th grade), 2 – 5th to 9th grade, 3 – secondary education or 4 – higher education) 9 | 8 Fedu - father's education (numeric: 0 - none, 1 - primary education (4th grade), 2 – 5th to 9th grade, 3 – secondary education or 4 – higher education) 10 | 9 Mjob - mother's job (nominal: "teacher", "health" care related, civil "services" (e.g. administrative or police), "at_home" or "other") 11 | 10 Fjob - father's job (nominal: "teacher", "health" care related, civil "services" (e.g. administrative or police), "at_home" or "other") 12 | 11 reason - reason to choose this school (nominal: close to "home", school "reputation", "course" preference or "other") 13 | 12 guardian - student's guardian (nominal: "mother", "father" or "other") 14 | 13 traveltime - home to school travel time (numeric: 1 - <15 min., 2 - 15 to 30 min., 3 - 30 min. to 1 hour, or 4 - >1 hour) 15 | 14 studytime - weekly study time (numeric: 1 - <2 hours, 2 - 2 to 5 hours, 3 - 5 to 10 hours, or 4 - >10 hours) 16 | 15 failures - number of past class failures (numeric: n if 1<=n<3, else 4) 17 | 16 schoolsup - extra educational support (binary: yes or no) 18 | 17 famsup - family educational support (binary: yes or no) 19 | 18 paid - extra paid classes within the course subject (Math or Portuguese) (binary: yes or no) 20 | 19 activities - extra-curricular activities (binary: yes or no) 21 | 20 nursery - attended nursery school (binary: yes or no) 22 | 21 higher - wants to take higher education (binary: yes or no) 23 | 22 internet - Internet access at home (binary: yes or no) 24 | 23 romantic - with a romantic relationship (binary: yes or no) 25 | 24 famrel - quality of family relationships (numeric: from 1 - very bad to 5 - excellent) 26 | 25 freetime - free time after school (numeric: from 1 - very low to 5 - very high) 27 | 26 goout - going out with friends (numeric: from 1 - very low to 5 - very high) 28 | 27 Dalc - workday alcohol consumption (numeric: from 1 - very low to 5 - very high) 29 | 28 Walc - weekend alcohol consumption (numeric: from 1 - very low to 5 - very high) 30 | 29 health - current health status (numeric: from 1 - very bad to 5 - very good) 31 | 30 absences - number of school absences (numeric: from 0 to 93) 32 | 33 | # these grades are related with the course subject, Math or Portuguese: 34 | 31 G1 - first period grade (numeric: from 0 to 20) 35 | 31 G2 - second period grade (numeric: from 0 to 20) 36 | 32 G3 - final grade (numeric: from 0 to 20, output target) 37 | 38 | Additional note: there are several (382) students that belong to both datasets . 39 | These students can be identified by searching for identical attributes 40 | that characterize each student, as shown in the annexed R file. 41 | -------------------------------------------------------------------------------- /1-9/5/SQLite3 Database Creation.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | import sys 3 | import os.path 4 | 5 | def createDatabase(database): 6 | while True: 7 | print("") 8 | userINP = input(f"Are you sure you'd like to create {database}(Y/N)\nAnswer: ") 9 | if userINP.lower() == "y": 10 | db = sqlite3.connect(f"{database}.db") 11 | if os.path.isfile(f"{database}.db"): 12 | print("[+] Database has been created successfully") 13 | sys.exit() 14 | else: 15 | print("[X] There was an error creating the database") 16 | sys.exit() 17 | elif userINP.lower() == "n": 18 | print("") 19 | print("[X] Database creation has been canceled!") 20 | sys.exit() 21 | else: 22 | print("") 23 | print("[X] Invalid Response - Please Try Again") 24 | 25 | def createTable(database, table): 26 | if os.path.isfile(f"{dbName}.db"): 27 | print("") 28 | print("--- Enter the table content ---") 29 | print("Type done when completed or press CTRL-C to cancel") 30 | tableContent = [] 31 | line = 6 32 | while line > 0: 33 | try: 34 | print("") 35 | newTableContent = input("Field Name:") 36 | if newTableContent.lower() == "done": 37 | break 38 | else: 39 | tableContent.append(newTableContent) 40 | line = line - 1 41 | 42 | except KeyboardInterrupt: 43 | print("") 44 | print("[X] Closing...") 45 | sys.exit() 46 | 47 | print("") 48 | print("[+] Creating Table") 49 | print(f"{tableContent[0]}\n{tableContent[1]}\n{tableContent[2]}\n{tableContent[3]}\n{tableContent[4]}") 50 | newTable = f""" 51 | CREATE TABLE IF NOT EXISTS user( 52 | {tableContent[0]} INTEGER PRIMARY KEY, 53 | {tableContent[1]} VARCHAR(20) NOT NULL, 54 | {tableContent[2]} VARCHAR(20) NOT NULL, 55 | {tableContent[3]} VARCHAR(20) NOT NULL, 56 | {tableContent[4]} VARCHAR(20) NOT NULL, 57 | {tableContent[5]} VARCHAR(20) NOT NULL 58 | ) 59 | """ 60 | database = sqlite3.connect(f"{dbName}.db") 61 | db = database.cursor() 62 | db.execute(newTable) 63 | print("") 64 | print(f"[i] Table has been created in the {dbName} database") 65 | sys.exit() 66 | 67 | else: 68 | print("") 69 | print(f"[X] {dbName} was not found") 70 | sys.exit() 71 | 72 | 73 | print("") 74 | print("CTRL-C to exit program") 75 | while True: 76 | print("") 77 | print("--> SQLite3 Database Creation Tool <--") 78 | try: 79 | try: 80 | options = int(input("What would you like to do:\n1) Create a new database\n2) Create a new table\nOption: ")) 81 | if options == 1: 82 | print("") 83 | dbName = input("What would you like to call this database:\nDatabase Name: ") 84 | createDatabase(dbName) 85 | elif options == 2: 86 | print("") 87 | dbName = input("Which database would you like to add a table too:\nDatabase Name: ") 88 | print("") 89 | tbName = input("What you like to call this table:\n Table Name: ") 90 | createTable(dbName, tbName) 91 | else: 92 | print("") 93 | print("[X] Invalid Option - Please try again") 94 | except ValueError: 95 | print("") 96 | print("[X] Invalid Option - Please try again") 97 | except KeyboardInterrupt: 98 | print("") 99 | print("[X] Closing...") 100 | sys.exit() -------------------------------------------------------------------------------- /1-9/8/Checklist.py: -------------------------------------------------------------------------------- 1 | import time 2 | import sys 3 | import sqlite3 4 | 5 | database = "Checklist.db" 6 | table = "Lists" 7 | 8 | 9 | def addtoList(table,item): 10 | find_item = ("SELECT * FROM Lists WHERE item = ?") 11 | cursor.execute(find_item,[(item)]) 12 | results = cursor.fetchall() 13 | if results: 14 | print("") 15 | print("[X] Item already in checklist") 16 | sys.exit() 17 | else: 18 | print("") 19 | print(f"[i] Adding {item} to the {database}...") 20 | cursor.execute(f""" 21 | INSERT INTO {table}(item) 22 | VALUES("{item}") 23 | """) 24 | db.commit() 25 | print("") 26 | print("[i] Verifying...") 27 | time.sleep(2) 28 | find_item = ("SELECT * FROM Lists WHERE item = ?") 29 | cursor.execute(find_item,[(item)]) 30 | results = cursor.fetchall() 31 | if results: 32 | print("") 33 | print("[+] Item was added") 34 | else: 35 | print("") 36 | print(f"[X] An error occured adding {item} to {table} in the {database}") 37 | sys.exit() 38 | 39 | def removefromList(table,itemID): 40 | print("") 41 | find_itemID = ("SELECT * FROM Lists WHERE itemID = ?") 42 | cursor.execute(find_itemID,[(itemID)]) 43 | results = cursor.fetchall() 44 | if results: 45 | for item in results: 46 | confirmation = input(f"Are you sure you'd like to remove {item[1]}? (Y/N)\nConfirmation: ") 47 | if confirmation.lower() == "y": 48 | print("") 49 | print(f"[i] Removing {item[1]}...") 50 | time.sleep(3) 51 | delete_query = """DELETE from Lists where itemID = ?""" 52 | cursor.execute(delete_query,[(itemID)]) 53 | db.commit() 54 | print("") 55 | print("[i] Verifying...") 56 | find_itemID = ("SELECT * FROM Lists WHERE itemID = ?") 57 | cursor.execute(find_itemID,[(itemID)]) 58 | results = cursor.fetchall() 59 | if results: 60 | print("") 61 | print(f"[X] An error occured deleting {item[1]} to {table} in the {database}") 62 | sys.exit() 63 | else: 64 | print("") 65 | print("[+] Item was deleted") 66 | 67 | 68 | 69 | else: 70 | print("") 71 | print("[X] Deletion Canceled") 72 | sys.exit() 73 | else: 74 | print("") 75 | print("[X] Item doesn't exist") 76 | sys.exit() 77 | 78 | 79 | def viewList(): 80 | view_items = ("SELECT * FROM Lists") 81 | cursor.execute(view_items) 82 | results = cursor.fetchall() 83 | if results: 84 | print("") 85 | print("- Current Items -") 86 | for item in results: 87 | print(f"{item[0]} - {item[1]}") 88 | 89 | 90 | 91 | def startScreen(): 92 | try: 93 | try: 94 | print("") 95 | print("<-- Check List -->") 96 | options = int(input("1) Add a new Item\n2) Remove a Item\n3) View current Items\nOption: ")) 97 | return options 98 | except ValueError: 99 | print("") 100 | except KeyboardInterrupt: 101 | print("") 102 | print("[X] Closing....") 103 | sys.exit() 104 | 105 | while True: 106 | try: 107 | print("") 108 | print("[i] CTRL-C to exit") 109 | option = startScreen() 110 | with sqlite3.connect(database) as db: 111 | cursor = db.cursor() 112 | 113 | if option == 1: 114 | print("") 115 | item = input("What would you like to add to the list?\nItem: ") 116 | addtoList(table,item) 117 | elif option == 2: 118 | print("") 119 | itemID = int(input("Which item would you like to remove?(Item ID)\nItem ID: ")) 120 | removefromList(table, itemID) 121 | elif option == 3: 122 | viewList() 123 | else: 124 | print("") 125 | print("[X] Invalid Option") 126 | 127 | except KeyboardInterrupt: 128 | print("") 129 | print("[X] Closing....") 130 | sys.exit() 131 | 132 | 133 | -------------------------------------------------------------------------------- /10-19/16/main.py: -------------------------------------------------------------------------------- 1 | from bs4 import BeautifulSoup 2 | import tkinter as tk 3 | import requests 4 | import sqlite3 5 | import time, datetime, os 6 | 7 | # ----------------------------------------------------- 8 | # Coronavirus GUI Application 9 | # - https://www.worldometers.info/coronavirus/ - 10 | # 04/02/2020 - Justin St-Laurent 11 | # ----------------------------------------------------- 12 | url = "https://www.worldometers.info/coronavirus/" 13 | page = requests.get(url) 14 | 15 | def error_handler(error_message): 16 | global error_handler_gui 17 | error_handler_gui = tk.Tk(className=" An Unexpected Error Occured") 18 | error_handler_gui.resizable(False, False) 19 | 20 | # Contents - Error Handler 21 | error_handler_message_label = tk.Label(error_handler_gui, text=error_message) 22 | error_handler_ok_button = tk.Button(error_handler_gui,text="Ok",command=error_handler_gui.destroy) 23 | 24 | # Display - Error Handler 25 | error_handler_message_label.pack() 26 | error_handler_ok_button.pack() 27 | 28 | print("") 29 | print("-- ERROR --") 30 | print(f"[X] {error_message}") 31 | 32 | error_handler_gui.mainloop() 33 | 34 | def main(page): 35 | if page.status_code == 200: 36 | print("") 37 | print("[*] Page Successfully Retrieved") 38 | elif page.status_code == 404: 39 | error_handler("Page Not Found") 40 | 41 | def refresh(url, main_total_cases_label, main_total_deaths_label, main_total_recovered_label): 42 | selected_country = var.get() 43 | print(selected_country) 44 | if selected_country == 'Worldwide': 45 | page = requests.get(url) 46 | soup = BeautifulSoup(page.content, 'html.parser') 47 | else: 48 | page = requests.get(url + selected_country) 49 | soup = BeautifulSoup(page.content, 'html.parser') 50 | 51 | 52 | # Gathering Information 53 | total_cases = soup.find_all('span')[4].get_text() 54 | total_deaths = soup.find_all('span')[5].get_text() 55 | total_recovered = soup.find_all('span')[6].get_text() 56 | 57 | main_total_cases_label.config(text=total_cases) 58 | main_total_deaths_label.config(text=total_deaths) 59 | main_total_recovered_label.config(text=total_recovered) 60 | print("") 61 | print("--- Information Updated ---") 62 | print(f"Total Cases - {total_cases}") 63 | print(f"Total Deaths - {total_deaths}") 64 | print(f"Total Recovered - {total_recovered}") 65 | 66 | 67 | 68 | 69 | 70 | global main_gui 71 | main_gui = tk.Tk(className=" Worldometer") 72 | main_gui.geometry("250x320") 73 | main_gui.resizable(False, False) 74 | soup = BeautifulSoup(page.content, 'html.parser') 75 | 76 | # Gathering Information 77 | total_cases = soup.find_all('span')[4].get_text() 78 | total_deaths = soup.find_all('span')[5].get_text() 79 | total_recovered = soup.find_all('span')[6].get_text() 80 | 81 | # Style - Main 82 | label_title_style = 'Helvetica 24 bold' 83 | label_title_fg = '#ededed' 84 | label_info_style = 'Helvetica 22' 85 | 86 | # Contents - Main 87 | spacing1 = tk.Label(main_gui,text= " ") 88 | spacing2 = tk.Label(main_gui,text= " ") 89 | spacing3 = tk.Label(main_gui,text= " ") 90 | 91 | main_total_cases_title_label = tk.Label(main_gui,text="Total Cases", font=label_title_style, fg=label_title_fg) 92 | main_total_cases_label = tk.Label(main_gui,text=total_cases, font=label_info_style,fg="#a8a8a8") 93 | 94 | main_total_deaths_title_label = tk.Label(main_gui,text="Total Deaths", font=label_title_style, fg=label_title_fg) 95 | main_total_deaths_label = tk.Label(main_gui,text=total_deaths,font=label_info_style,fg="#ed4e4e") 96 | 97 | main_total_recovered_title_label = tk.Label(main_gui,text="Total Recovered", font=label_title_style, fg=label_title_fg) 98 | main_total_recovered_label = tk.Label(main_gui, text=total_recovered,font=label_info_style,fg="#51cc3b") 99 | 100 | # Drop Down Menu - Main 101 | # Default Time - 1 Minute 102 | default_option = 'Worldwide' 103 | var = tk.StringVar(main_gui) 104 | var.set(default_option) 105 | countries = [default_option] 106 | for country in soup.find_all('a',{'class': ['mt_a'], 'href': True}): 107 | countries.append(country['href']) 108 | 109 | option_dropdown = tk.OptionMenu(main_gui, var, *countries) 110 | # Display - Main 111 | refresh_button = tk.Button(main_gui, text="Update", command=lambda:refresh(url,main_total_cases_label, main_total_deaths_label, main_total_recovered_label),width="20") 112 | 113 | # -- Total Cases -- 114 | main_total_cases_title_label.pack() 115 | main_total_cases_label.pack() 116 | 117 | spacing1.pack() 118 | 119 | # -- Total Deaths -- 120 | main_total_deaths_title_label.pack() 121 | main_total_deaths_label.pack() 122 | 123 | spacing2.pack() 124 | 125 | # -- Total Recovered -- 126 | main_total_recovered_title_label.pack() 127 | main_total_recovered_label.pack() 128 | 129 | spacing3.pack() 130 | 131 | # -- Settings -- 132 | refresh_button.pack() 133 | option_dropdown.pack() 134 | 135 | background_color = '#212121' 136 | 137 | main_total_cases_title_label.configure(bg=background_color) 138 | main_total_cases_label.configure(bg=background_color) 139 | 140 | main_total_deaths_title_label.configure(bg=background_color) 141 | main_total_deaths_label.configure(bg=background_color) 142 | 143 | main_total_recovered_title_label.configure(bg=background_color) 144 | main_total_recovered_label.configure(bg=background_color) 145 | 146 | refresh_button.configure(highlightbackground=background_color) 147 | option_dropdown.configure(bg=background_color) 148 | 149 | spacing1.configure(bg=background_color) 150 | spacing2.configure(bg=background_color) 151 | spacing3.configure(bg=background_color) 152 | 153 | main_gui.configure(bg=background_color) 154 | 155 | 156 | main_gui.mainloop() 157 | 158 | 159 | if __name__ == '__main__': 160 | try: 161 | print("") 162 | print("-- BACKEND --") 163 | main(page) 164 | 165 | except (KeyboardInterrupt) as reason: 166 | error_handler(reason) 167 | -------------------------------------------------------------------------------- /10-19/14/start.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os 3 | from appscript import app, mactypes 4 | from datetime import datetime 5 | import sqlite3 6 | import shutil 7 | 8 | ################################################## 9 | # Thanks to reddit users - enricojr and JunkyByte 10 | ################################################## 11 | 12 | wallpaper_txt = "current_wallpaper.txt" 13 | 14 | url = "https://source.unsplash.com/random/2560x1600" 15 | export_name = f"Desktop_{datetime.now()}.jpeg" 16 | 17 | def grab_new(url, export_name): 18 | print("") 19 | print("* Fetching new wallpaper from the web") 20 | r = requests.get(url) 21 | with open(export_name, 'wb') as image: 22 | image.write(r.content) 23 | 24 | def set_new(export_name,wallpaper_txt): 25 | 26 | new_wallpaper = open(wallpaper_txt, "w+") 27 | 28 | new_wallpaper.write(export_name) 29 | app('Finder').desktop_picture.set(mactypes.File(export_name)) 30 | print("") 31 | return print("* New wallpaper has been set") 32 | 33 | 34 | def clean_old(wallpaper_txt): 35 | current_wallpaper = open(wallpaper_txt, "r") 36 | wallpaper = current_wallpaper.readline() 37 | os.remove(wallpaper) 38 | os.remove(wallpaper_txt) 39 | if os.path.isfile(wallpaper_txt): 40 | print("") 41 | return print("* Error removing current wallpaper") 42 | else: 43 | print("") 44 | return print("* Old wallpaper removed") 45 | 46 | def save_desktop(wallpaper_txt): 47 | current_wallpaper = open(wallpaper_txt, "r") 48 | wallpaper = current_wallpaper.readline() 49 | 50 | ######## CREATING DATABASE AND TABLE ############ 51 | database = "database/saved.db" 52 | table = "Images" 53 | table_content = ["imageID","imageName"] 54 | 55 | new_table = f""" 56 | CREATE TABLE IF NOT EXISTS {table}( 57 | {table_content[0]} INTEGER PRIMARY KEY, 58 | {table_content[1]} VARCHAR(20) NOT NULL 59 | ) 60 | """ 61 | 62 | with sqlite3.connect(database) as db: 63 | cursor = db.cursor() 64 | 65 | cursor.execute(new_table) 66 | ######## CREATING DATABASE AND TABLE ############ 67 | 68 | with sqlite3.connect(database) as db: 69 | cursor = db.cursor() 70 | 71 | find_image = (f"SELECT * FROM Images WHERE imageName = ?") 72 | cursor.execute(find_image,[(wallpaper)]) 73 | results = cursor.fetchall() 74 | 75 | if results: 76 | print("") 77 | return print("* Image was already saved") 78 | else: 79 | print("") 80 | print("* Saving image to the database") 81 | cursor.execute(f""" 82 | INSERT INTO Images(imageName) 83 | VALUES("{wallpaper}") 84 | """) 85 | db.commit() 86 | find_image = (f"SELECT * FROM Images WHERE imageName = ?") 87 | cursor.execute(find_image,[(wallpaper)]) 88 | results = cursor.fetchall() 89 | if results: 90 | ######## COPYING CURRENT WALLPAPER ######## 91 | savedFile = "database/images/" 92 | shutil.copy(wallpaper, savedFile) 93 | print("") 94 | return print("* Image has been saved to the db") 95 | ######## COPYING CURRENT WALLPAPER ######## 96 | else: 97 | print("") 98 | return print("* Couldn't add image to the db") 99 | 100 | def view_saved(wallpaper_txt): 101 | database = "database/saved.db" 102 | 103 | with sqlite3.connect(database) as db: 104 | cursor = db.cursor() 105 | 106 | view_item = ("SELECT * FROM Images") 107 | cursor.execute(view_item) 108 | results = cursor.fetchall() 109 | if results: 110 | print("######################################################") 111 | print("# -> Saved Wallpapers <- #") 112 | print("#imageID - imageName #") 113 | print("######################################################") 114 | while True: 115 | for image in results: 116 | print(f"{image[0]} - {image[1]}") 117 | 118 | user_input = int(input("imageID - ")) 119 | find_image = (f"SELECT * FROM Images WHERE imageID = ?") 120 | cursor.execute(find_image,[(user_input)]) 121 | results = cursor.fetchall() 122 | if results: 123 | imageTable= ("SELECT * FROM Images WHERE imageID = ?") 124 | cursor.execute(imageTable,[(user_input)]) 125 | results = cursor.fetchall() 126 | for image in results: 127 | image_name = image[1] 128 | 129 | 130 | print("") 131 | print(f"* {user_input} exist, changing wallpaper ") 132 | clean_old(wallpaper_txt) 133 | saved_file = f"database/images/{image_name}" 134 | shutil.copy(saved_file, ".") 135 | set_new(image_name,wallpaper_txt) 136 | break 137 | 138 | else: 139 | print("") 140 | print(f"{userInput} is not valid") 141 | 142 | def delete_saved(): 143 | database = "database/saved.db" 144 | 145 | with sqlite3.connect(database) as db: 146 | cursor = db.cursor() 147 | 148 | view_item = ("SELECT * FROM Images") 149 | cursor.execute(view_item) 150 | results = cursor.fetchall() 151 | if results: 152 | print("######################################################") 153 | print("# -> Saved Wallpapers <- #") 154 | print("#imageID - imageName #") 155 | print("######################################################") 156 | while True: 157 | for image in results: 158 | print(f"{image[0]} - {image[1]}") 159 | 160 | userInput = int(input("imageID - ")) 161 | find_image = (f"SELECT * FROM Images WHERE imageID = ?") 162 | cursor.execute(find_image,[(userInput)]) 163 | results = cursor.fetchall() 164 | if results: 165 | print("") 166 | delete_query = """DELETE from Images where imageID = ?""" 167 | cursor.execute(delete_query,[(image[0])]) 168 | db.commit() 169 | if os.path.isfile(f"database/images/{image[1]}"): 170 | os.remove(f"database/images/{image[1]}") 171 | if os.path.isfile(f"database/images/{image[1]}"): 172 | print("") 173 | print(f"* Couldn't remove {image[1]} from the saved folder") 174 | 175 | print("") 176 | print(f"* {image[1]} has been deleted") 177 | break 178 | 179 | if __name__ == '__main__': 180 | try: 181 | try: 182 | print("") 183 | print("---> CONTROL-C TO EXIT <---") 184 | userInput = int(input("What would you like to do:\n1) New Wallpaper\n2) Save Current Wallpaper\n3) View Saved Wallpapers\n4) Delete a Saved Wallpaper\nOption: ")) 185 | if userInput == 1: 186 | if os.path.isfile(wallpaper_txt): 187 | print("") 188 | print("* Removing pervious wallpaper") 189 | clean_old(wallpaper_txt) 190 | grab_new(url,export_name) 191 | set_new(export_name,wallpaper_txt) 192 | else: 193 | grab_new(url,export_name) 194 | set_new(export_name,wallpaper_txt) 195 | elif userInput == 2: 196 | save_desktop(wallpaper_txt) 197 | elif userInput == 3: 198 | view_saved(wallpaper_txt) 199 | elif userInput == 4: 200 | delete_saved() 201 | else: 202 | print("") 203 | print("* Input invalid") 204 | except KeyboardInterrupt: 205 | print("") 206 | print("Bye! :)") 207 | except (ValueError,OSError) as reason: 208 | print("") 209 | print("---- The following error occured ----") 210 | print(reason) -------------------------------------------------------------------------------- /10-19/13/start.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import os.path 3 | import os 4 | import sys, time 5 | from appscript import app, mactypes 6 | from datetime import datetime 7 | import sqlite3 8 | import shutil 9 | 10 | wallpaper_txt = "current_wallpaper.txt" 11 | 12 | url = "https://source.unsplash.com/random/2560x1600" 13 | export_name = f"Desktop_{datetime.now()}.jpeg" 14 | 15 | def grabNew(url, export_name): 16 | print("") 17 | print("* Fetching new wallpaper from the web") 18 | r = requests.get(url) 19 | with open(export_name, 'wb') as image: 20 | image.write(r.content) 21 | 22 | def setNew(export_name,wallpaper_txt): 23 | 24 | new_wallpaper = open(wallpaper_txt, "w+") 25 | 26 | if os.path.isfile(wallpaper_txt): 27 | new_wallpaper.write(export_name) 28 | time.sleep(2) 29 | app('Finder').desktop_picture.set(mactypes.File(export_name)) 30 | sys.exit() 31 | else: 32 | print("") 33 | print("* An error occured in setNew function") 34 | sys.exit() 35 | 36 | def cleanOld(wallpaper_txt): 37 | current_wallpaper = open(wallpaper_txt, "r") 38 | wallpaper = current_wallpaper.readline() 39 | os.remove(wallpaper) 40 | time.sleep(1) 41 | os.remove(wallpaper_txt) 42 | if os.path.isfile(wallpaper_txt): 43 | print("") 44 | print("* Error removing current wallpaper") 45 | sys.exit() 46 | else: 47 | print("") 48 | print("* Old wallpaper removed") 49 | 50 | def saveDesktop(wallpaper_txt): 51 | current_wallpaper = open(wallpaper_txt, "r") 52 | wallpaper = current_wallpaper.readline() 53 | 54 | ######## CREATING DATABASE AND TABLE ############ 55 | database = "database/saved.db" 56 | table = "Images" 57 | tableContent = ["imageID","imageName"] 58 | 59 | newTable = f""" 60 | CREATE TABLE IF NOT EXISTS {table}( 61 | {tableContent[0]} INTEGER PRIMARY KEY, 62 | {tableContent[1]} VARCHAR(20) NOT NULL 63 | ) 64 | """ 65 | 66 | with sqlite3.connect(database) as db: 67 | cursor = db.cursor() 68 | 69 | cursor.execute(newTable) 70 | ######## CREATING DATABASE AND TABLE ############ 71 | 72 | 73 | if os.path.isfile(database): 74 | 75 | 76 | with sqlite3.connect(database) as db: 77 | cursor = db.cursor() 78 | 79 | find_image = (f"SELECT * FROM Images WHERE imageName = ?") 80 | cursor.execute(find_image,[(wallpaper)]) 81 | results = cursor.fetchall() 82 | 83 | if results: 84 | print("") 85 | print("* Image was already saved") 86 | sys.exit() 87 | else: 88 | print("") 89 | print("* Saving image to the database") 90 | cursor.execute(f""" 91 | INSERT INTO Images(imageName) 92 | VALUES("{wallpaper}") 93 | """) 94 | db.commit() 95 | time.sleep(1) 96 | find_image = (f"SELECT * FROM Images WHERE imageName = ?") 97 | cursor.execute(find_image,[(wallpaper)]) 98 | results = cursor.fetchall() 99 | if results: 100 | print("") 101 | print("* Image has been saved to the db") 102 | ######## COPYING CURRENT WALLPAPER ######## 103 | savedFile = "database/images/" 104 | shutil.copy(wallpaper, savedFile) 105 | sys.exit() 106 | ######## COPYING CURRENT WALLPAPER ######## 107 | 108 | else: 109 | print("") 110 | print("* Couldn't add image to the db") 111 | sys.exit() 112 | 113 | 114 | 115 | else: 116 | print("") 117 | print(f"* Couldn't create {database}") 118 | sys.exit() 119 | 120 | def viewSaved(wallpaper_txt): 121 | database = "database/saved.db" 122 | 123 | with sqlite3.connect(database) as db: 124 | cursor = db.cursor() 125 | 126 | view_item = ("SELECT * FROM Images") 127 | cursor.execute(view_item) 128 | results = cursor.fetchall() 129 | if results: 130 | print("######################################################") 131 | print("# -> Saved Wallpapers <- #") 132 | print("#imageID - imageName #") 133 | print("######################################################") 134 | while True: 135 | for image in results: 136 | print(f"{image[0]} - {image[1]}") 137 | 138 | userInput = int(input("imageID - ")) 139 | find_image = (f"SELECT * FROM Images WHERE imageID = ?") 140 | cursor.execute(find_image,[(userInput)]) 141 | results = cursor.fetchall() 142 | if results: 143 | imageTable= ("SELECT * FROM Images WHERE imageID = ?") 144 | cursor.execute(imageTable,[(userInput)]) 145 | results = cursor.fetchall() 146 | for image in results: 147 | global imageName 148 | imageName = image[1] 149 | 150 | 151 | print("") 152 | print(f"* {userInput} exist, changing wallpaper ") 153 | cleanOld(wallpaper_txt) 154 | time.sleep(1) 155 | savedFile = f"database/images/{imageName}" 156 | shutil.copy(savedFile, ".") 157 | time.sleep(1) 158 | setNew(imageName,wallpaper_txt) 159 | break 160 | 161 | else: 162 | print("") 163 | print(f"{userInput} is not valid") 164 | 165 | def deleteSaved(): 166 | database = "database/saved.db" 167 | 168 | with sqlite3.connect(database) as db: 169 | cursor = db.cursor() 170 | 171 | view_item = ("SELECT * FROM Images") 172 | cursor.execute(view_item) 173 | results = cursor.fetchall() 174 | if results: 175 | print("######################################################") 176 | print("# -> Saved Wallpapers <- #") 177 | print("#imageID - imageName #") 178 | print("######################################################") 179 | while True: 180 | for image in results: 181 | print(f"{image[0]} - {image[1]}") 182 | 183 | userInput = int(input("imageID - ")) 184 | find_image = (f"SELECT * FROM Images WHERE imageID = ?") 185 | cursor.execute(find_image,[(userInput)]) 186 | results = cursor.fetchall() 187 | if results: 188 | print("") 189 | delete_query = """DELETE from Images where imageID = ?""" 190 | cursor.execute(delete_query,[(image[0])]) 191 | db.commit() 192 | if os.path.isfile(f"database/images/{image[1]}"): 193 | os.remove(f"database/images/{image[1]}") 194 | if os.path.isfile(f"database/images/{image[1]}"): 195 | print("") 196 | print(f"* Couldn't remove {image[1]} from the saved folder") 197 | 198 | print("") 199 | print(f"* {image[1]} has been deleted") 200 | break 201 | 202 | try: 203 | while True: 204 | try: 205 | print("") 206 | print("---> CONTROL-C TO EXIT <---") 207 | userInput = int(input("What would you like to do:\n1) New Wallpaper\n2) Save Current Wallpaper\n3) View Saved Wallpapers\n4) Delete a Saved Wallpaper\nOption: ")) 208 | 209 | if userInput == 1: 210 | if os.path.isfile(wallpaper_txt): 211 | print("") 212 | print("* Removing pervious wallpaper") 213 | cleanOld(wallpaper_txt) 214 | time.sleep(1) 215 | grabNew(url,export_name) 216 | time.sleep(1) 217 | setNew(export_name,wallpaper_txt) 218 | else: 219 | grabNew(url,export_name) 220 | time.sleep(1) 221 | setNew(export_name,wallpaper_txt) 222 | elif userInput == 2: 223 | saveDesktop(wallpaper_txt) 224 | elif userInput == 3: 225 | viewSaved(wallpaper_txt) 226 | elif userInput == 4: 227 | deleteSaved() 228 | else: 229 | print("") 230 | print("* Input invalid") 231 | except KeyboardInterrupt: 232 | print("") 233 | print("Bye! :)") 234 | sys.exit() 235 | 236 | 237 | except (ValueError) as reason: 238 | print("") 239 | print(f"* Session closed because of {reason}") 240 | -------------------------------------------------------------------------------- /10-19/10/start.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | import time,sys,datetime 3 | import sqlite3 4 | import os.path 5 | 6 | global database 7 | 8 | database = "Database/Authentication.db" 9 | 10 | ################################ 11 | # Authentication Table Set up 12 | # Table - Users 13 | #[+] Creating Table 14 | #userID 15 | #FirstName 16 | #LastName 17 | #Username 18 | #Password 19 | #Email 20 | ################################ 21 | 22 | print("") 23 | print("------- BEHIND THE SCENES -------") 24 | 25 | def register(): 26 | global registerPAN 27 | 28 | # Export Info 29 | #global FirstNameInfo 30 | #global LastNameInfo 31 | #global UsernameInfo 32 | #global PasswordInfo 33 | #global ConfirmPasswordInfo 34 | #global EmailInfo 35 | 36 | # Create a new user 37 | def newUser(): 38 | database = "Database/Authentication.db" 39 | # Grabbing User Info 40 | FirstNameInfo = FirstName.get() 41 | LastNameInfo = LastName.get() 42 | UsernameInfo = Username.get() 43 | PasswordInfo = Password.get() 44 | ConfirmPasswordInfo = ConfirmPassword.get() 45 | EmailInfo = Email.get() 46 | 47 | print(f""" 48 | ------------------------------------------ 49 | First Name - {FirstNameInfo} 50 | Last Name - {LastNameInfo} 51 | Username - {UsernameInfo} 52 | Password - {PasswordInfo} 53 | Confirm Password - {ConfirmPasswordInfo} 54 | Email - {EmailInfo} 55 | ------------------------------------------ 56 | """) 57 | with sqlite3.connect(database) as db: 58 | cursor = db.cursor() 59 | 60 | find_user = ("SELECT * FROM Users WHERE Username = ?") 61 | cursor.execute(find_user,[(UsernameInfo)]) 62 | results = cursor.fetchall() 63 | if results: 64 | print("") 65 | print("* User already exist") 66 | userexistPAN = tk.Tk(className=" Error") 67 | 68 | userexistLBL = tk.Label(userexistPAN,text="User Already Exist") 69 | userexistBTN = tk.Button(userexistPAN,text="Ok", command=userexistPAN.destroy) 70 | userexistLBL.pack() 71 | userexistBTN.pack() 72 | userexistPAN.mainloop() 73 | else: 74 | # Create the user 75 | if PasswordInfo == ConfirmPasswordInfo: 76 | print("") 77 | print(f"* Creating user {UsernameInfo} in the {database}") 78 | cursor.execute(f""" 79 | INSERT INTO Users(FirstName,LastName,Username,Password,Email) 80 | VALUES("{FirstNameInfo}","{LastNameInfo}","{UsernameInfo}","{PasswordInfo}","{EmailInfo}") 81 | """) 82 | db.commit() 83 | 84 | # Checking if user has been added 85 | find_user = ("SELECT * FROM Users WHERE Username = ?") 86 | cursor.execute(find_user,[(UsernameInfo)]) 87 | 88 | results = cursor.fetchall() 89 | if results: 90 | def reset(): 91 | time.sleep(2) 92 | useraddedPAN.destroy() 93 | registerPAN.destroy() 94 | mainFUN() 95 | 96 | useraddedPAN = tk.Tk(className=" Successful") 97 | useraddedLBL = tk.Label(useraddedPAN,text="User has been added") 98 | useraddedBTN = tk.Button(useraddedPAN,text="Awesome!",command=reset) 99 | 100 | useraddedLBL.pack() 101 | useraddedBTN.pack() 102 | 103 | useraddedPAN.mainloop() 104 | else: 105 | # User didn't add? Shouldn't ever happen.. but, you never know right? 106 | # I need to work on my naming conventions. whatisthis + error ... 107 | useraddERR = tk.Tk(className=" Error") 108 | useraddLBL = tk.Label(useraddERR,text=" An error occured") 109 | useraddBTN = tk.Button(useraddERR, text="Ok", command=useraddERR.destroy) 110 | 111 | useraddLBL.pack() 112 | useraddBTN.pack() 113 | 114 | useraddERR.mainloop() 115 | 116 | 117 | 118 | 119 | else: 120 | print("") 121 | print("* Password doesnt match") 122 | passwordERR = tk.Tk(className=" Error") 123 | passwordERRLBL = tk.Label(passwordERR,text="Password Doesn't Match") 124 | passwordERRBTN = tk.Button(passwordERR,text="Ok", command=passwordERR.destroy) 125 | 126 | passwordERRLBL.pack() 127 | passwordERRBTN.pack() 128 | passwordERR.mainloop() 129 | 130 | 131 | 132 | 133 | 134 | # Back to main 135 | def goBack(): 136 | registerPAN.destroy() 137 | mainFUN() 138 | 139 | 140 | 141 | # Kill main window 142 | main.destroy() 143 | 144 | # Main Window 145 | registerPAN = tk.Tk(className=" Register a new user") 146 | registerPAN.resizable(False, False) 147 | 148 | # First Name 149 | FirstNameLBL = tk.Label(registerPAN, text="First Name") 150 | FirstName = tk.Entry(registerPAN) 151 | 152 | # Last Name 153 | LastNameLBL = tk.Label(registerPAN, text="Last Name") 154 | LastName = tk.Entry(registerPAN) 155 | 156 | # Username 157 | UsernameLBL = tk.Label(registerPAN, text="Username") 158 | Username = tk.Entry(registerPAN) 159 | 160 | # Password 161 | PasswordLBL = tk.Label(registerPAN, text="Password") 162 | Password = tk.Entry(registerPAN, show="*") 163 | 164 | # Confirm Password 165 | ConfirmPasswordLBL = tk.Label(registerPAN, text="Confirm Password") 166 | ConfirmPassword = tk.Entry(registerPAN, show="*") 167 | 168 | # Email 169 | EmailLBL = tk.Label(registerPAN, text="Email") 170 | Email = tk.Entry(registerPAN) 171 | 172 | # Action Button 173 | Submit = tk.Button(registerPAN,text="Submit", command=newUser,width="10") 174 | Back = tk.Button(registerPAN,text="Back",command=goBack,width="10") 175 | 176 | # For Spacing 177 | nothing1 = tk.Label(registerPAN,text=" ") 178 | nothing2 = tk.Label(registerPAN,text=" ") 179 | 180 | # Display 181 | FirstNameLBL.grid(row="1",column="1") 182 | FirstName.grid(row="1",column="2") 183 | 184 | LastNameLBL.grid(row="2",column="1") 185 | LastName.grid(row="2",column="2") 186 | 187 | UsernameLBL.grid(row="3",column="1") 188 | Username.grid(row="3",column="2") 189 | 190 | PasswordLBL.grid(row="4",column="1") 191 | Password.grid(row="4",column="2") 192 | 193 | ConfirmPasswordLBL.grid(row="5",column="1") 194 | ConfirmPassword.grid(row="5",column="2") 195 | 196 | EmailLBL.grid(row="6",column="1") 197 | Email.grid(row="6",column="2") 198 | 199 | nothing1.grid(row="7",column="1") 200 | 201 | Back.grid(row="8",column="1") 202 | Submit.grid(row="8",column="2") 203 | 204 | nothing2.grid(row="9",column="1") 205 | 206 | registerPAN.mainloop() 207 | 208 | def login(): 209 | global loginPAN 210 | main.destroy() 211 | 212 | def goBack(): 213 | loginPAN.destroy() 214 | mainFUN() 215 | 216 | def loginEXE(): 217 | global loginPAN 218 | print("") 219 | print("* Checking if user exist") 220 | UsernameInfo = loginUsernameEntry.get() 221 | PasswordInfo = loginPasswordEntry.get() 222 | 223 | def loginSuccess(): 224 | userexistPAN.destroy() 225 | 226 | 227 | with sqlite3.connect(database) as db: 228 | cursor = db.cursor() 229 | 230 | find_user = ("SELECT * FROM Users WHERE username = ? AND password = ?") 231 | cursor.execute(find_user,[(UsernameInfo),(PasswordInfo)]) 232 | results = cursor.fetchall() 233 | 234 | if results: 235 | print("") 236 | print(f"* {UsernameInfo} exist") 237 | time.sleep(2) 238 | userexistPAN = tk.Tk(className=" Successful") 239 | userexistLBL = tk.Label(userexistPAN,text="Login Successful") 240 | userexistBTN = tk.Button(userexistPAN,text="Woo!", command=userexistPAN.destroy) 241 | 242 | userexistLBL.pack() 243 | userexistBTN.pack() 244 | 245 | userexistPAN.mainloop() 246 | else: 247 | print("") 248 | print(f"* {UsernameInfo} doesnt exist") 249 | userexistPAN = tk.Tk(className=" Error") 250 | userexistLBL = tk.Label(userexistPAN,text="Username or Password Invalid") 251 | userexistBTN = tk.Button(userexistPAN,text="Ok",command=loginSuccess) 252 | 253 | userexistLBL.pack() 254 | userexistBTN.pack() 255 | 256 | userexistPAN.mainloop() 257 | 258 | 259 | loginPAN = tk.Tk(className=" Login") 260 | 261 | # Username 262 | loginUsernameLBL = tk.Label(loginPAN,text="Username") 263 | loginUsernameEntry = tk.Entry(loginPAN) 264 | 265 | # Password 266 | loginPasswordLBL = tk.Label(loginPAN,text="Password") 267 | loginPasswordEntry = tk.Entry(loginPAN,show="*") 268 | 269 | # Buttons 270 | loginBTN = tk.Button(loginPAN,text="Login",command=loginEXE,width="10") 271 | backBTN = tk.Button(loginPAN,text="Back",command=goBack, width="10") 272 | 273 | # Spacing 274 | nothing1 = tk.Label(loginPAN,text=" ") 275 | nothing2 = tk.Label(loginPAN,text=" ") 276 | 277 | # Grid 278 | loginUsernameLBL.grid(row="1",column="1") 279 | loginUsernameEntry.grid(row="1",column="2") 280 | 281 | loginPasswordLBL.grid(row="3",column="1") 282 | loginPasswordEntry.grid(row="3",column="2") 283 | 284 | nothing1.grid(row="2",column="1") 285 | backBTN.grid(row="5",column="1") 286 | loginBTN.grid(row="5",column="2") 287 | nothing2.grid(row="4",column="1") 288 | 289 | loginPAN.mainloop() 290 | 291 | 292 | 293 | 294 | 295 | 296 | # def forgotpas(): 297 | 298 | def mainFUN(): 299 | global main 300 | 301 | # Main Window 302 | main = tk.Tk(className=" Main Window") 303 | main.geometry("300x290") 304 | main.resizable(False, False) 305 | 306 | # Buttons 307 | loginBTN = tk.Button(main,text="Login",width="300",height="9",bg="#50c21f",command=login) 308 | registerBTN = tk.Button(main, text="Sign Up",width="300",height="9",bg="#e39d2d",command=register) 309 | 310 | loginBTN.pack() 311 | registerBTN.pack() 312 | 313 | main.mainloop() 314 | 315 | def db_notfound(): 316 | def createDB(): 317 | database = "Database/Authentication.db" 318 | 319 | table = "Users" 320 | tableContent = ["userID","FirstName","LastName","Username","Password","Email"] 321 | 322 | newTable = f""" 323 | CREATE TABLE IF NOT EXISTS {table}( 324 | {tableContent[0]} INTEGER PRIMARY KEY, 325 | {tableContent[1]} VARCHAR(20) NOT NULL, 326 | {tableContent[2]} VARCHAR(20) NOT NULL, 327 | {tableContent[3]} VARCHAR(20) NOT NULL, 328 | {tableContent[4]} VARCHAR(20) NOT NULL, 329 | {tableContent[5]} VARCHAR(50) NOT NULL 330 | ) 331 | """ 332 | 333 | # Creating the DB 334 | database = sqlite3.connect(database) 335 | db = database.cursor() 336 | db.execute(newTable) 337 | 338 | time.sleep(2) 339 | 340 | database = "Database/Authentication.db" 341 | 342 | if os.path.isfile(database): 343 | print("") 344 | print("* Database Created") 345 | dbERR.destroy() 346 | mainFUN() 347 | else: 348 | print("") 349 | 350 | 351 | 352 | def cancel(): 353 | dbERR.destroy() 354 | 355 | global dbERR 356 | 357 | dbERR = tk.Tk(className=" Error - Database Missing") 358 | 359 | dbERRLBL = tk.Label(dbERR,text="Database Missing - Would you like to create a new one?") 360 | yesBTN = tk.Button(dbERR, text="Yes",command=createDB) 361 | noBTN = tk.Button(dbERR, text="No",command=cancel) 362 | 363 | dbERRLBL.grid(row="0",column="0") 364 | yesBTN.grid(row="2",column="1") 365 | noBTN.grid(row="2",column="2") 366 | 367 | dbERR.mainloop() 368 | 369 | if os.path.isfile(database): 370 | mainFUN() 371 | else: 372 | db_notfound() -------------------------------------------------------------------------------- /10-19/11/start.py: -------------------------------------------------------------------------------- 1 | import tkinter as tk 2 | import time,sys,datetime 3 | import sqlite3 4 | import os.path 5 | import random 6 | import smtplib as mail 7 | 8 | global database 9 | 10 | database = "Database/Authentication.db" 11 | 12 | ################################ 13 | # Authentication Table Set up 14 | # Table - Users 15 | #[+] Creating Table 16 | #userID 17 | #FirstName 18 | #LastName 19 | #Username 20 | #Password 21 | #Email 22 | ################################ 23 | 24 | print("") 25 | print("------- BEHIND THE SCENES -------") 26 | 27 | def register(): 28 | global registerPAN 29 | 30 | # Export Info 31 | #global FirstNameInfo 32 | #global LastNameInfo 33 | #global UsernameInfo 34 | #global PasswordInfo 35 | #global ConfirmPasswordInfo 36 | #global EmailInfo 37 | 38 | # Create a new user 39 | def newUser(): 40 | database = "Database/Authentication.db" 41 | # Grabbing User Info 42 | FirstNameInfo = FirstName.get() 43 | LastNameInfo = LastName.get() 44 | UsernameInfo = Username.get() 45 | PasswordInfo = Password.get() 46 | ConfirmPasswordInfo = ConfirmPassword.get() 47 | EmailInfo = Email.get() 48 | 49 | print(f""" 50 | ------------------------------------------ 51 | First Name - {FirstNameInfo} 52 | Last Name - {LastNameInfo} 53 | Username - {UsernameInfo} 54 | Password - {PasswordInfo} 55 | Confirm Password - {ConfirmPasswordInfo} 56 | Email - {EmailInfo} 57 | ------------------------------------------ 58 | """) 59 | with sqlite3.connect(database) as db: 60 | cursor = db.cursor() 61 | 62 | find_user = ("SELECT * FROM Users WHERE Username = ?") 63 | cursor.execute(find_user,[(UsernameInfo)]) 64 | results = cursor.fetchall() 65 | if results: 66 | print("") 67 | print("* User already exist") 68 | userexistPAN = tk.Tk(className=" Error") 69 | 70 | userexistLBL = tk.Label(userexistPAN,text="User Already Exist") 71 | userexistBTN = tk.Button(userexistPAN,text="Ok", command=userexistPAN.destroy) 72 | userexistLBL.pack() 73 | userexistBTN.pack() 74 | userexistPAN.mainloop() 75 | else: 76 | # Create the user 77 | if PasswordInfo == ConfirmPasswordInfo: 78 | print("") 79 | print(f"* Creating user {UsernameInfo} in the {database}") 80 | cursor.execute(f""" 81 | INSERT INTO Users(FirstName,LastName,Username,Password,Email) 82 | VALUES("{FirstNameInfo}","{LastNameInfo}","{UsernameInfo}","{PasswordInfo}","{EmailInfo}") 83 | """) 84 | db.commit() 85 | 86 | # Checking if user has been added 87 | find_user = ("SELECT * FROM Users WHERE Username = ?") 88 | cursor.execute(find_user,[(UsernameInfo)]) 89 | 90 | results = cursor.fetchall() 91 | if results: 92 | def reset(): 93 | time.sleep(2) 94 | useraddedPAN.destroy() 95 | registerPAN.destroy() 96 | mainFUN() 97 | 98 | useraddedPAN = tk.Tk(className=" Successful") 99 | useraddedLBL = tk.Label(useraddedPAN,text="User has been added") 100 | useraddedBTN = tk.Button(useraddedPAN,text="Awesome!",command=reset) 101 | 102 | useraddedLBL.pack() 103 | useraddedBTN.pack() 104 | 105 | useraddedPAN.mainloop() 106 | else: 107 | # User didn't add? Shouldn't ever happen.. but, you never know right? 108 | # I need to work on my naming conventions. whatisthis + error ... 109 | useraddERR = tk.Tk(className=" Error") 110 | useraddLBL = tk.Label(useraddERR,text=" An error occured") 111 | useraddBTN = tk.Button(useraddERR, text="Ok", command=useraddERR.destroy) 112 | 113 | useraddLBL.pack() 114 | useraddBTN.pack() 115 | 116 | useraddERR.mainloop() 117 | 118 | 119 | 120 | 121 | else: 122 | print("") 123 | print("* Password doesnt match") 124 | passwordERR = tk.Tk(className=" Error") 125 | passwordERRLBL = tk.Label(passwordERR,text="Password Doesn't Match") 126 | passwordERRBTN = tk.Button(passwordERR,text="Ok", command=passwordERR.destroy) 127 | 128 | passwordERRLBL.pack() 129 | passwordERRBTN.pack() 130 | passwordERR.mainloop() 131 | 132 | 133 | 134 | 135 | 136 | # Back to main 137 | def goBack(): 138 | registerPAN.destroy() 139 | mainFUN() 140 | 141 | 142 | 143 | # Kill main window 144 | main.destroy() 145 | 146 | # Main Window 147 | registerPAN = tk.Tk(className=" Register a new user") 148 | registerPAN.resizable(False, False) 149 | 150 | # First Name 151 | FirstNameLBL = tk.Label(registerPAN, text="First Name") 152 | FirstName = tk.Entry(registerPAN) 153 | 154 | # Last Name 155 | LastNameLBL = tk.Label(registerPAN, text="Last Name") 156 | LastName = tk.Entry(registerPAN) 157 | 158 | # Username 159 | UsernameLBL = tk.Label(registerPAN, text="Username") 160 | Username = tk.Entry(registerPAN) 161 | 162 | # Password 163 | PasswordLBL = tk.Label(registerPAN, text="Password") 164 | Password = tk.Entry(registerPAN, show="*") 165 | 166 | # Confirm Password 167 | ConfirmPasswordLBL = tk.Label(registerPAN, text="Confirm Password") 168 | ConfirmPassword = tk.Entry(registerPAN, show="*") 169 | 170 | # Email 171 | EmailLBL = tk.Label(registerPAN, text="Email") 172 | Email = tk.Entry(registerPAN) 173 | 174 | # Action Button 175 | Submit = tk.Button(registerPAN,text="Submit", command=newUser,width="10") 176 | Back = tk.Button(registerPAN,text="Back",command=goBack,width="10") 177 | 178 | # For Spacing 179 | nothing1 = tk.Label(registerPAN,text=" ") 180 | nothing2 = tk.Label(registerPAN,text=" ") 181 | 182 | # Display 183 | FirstNameLBL.grid(row="1",column="1") 184 | FirstName.grid(row="1",column="2") 185 | 186 | LastNameLBL.grid(row="2",column="1") 187 | LastName.grid(row="2",column="2") 188 | 189 | UsernameLBL.grid(row="3",column="1") 190 | Username.grid(row="3",column="2") 191 | 192 | PasswordLBL.grid(row="4",column="1") 193 | Password.grid(row="4",column="2") 194 | 195 | ConfirmPasswordLBL.grid(row="5",column="1") 196 | ConfirmPassword.grid(row="5",column="2") 197 | 198 | EmailLBL.grid(row="6",column="1") 199 | Email.grid(row="6",column="2") 200 | 201 | nothing1.grid(row="7",column="1") 202 | 203 | Back.grid(row="8",column="1") 204 | Submit.grid(row="8",column="2") 205 | 206 | nothing2.grid(row="9",column="1") 207 | 208 | registerPAN.mainloop() 209 | 210 | def login(): 211 | global loginPAN 212 | main.destroy() 213 | 214 | def goBack(): 215 | loginPAN.destroy() 216 | mainFUN() 217 | 218 | def loginEXE(): 219 | global loginPAN 220 | print("") 221 | print("* Checking if user exist") 222 | UsernameInfo = loginUsernameEntry.get() 223 | PasswordInfo = loginPasswordEntry.get() 224 | 225 | def loginSuccess(): 226 | userexistPAN.destroy() 227 | 228 | 229 | with sqlite3.connect(database) as db: 230 | cursor = db.cursor() 231 | 232 | find_user = ("SELECT * FROM Users WHERE username = ? AND password = ?") 233 | cursor.execute(find_user,[(UsernameInfo),(PasswordInfo)]) 234 | results = cursor.fetchall() 235 | 236 | if results: 237 | print("") 238 | print(f"* {UsernameInfo} exist") 239 | time.sleep(2) 240 | userexistPAN = tk.Tk(className=" Successful") 241 | userexistLBL = tk.Label(userexistPAN,text="Login Successful") 242 | userexistBTN = tk.Button(userexistPAN,text="Woo!", command=userexistPAN.destroy) 243 | 244 | userexistLBL.pack() 245 | userexistBTN.pack() 246 | 247 | userexistPAN.mainloop() 248 | else: 249 | print("") 250 | print(f"* {UsernameInfo} doesnt exist") 251 | userexistPAN = tk.Tk(className=" Error") 252 | userexistLBL = tk.Label(userexistPAN,text="Username or Password Invalid") 253 | userexistBTN = tk.Button(userexistPAN,text="Ok",command=loginSuccess) 254 | 255 | userexistLBL.pack() 256 | userexistBTN.pack() 257 | 258 | userexistPAN.mainloop() 259 | 260 | 261 | loginPAN = tk.Tk(className=" Login") 262 | 263 | # Username 264 | loginUsernameLBL = tk.Label(loginPAN,text="Username") 265 | loginUsernameEntry = tk.Entry(loginPAN) 266 | 267 | # Password 268 | loginPasswordLBL = tk.Label(loginPAN,text="Password") 269 | loginPasswordEntry = tk.Entry(loginPAN,show="*") 270 | 271 | # Buttons 272 | loginBTN = tk.Button(loginPAN,text="Login",command=loginEXE,width="10") 273 | backBTN = tk.Button(loginPAN,text="Back",command=goBack, width="10") 274 | 275 | # Spacing 276 | forgotpassBTN = tk.Button(loginPAN,text="Forgot Password",command=forgotpass,fg="Blue",highlightthickness = 0, bd = 0) 277 | nothing1 = tk.Label(loginPAN,text=" ") 278 | 279 | # Grid 280 | loginUsernameLBL.grid(row="1",column="1") 281 | loginUsernameEntry.grid(row="1",column="2") 282 | 283 | loginPasswordLBL.grid(row="3",column="1") 284 | loginPasswordEntry.grid(row="3",column="2") 285 | 286 | nothing1.grid(row="2",column="1") 287 | backBTN.grid(row="5",column="1") 288 | loginBTN.grid(row="5",column="2") 289 | forgotpassBTN.grid(row="4",column="2") 290 | 291 | loginPAN.mainloop() 292 | 293 | 294 | 295 | 296 | global forgotpass 297 | 298 | def forgotpass(): 299 | try: 300 | server = mail.SMTP('smtp.gmail.com', 587) 301 | print("") 302 | print(f"* {server.ehlo()}") 303 | print("") 304 | print(f"* {server.starttls()}") 305 | except: 306 | print("") 307 | print("* Cannot establish connection to the SMTP server") 308 | sys.exit() 309 | 310 | 311 | def newPass(): 312 | forgotpassPAN.destroy() 313 | 314 | # Update table with that user password 315 | pinInfo = pinEntry.get() 316 | 317 | if randomPIN == pinInfo: 318 | pinPAN.destroy() 319 | def changepassSQL(): 320 | password = changepassEntry1.get() 321 | confirmpassword = changepassEntry2.get() 322 | 323 | 324 | if password == confirmpassword: 325 | print("") 326 | print("* Password Match") 327 | with sqlite3.connect(database) as db: 328 | cursor = db.cursor() 329 | cursor.execute('''UPDATE Users SET Password = ? WHERE Email = ?''', (password, User_Email)) 330 | db.commit() 331 | time.sleep(2) 332 | print("") 333 | print("* Password has been changed") 334 | 335 | def clean(): 336 | passPAN.destroy() 337 | changepassPAN.destroy() 338 | 339 | passPAN = tk.Tk(className=" Password Changed") 340 | passLBL = tk.Label(passPAN, text="Password has been changed") 341 | passBTN = tk.Button(passPAN,text="Ok",command=clean) 342 | 343 | passLBL.pack() 344 | passBTN.pack() 345 | passPAN.mainloop() 346 | else: 347 | print("") 348 | print("* Password Doesn't Match") 349 | 350 | 351 | print("") 352 | print(f"* {randomPIN} Accepted") 353 | changepassPAN = tk.Tk(className=" Change Password") 354 | #changepassLBL = tk.Label(changepassPAN,text="Change your password") 355 | changepassBTN = tk.Button(changepassPAN,text="Apply", command=changepassSQL) 356 | 357 | changepassLBL1 = tk.Label(changepassPAN, text="Password") 358 | changepassLBL2 = tk.Label(changepassPAN, text="Confirm Password") 359 | 360 | changepassEntry1 = tk.Entry(changepassPAN, show="*") 361 | changepassEntry2 = tk.Entry(changepassPAN, show="*") 362 | 363 | changepassLBL1.grid(row="1", column="1") 364 | changepassEntry1.grid(row="1",column="2") 365 | 366 | changepassLBL2.grid(row="2",column="1") 367 | changepassEntry2.grid(row="2",column="2") 368 | 369 | changepassBTN.grid(row="3",column="2") 370 | 371 | changepassPAN.mainloop() 372 | 373 | else: 374 | print("") 375 | print(f"* {pinInfo} Incorrect Pin") 376 | errPAN = tk.Tk(className=" Error") 377 | errLBL = tk.Label(errPAN, text="Incorrect Pin") 378 | errBTN = tk.Button(errPAN,text="Ok",command=errPAN.destroy) 379 | 380 | errLBL.pack() 381 | errBTN.pack() 382 | errPAN.mainloop() 383 | 384 | 385 | def sendEmail(): 386 | # Check if email is connected with a account that exist 387 | # Then create a random digit to send to that email 388 | 389 | 390 | with sqlite3.connect(database) as db: 391 | cursor = db.cursor() 392 | 393 | global User_Email 394 | User_Email = forgotpassEntry.get() 395 | find_email = ("SELECT * FROM Users WHERE Email = ?") 396 | cursor.execute(find_email,[(User_Email)]) 397 | results = cursor.fetchall() 398 | 399 | if results: 400 | gmail_user = "#" 401 | gmail_password = "#" 402 | try: 403 | global randomPIN 404 | randomPIN = f"{random.randint(100,999)} {random.randint(100,999)}" 405 | sent_from = "#" 406 | to = User_Email 407 | subject = "Password Reset" 408 | body = f"Please use the following code to verify: {randomPIN}" 409 | 410 | email_text = """\ 411 | From: %s 412 | To: %s 413 | Subject: %s 414 | 415 | %s 416 | """ % (sent_from, ", ".join(to), subject, body) 417 | 418 | 419 | server = mail.SMTP_SSL('smtp.gmail.com', 465) 420 | print("") 421 | print(f"* {server.ehlo()}") 422 | print("") 423 | print(f"* {server.login(gmail_user,gmail_password)}") 424 | server.sendmail(sent_from, to, email_text) 425 | print("") 426 | print(f"* Email sent to {User_Email}") 427 | 428 | # Pin Entry 429 | global pinPAN 430 | global pinEntry 431 | pinPAN = tk.Tk(className=" Email Pin") 432 | pinLBL = tk.Label(pinPAN,text="Enter Pin from Email") 433 | pinEntry = tk.Entry(pinPAN) 434 | pinBTN = tk.Button(pinPAN, text="Reset",command=newPass) 435 | 436 | pinLBL.pack() 437 | pinEntry.pack() 438 | pinBTN.pack() 439 | pinPAN.mainloop() 440 | 441 | except: 442 | print("") 443 | print("* An Error Occured") 444 | else: 445 | errPAN = tk.Tk(className=" Error") 446 | errLBL = tk.Label(errPAN, text="Email Doesn't Exist") 447 | errBTN = tk.Button(errPAN,text="Ok", command=errPAN.destroy) 448 | errLBL.pack() 449 | errBTN.pack() 450 | errPAN.mainloop() 451 | 452 | 453 | 454 | 455 | 456 | 457 | forgotpassPAN = tk.Tk(className=" Forgot Password") 458 | forgotpassLBL = tk.Label(forgotpassPAN,text=" Email") 459 | forgotpassEntry = tk.Entry(forgotpassPAN) 460 | forgotpassBTN = tk.Button(forgotpassPAN,text="Submit",command=sendEmail) 461 | 462 | forgotpassLBL.grid(row="1",column="1") 463 | forgotpassEntry.grid(row="1",column="2") 464 | forgotpassBTN.grid(row="2",column="2") 465 | 466 | 467 | 468 | forgotpassPAN.mainloop() 469 | 470 | 471 | def mainFUN(): 472 | global main 473 | 474 | # Main Window 475 | main = tk.Tk(className=" Main Window") 476 | main.geometry("300x290") 477 | main.resizable(False, False) 478 | 479 | # Buttons 480 | loginBTN = tk.Button(main,text="Login",width="300",height="9",bg="#50c21f",command=login) 481 | registerBTN = tk.Button(main, text="Sign Up",width="300",height="9",bg="#e39d2d",command=register) 482 | 483 | loginBTN.pack() 484 | registerBTN.pack() 485 | 486 | main.mainloop() 487 | 488 | def db_notfound(): 489 | def createDB(): 490 | database = "Database/Authentication.db" 491 | 492 | table = "Users" 493 | tableContent = ["userID","FirstName","LastName","Username","Password","Email"] 494 | 495 | newTable = f""" 496 | CREATE TABLE IF NOT EXISTS {table}( 497 | {tableContent[0]} INTEGER PRIMARY KEY, 498 | {tableContent[1]} VARCHAR(20) NOT NULL, 499 | {tableContent[2]} VARCHAR(20) NOT NULL, 500 | {tableContent[3]} VARCHAR(20) NOT NULL, 501 | {tableContent[4]} VARCHAR(20) NOT NULL, 502 | {tableContent[5]} VARCHAR(50) NOT NULL 503 | ) 504 | """ 505 | 506 | # Creating the DB 507 | database = sqlite3.connect(database) 508 | db = database.cursor() 509 | db.execute(newTable) 510 | 511 | time.sleep(2) 512 | 513 | database = "Database/Authentication.db" 514 | 515 | if os.path.isfile(database): 516 | print("") 517 | print("* Database Created") 518 | dbERR.destroy() 519 | mainFUN() 520 | else: 521 | print("") 522 | 523 | 524 | 525 | def cancel(): 526 | dbERR.destroy() 527 | 528 | global dbERR 529 | 530 | dbERR = tk.Tk(className=" Error - Database Missing") 531 | 532 | dbERRLBL = tk.Label(dbERR,text="Database Missing - Would you like to create a new one?") 533 | yesBTN = tk.Button(dbERR, text="Yes",command=createDB) 534 | noBTN = tk.Button(dbERR, text="No",command=cancel) 535 | 536 | dbERRLBL.grid(row="0",column="0") 537 | yesBTN.grid(row="2",column="1") 538 | noBTN.grid(row="2",column="2") 539 | 540 | dbERR.mainloop() 541 | 542 | if os.path.isfile(database): 543 | mainFUN() 544 | else: 545 | db_notfound() -------------------------------------------------------------------------------- /10-19/15/data/student/student-mat.csv: -------------------------------------------------------------------------------- 1 | school;sex;age;address;famsize;Pstatus;Medu;Fedu;Mjob;Fjob;reason;guardian;traveltime;studytime;failures;schoolsup;famsup;paid;activities;nursery;higher;internet;romantic;famrel;freetime;goout;Dalc;Walc;health;absences;G1;G2;G3 2 | "GP";"F";18;"U";"GT3";"A";4;4;"at_home";"teacher";"course";"mother";2;2;0;"yes";"no";"no";"no";"yes";"yes";"no";"no";4;3;4;1;1;3;6;"5";"6";6 3 | "GP";"F";17;"U";"GT3";"T";1;1;"at_home";"other";"course";"father";1;2;0;"no";"yes";"no";"no";"no";"yes";"yes";"no";5;3;3;1;1;3;4;"5";"5";6 4 | "GP";"F";15;"U";"LE3";"T";1;1;"at_home";"other";"other";"mother";1;2;3;"yes";"no";"yes";"no";"yes";"yes";"yes";"no";4;3;2;2;3;3;10;"7";"8";10 5 | "GP";"F";15;"U";"GT3";"T";4;2;"health";"services";"home";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";3;2;2;1;1;5;2;"15";"14";15 6 | "GP";"F";16;"U";"GT3";"T";3;3;"other";"other";"home";"father";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";4;3;2;1;2;5;4;"6";"10";10 7 | "GP";"M";16;"U";"LE3";"T";4;3;"services";"other";"reputation";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;4;2;1;2;5;10;"15";"15";15 8 | "GP";"M";16;"U";"LE3";"T";2;2;"other";"other";"home";"mother";1;2;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;4;4;1;1;3;0;"12";"12";11 9 | "GP";"F";17;"U";"GT3";"A";4;4;"other";"teacher";"home";"mother";2;2;0;"yes";"yes";"no";"no";"yes";"yes";"no";"no";4;1;4;1;1;1;6;"6";"5";6 10 | "GP";"M";15;"U";"LE3";"A";3;2;"services";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;2;2;1;1;1;0;"16";"18";19 11 | "GP";"M";15;"U";"GT3";"T";3;4;"other";"other";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;5;1;1;1;5;0;"14";"15";15 12 | "GP";"F";15;"U";"GT3";"T";4;4;"teacher";"health";"reputation";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";3;3;3;1;2;2;0;"10";"8";9 13 | "GP";"F";15;"U";"GT3";"T";2;1;"services";"other";"reputation";"father";3;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;2;2;1;1;4;4;"10";"12";12 14 | "GP";"M";15;"U";"LE3";"T";4;4;"health";"services";"course";"father";1;1;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;1;3;5;2;"14";"14";14 15 | "GP";"M";15;"U";"GT3";"T";4;3;"teacher";"other";"course";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";5;4;3;1;2;3;2;"10";"10";11 16 | "GP";"M";15;"U";"GT3";"A";2;2;"other";"other";"home";"other";1;3;0;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;5;2;1;1;3;0;"14";"16";16 17 | "GP";"F";16;"U";"GT3";"T";4;4;"health";"other";"home";"mother";1;1;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;4;4;1;2;2;4;"14";"14";14 18 | "GP";"F";16;"U";"GT3";"T";4;4;"services";"services";"reputation";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;2;3;1;2;2;6;"13";"14";14 19 | "GP";"F";16;"U";"GT3";"T";3;3;"other";"other";"reputation";"mother";3;2;0;"yes";"yes";"no";"yes";"yes";"yes";"no";"no";5;3;2;1;1;4;4;"8";"10";10 20 | "GP";"M";17;"U";"GT3";"T";3;2;"services";"services";"course";"mother";1;1;3;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;5;5;2;4;5;16;"6";"5";5 21 | "GP";"M";16;"U";"LE3";"T";4;3;"health";"other";"home";"father";1;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";3;1;3;1;3;5;4;"8";"10";10 22 | "GP";"M";15;"U";"GT3";"T";4;3;"teacher";"other";"reputation";"mother";1;2;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;4;1;1;1;1;0;"13";"14";15 23 | "GP";"M";15;"U";"GT3";"T";4;4;"health";"health";"other";"father";1;1;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";5;4;2;1;1;5;0;"12";"15";15 24 | "GP";"M";16;"U";"LE3";"T";4;2;"teacher";"other";"course";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";4;5;1;1;3;5;2;"15";"15";16 25 | "GP";"M";16;"U";"LE3";"T";2;2;"other";"other";"reputation";"mother";2;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;4;4;2;4;5;0;"13";"13";12 26 | "GP";"F";15;"R";"GT3";"T";2;4;"services";"health";"course";"mother";1;3;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;2;1;1;5;2;"10";"9";8 27 | "GP";"F";16;"U";"GT3";"T";2;2;"services";"services";"home";"mother";1;1;2;"no";"yes";"yes";"no";"no";"yes";"yes";"no";1;2;2;1;3;5;14;"6";"9";8 28 | "GP";"M";15;"U";"GT3";"T";2;2;"other";"other";"home";"mother";1;1;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;2;2;1;2;5;2;"12";"12";11 29 | "GP";"M";15;"U";"GT3";"T";4;2;"health";"services";"other";"mother";1;1;0;"no";"no";"yes";"no";"yes";"yes";"yes";"no";2;2;4;2;4;1;4;"15";"16";15 30 | "GP";"M";16;"U";"LE3";"A";3;4;"services";"other";"home";"mother";1;2;0;"yes";"yes";"no";"yes";"yes";"yes";"yes";"no";5;3;3;1;1;5;4;"11";"11";11 31 | "GP";"M";16;"U";"GT3";"T";4;4;"teacher";"teacher";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;4;5;5;5;5;16;"10";"12";11 32 | "GP";"M";15;"U";"GT3";"T";4;4;"health";"services";"home";"mother";1;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";5;4;2;3;4;5;0;"9";"11";12 33 | "GP";"M";15;"U";"GT3";"T";4;4;"services";"services";"reputation";"mother";2;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;1;1;1;5;0;"17";"16";17 34 | "GP";"M";15;"R";"GT3";"T";4;3;"teacher";"at_home";"course";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;5;2;1;1;5;0;"17";"16";16 35 | "GP";"M";15;"U";"LE3";"T";3;3;"other";"other";"course";"mother";1;2;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";5;3;2;1;1;2;0;"8";"10";12 36 | "GP";"M";16;"U";"GT3";"T";3;2;"other";"other";"home";"mother";1;1;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";5;4;3;1;1;5;0;"12";"14";15 37 | "GP";"F";15;"U";"GT3";"T";2;3;"other";"other";"other";"father";2;1;0;"no";"yes";"no";"yes";"yes";"yes";"no";"no";3;5;1;1;1;5;0;"8";"7";6 38 | "GP";"M";15;"U";"LE3";"T";4;3;"teacher";"services";"home";"mother";1;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;4;3;1;1;4;2;"15";"16";18 39 | "GP";"M";16;"R";"GT3";"A";4;4;"other";"teacher";"reputation";"mother";2;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";2;4;3;1;1;5;7;"15";"16";15 40 | "GP";"F";15;"R";"GT3";"T";3;4;"services";"health";"course";"mother";1;3;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;2;1;1;5;2;"12";"12";11 41 | "GP";"F";15;"R";"GT3";"T";2;2;"at_home";"other";"reputation";"mother";1;1;0;"yes";"yes";"yes";"yes";"yes";"yes";"no";"no";4;3;1;1;1;2;8;"14";"13";13 42 | "GP";"F";16;"U";"LE3";"T";2;2;"other";"other";"home";"mother";2;2;1;"no";"yes";"no";"yes";"no";"yes";"yes";"yes";3;3;3;1;2;3;25;"7";"10";11 43 | "GP";"M";15;"U";"LE3";"T";4;4;"teacher";"other";"home";"other";1;1;0;"no";"yes";"no";"no";"no";"yes";"yes";"yes";5;4;3;2;4;5;8;"12";"12";12 44 | "GP";"M";15;"U";"GT3";"T";4;4;"services";"teacher";"course";"father";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;3;1;1;5;2;"19";"18";18 45 | "GP";"M";15;"U";"GT3";"T";2;2;"services";"services";"course";"father";1;1;0;"yes";"yes";"no";"no";"yes";"yes";"yes";"no";5;4;1;1;1;1;0;"8";"8";11 46 | "GP";"F";16;"U";"LE3";"T";2;2;"other";"at_home";"course";"father";2;2;1;"yes";"no";"no";"yes";"yes";"yes";"yes";"no";4;3;3;2;2;5;14;"10";"10";9 47 | "GP";"F";15;"U";"LE3";"A";4;3;"other";"other";"course";"mother";1;2;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"yes";5;2;2;1;1;5;8;"8";"8";6 48 | "GP";"F";16;"U";"LE3";"A";3;3;"other";"services";"home";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";2;3;5;1;4;3;12;"11";"12";11 49 | "GP";"M";16;"U";"GT3";"T";4;3;"health";"services";"reputation";"mother";1;4;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";4;2;2;1;1;2;4;"19";"19";20 50 | "GP";"M";15;"U";"GT3";"T";4;2;"teacher";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";4;3;3;2;2;5;2;"15";"15";14 51 | "GP";"F";15;"U";"GT3";"T";4;4;"services";"teacher";"other";"father";1;2;1;"yes";"yes";"no";"yes";"no";"yes";"yes";"no";4;4;4;1;1;3;2;"7";"7";7 52 | "GP";"F";16;"U";"LE3";"T";2;2;"services";"services";"course";"mother";3;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;2;3;4;2;"12";"13";13 53 | "GP";"F";15;"U";"LE3";"T";4;2;"health";"other";"other";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;1;5;2;"11";"13";13 54 | "GP";"M";15;"U";"LE3";"A";4;2;"health";"health";"other";"father";2;1;1;"no";"no";"no";"no";"yes";"yes";"no";"no";5;5;5;3;4;5;6;"11";"11";10 55 | "GP";"F";15;"U";"GT3";"T";4;4;"services";"services";"course";"mother";1;1;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";3;3;4;2;3;5;0;"8";"10";11 56 | "GP";"F";15;"U";"LE3";"A";3;3;"other";"other";"other";"mother";1;1;0;"no";"no";"yes";"no";"yes";"yes";"yes";"no";5;3;4;4;4;1;6;"10";"13";13 57 | "GP";"F";16;"U";"GT3";"A";2;1;"other";"other";"other";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";5;3;4;1;1;2;8;"8";"9";10 58 | "GP";"F";15;"U";"GT3";"A";4;3;"services";"services";"reputation";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;2;1;1;1;0;"14";"15";15 59 | "GP";"M";15;"U";"GT3";"T";4;4;"teacher";"health";"reputation";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"no";"no";3;2;2;1;1;5;4;"14";"15";15 60 | "GP";"M";15;"U";"LE3";"T";1;2;"other";"at_home";"home";"father";1;2;0;"yes";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;2;1;1;5;2;"9";"10";9 61 | "GP";"F";16;"U";"GT3";"T";4;2;"services";"other";"course";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;2;3;1;1;5;2;"15";"16";16 62 | "GP";"F";16;"R";"GT3";"T";4;4;"health";"teacher";"other";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"no";"no";2;4;4;2;3;4;6;"10";"11";11 63 | "GP";"F";16;"U";"GT3";"T";1;1;"services";"services";"course";"father";4;1;0;"yes";"yes";"no";"yes";"no";"yes";"yes";"yes";5;5;5;5;5;5;6;"10";"8";11 64 | "GP";"F";16;"U";"LE3";"T";1;2;"other";"services";"reputation";"father";1;2;0;"yes";"no";"no";"yes";"yes";"yes";"yes";"no";4;4;3;1;1;1;4;"8";"10";9 65 | "GP";"F";16;"U";"GT3";"T";4;3;"teacher";"health";"home";"mother";1;3;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;4;4;2;4;4;2;"10";"9";9 66 | "GP";"F";15;"U";"LE3";"T";4;3;"services";"services";"reputation";"father";1;2;0;"yes";"no";"no";"yes";"yes";"yes";"yes";"yes";4;4;4;2;4;2;0;"10";"10";10 67 | "GP";"F";16;"U";"LE3";"T";4;3;"teacher";"services";"course";"mother";3;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;4;3;1;2;1;2;"16";"15";15 68 | "GP";"M";15;"U";"GT3";"A";4;4;"other";"services";"reputation";"mother";1;4;0;"no";"yes";"no";"yes";"no";"yes";"yes";"yes";1;3;3;5;5;3;4;"13";"13";12 69 | "GP";"F";16;"U";"GT3";"T";3;1;"services";"other";"course";"mother";1;4;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;2;5;4;"7";"7";6 70 | "GP";"F";15;"R";"LE3";"T";2;2;"health";"services";"reputation";"mother";2;2;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";4;1;3;1;3;4;2;"8";"9";8 71 | "GP";"F";15;"R";"LE3";"T";3;1;"other";"other";"reputation";"father";2;4;0;"no";"yes";"no";"no";"no";"yes";"yes";"no";4;4;2;2;3;3;12;"16";"16";16 72 | "GP";"M";16;"U";"GT3";"T";3;1;"other";"other";"reputation";"father";2;4;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;2;1;1;5;0;"13";"15";15 73 | "GP";"M";15;"U";"GT3";"T";4;2;"other";"other";"course";"mother";1;4;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;3;3;1;1;3;0;"10";"10";10 74 | "GP";"F";15;"R";"GT3";"T";1;1;"other";"other";"reputation";"mother";1;2;2;"yes";"yes";"no";"no";"no";"yes";"yes";"yes";3;3;4;2;4;5;2;"8";"6";5 75 | "GP";"M";16;"U";"GT3";"T";3;1;"other";"other";"reputation";"mother";1;1;0;"no";"no";"no";"yes";"yes";"yes";"no";"no";5;3;2;2;2;5;2;"12";"12";14 76 | "GP";"F";16;"U";"GT3";"T";3;3;"other";"services";"home";"mother";1;2;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;2;4;5;54;"11";"12";11 77 | "GP";"M";15;"U";"GT3";"T";4;3;"teacher";"other";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;2;3;5;6;"9";"9";10 78 | "GP";"M";15;"U";"GT3";"T";4;0;"teacher";"other";"course";"mother";2;4;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";3;4;3;1;1;1;8;"11";"11";10 79 | "GP";"F";16;"U";"GT3";"T";2;2;"other";"other";"reputation";"mother";1;4;0;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";5;2;3;1;3;3;0;"11";"11";11 80 | "GP";"M";17;"U";"GT3";"T";2;1;"other";"other";"home";"mother";2;1;3;"yes";"yes";"no";"yes";"yes";"no";"yes";"no";4;5;1;1;1;3;2;"8";"8";10 81 | "GP";"F";16;"U";"GT3";"T";3;4;"at_home";"other";"course";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";2;4;3;1;2;3;12;"5";"5";5 82 | "GP";"M";15;"U";"GT3";"T";2;3;"other";"services";"course";"father";1;1;0;"yes";"yes";"yes";"yes";"no";"yes";"yes";"yes";3;2;2;1;3;3;2;"10";"12";12 83 | "GP";"M";15;"U";"GT3";"T";2;3;"other";"other";"home";"mother";1;3;0;"yes";"no";"yes";"no";"no";"yes";"yes";"no";5;3;2;1;2;5;4;"11";"10";11 84 | "GP";"F";15;"U";"LE3";"T";3;2;"services";"other";"reputation";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;4;4;1;1;5;10;"7";"6";6 85 | "GP";"M";15;"U";"LE3";"T";2;2;"services";"services";"home";"mother";2;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";5;3;3;1;3;4;4;"15";"15";15 86 | "GP";"F";15;"U";"GT3";"T";1;1;"other";"other";"home";"father";1;2;0;"no";"yes";"no";"yes";"no";"yes";"yes";"no";4;3;2;2;3;4;2;"9";"10";10 87 | "GP";"F";15;"U";"GT3";"T";4;4;"services";"services";"reputation";"father";2;2;2;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";4;4;4;2;3;5;6;"7";"9";8 88 | "GP";"F";16;"U";"LE3";"T";2;2;"at_home";"other";"course";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"no";"no";4;3;4;1;2;2;4;"8";"7";6 89 | "GP";"F";15;"U";"GT3";"T";4;2;"other";"other";"reputation";"mother";1;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;3;3;1;3;1;4;"13";"14";14 90 | "GP";"M";16;"U";"GT3";"T";2;2;"services";"other";"reputation";"father";2;2;1;"no";"no";"yes";"yes";"no";"yes";"yes";"no";4;4;2;1;1;3;12;"11";"10";10 91 | "GP";"M";16;"U";"LE3";"A";4;4;"teacher";"health";"reputation";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"no";"no";4;1;3;3;5;5;18;"8";"6";7 92 | "GP";"F";16;"U";"GT3";"T";3;3;"other";"other";"home";"mother";1;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;3;3;1;3;4;0;"7";"7";8 93 | "GP";"F";15;"U";"GT3";"T";4;3;"services";"other";"reputation";"mother";1;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";4;5;5;1;3;1;4;"16";"17";18 94 | "GP";"F";16;"U";"LE3";"T";3;1;"other";"other";"home";"father";1;2;0;"yes";"yes";"no";"no";"yes";"yes";"no";"no";3;3;3;2;3;2;4;"7";"6";6 95 | "GP";"F";16;"U";"GT3";"T";4;2;"teacher";"services";"home";"mother";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;3;3;1;1;1;0;"11";"10";10 96 | "GP";"M";15;"U";"LE3";"T";2;2;"services";"health";"reputation";"mother";1;4;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;4;1;1;4;6;"11";"13";14 97 | "GP";"F";15;"R";"GT3";"T";1;1;"at_home";"other";"home";"mother";2;4;1;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;1;2;1;1;1;2;"7";"10";10 98 | "GP";"M";16;"R";"GT3";"T";4;3;"services";"other";"reputation";"mother";2;1;0;"yes";"yes";"no";"yes";"no";"yes";"yes";"no";3;3;3;1;1;4;2;"11";"15";15 99 | "GP";"F";16;"U";"GT3";"T";2;1;"other";"other";"course";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"no";"yes";4;3;5;1;1;5;2;"8";"9";10 100 | "GP";"F";16;"U";"GT3";"T";4;4;"other";"other";"reputation";"mother";1;1;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";5;3;4;1;2;1;6;"11";"14";14 101 | "GP";"F";16;"U";"GT3";"T";4;3;"other";"at_home";"course";"mother";1;3;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";5;3;5;1;1;3;0;"7";"9";8 102 | "GP";"M";16;"U";"GT3";"T";4;4;"services";"services";"other";"mother";1;1;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;5;5;5;5;4;14;"7";"7";5 103 | "GP";"M";16;"U";"GT3";"T";4;4;"services";"teacher";"other";"father";1;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;4;3;1;1;4;0;"16";"17";17 104 | "GP";"M";15;"U";"GT3";"T";4;4;"services";"other";"course";"mother";1;1;0;"no";"yes";"no";"yes";"no";"yes";"yes";"no";5;3;3;1;1;5;4;"10";"13";14 105 | "GP";"F";15;"U";"GT3";"T";3;2;"services";"other";"home";"mother";2;2;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;5;1;1;2;26;"7";"6";6 106 | "GP";"M";15;"U";"GT3";"A";3;4;"services";"other";"course";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;4;4;1;1;1;0;"16";"18";18 107 | "GP";"F";15;"U";"GT3";"A";3;3;"other";"health";"reputation";"father";1;4;0;"yes";"no";"no";"no";"yes";"yes";"no";"no";4;3;3;1;1;4;10;"10";"11";11 108 | "GP";"F";15;"U";"GT3";"T";2;2;"other";"other";"course";"mother";1;4;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";5;1;2;1;1;3;8;"7";"8";8 109 | "GP";"M";16;"U";"GT3";"T";3;3;"services";"other";"home";"father";1;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;3;3;1;1;5;2;"16";"18";18 110 | "GP";"M";15;"R";"GT3";"T";4;4;"other";"other";"home";"father";4;4;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";1;3;5;3;5;1;6;"10";"13";13 111 | "GP";"F";16;"U";"LE3";"T";4;4;"health";"health";"other";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";5;4;5;1;1;4;4;"14";"15";16 112 | "GP";"M";15;"U";"LE3";"A";4;4;"teacher";"teacher";"course";"mother";1;1;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;5;3;1;1;4;6;"18";"19";19 113 | "GP";"F";16;"R";"GT3";"T";3;3;"services";"other";"reputation";"father";1;3;1;"yes";"yes";"no";"yes";"yes";"yes";"yes";"no";4;1;2;1;1;2;0;"7";"10";10 114 | "GP";"F";16;"U";"GT3";"T";2;2;"at_home";"other";"home";"mother";1;2;1;"yes";"no";"no";"yes";"yes";"yes";"yes";"no";3;1;2;1;1;5;6;"10";"13";13 115 | "GP";"M";15;"U";"LE3";"T";4;2;"teacher";"other";"course";"mother";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;5;2;1;1;3;10;"18";"19";19 116 | "GP";"M";15;"R";"GT3";"T";2;1;"health";"services";"reputation";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";5;4;2;1;1;5;8;"9";"9";9 117 | "GP";"M";16;"U";"GT3";"T";4;4;"teacher";"teacher";"course";"father";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;4;4;1;2;5;2;"15";"15";16 118 | "GP";"M";15;"U";"GT3";"T";4;4;"other";"teacher";"reputation";"father";2;2;0;"no";"yes";"no";"yes";"yes";"yes";"no";"no";4;4;3;1;1;2;2;"11";"13";14 119 | "GP";"M";16;"U";"GT3";"T";3;3;"other";"services";"home";"father";2;1;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;4;2;1;1;5;0;"13";"14";13 120 | "GP";"M";17;"R";"GT3";"T";1;3;"other";"other";"course";"father";3;2;1;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";5;2;4;1;4;5;20;"9";"7";8 121 | "GP";"M";15;"U";"GT3";"T";3;4;"other";"other";"reputation";"father";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;4;3;1;2;4;6;"14";"13";13 122 | "GP";"F";15;"U";"GT3";"T";1;2;"at_home";"services";"course";"mother";1;2;0;"no";"no";"no";"no";"no";"yes";"yes";"no";3;2;3;1;2;1;2;"16";"15";15 123 | "GP";"M";15;"U";"GT3";"T";2;2;"services";"services";"home";"father";1;4;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;5;4;1;2;5;6;"16";"14";15 124 | "GP";"F";16;"U";"LE3";"T";2;4;"other";"health";"course";"father";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;2;2;1;2;5;2;"13";"13";13 125 | "GP";"M";16;"U";"GT3";"T";4;4;"health";"other";"course";"mother";1;1;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";3;4;4;1;4;5;18;"14";"11";13 126 | "GP";"F";16;"U";"GT3";"T";2;2;"other";"other";"home";"mother";1;2;0;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";5;4;4;1;1;5;0;"8";"7";8 127 | "GP";"M";15;"U";"GT3";"T";3;4;"services";"services";"home";"father";1;1;0;"yes";"no";"no";"no";"yes";"yes";"yes";"no";5;5;5;3;2;5;0;"13";"13";12 128 | "GP";"F";15;"U";"LE3";"A";3;4;"other";"other";"home";"mother";1;2;0;"yes";"no";"no";"yes";"yes";"yes";"yes";"yes";5;3;2;1;1;1;0;"7";"10";11 129 | "GP";"F";19;"U";"GT3";"T";0;1;"at_home";"other";"course";"other";1;2;3;"no";"yes";"no";"no";"no";"no";"no";"no";3;4;2;1;1;5;2;"7";"8";9 130 | "GP";"M";18;"R";"GT3";"T";2;2;"services";"other";"reputation";"mother";1;1;2;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";3;3;3;1;2;4;0;"7";"4";0 131 | "GP";"M";16;"R";"GT3";"T";4;4;"teacher";"teacher";"course";"mother";1;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";3;5;5;2;5;4;8;"18";"18";18 132 | "GP";"F";15;"R";"GT3";"T";3;4;"services";"teacher";"course";"father";2;3;2;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;2;2;2;2;5;0;"12";"0";0 133 | "GP";"F";15;"U";"GT3";"T";1;1;"at_home";"other";"course";"mother";3;1;0;"no";"yes";"no";"yes";"no";"yes";"yes";"yes";4;3;3;1;2;4;0;"8";"0";0 134 | "GP";"F";17;"U";"LE3";"T";2;2;"other";"other";"course";"father";1;1;0;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";3;4;4;1;3;5;12;"10";"13";12 135 | "GP";"F";16;"U";"GT3";"A";3;4;"services";"other";"course";"father";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;2;1;1;4;5;16;"12";"11";11 136 | "GP";"M";15;"R";"GT3";"T";3;4;"at_home";"teacher";"course";"mother";4;2;0;"no";"yes";"no";"no";"yes";"yes";"no";"yes";5;3;3;1;1;5;0;"9";"0";0 137 | "GP";"F";15;"U";"GT3";"T";4;4;"services";"at_home";"course";"mother";1;3;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;3;3;1;1;5;0;"11";"0";0 138 | "GP";"M";17;"R";"GT3";"T";3;4;"at_home";"other";"course";"mother";3;2;0;"no";"no";"no";"no";"yes";"yes";"no";"no";5;4;5;2;4;5;0;"10";"0";0 139 | "GP";"F";16;"U";"GT3";"A";3;3;"other";"other";"course";"other";2;1;2;"no";"yes";"no";"yes";"no";"yes";"yes";"yes";4;3;2;1;1;5;0;"4";"0";0 140 | "GP";"M";16;"U";"LE3";"T";1;1;"services";"other";"course";"mother";1;2;1;"no";"no";"no";"no";"yes";"yes";"no";"yes";4;4;4;1;3;5;0;"14";"12";12 141 | "GP";"F";15;"U";"GT3";"T";4;4;"teacher";"teacher";"course";"mother";2;1;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";4;3;2;1;1;5;0;"16";"16";15 142 | "GP";"M";15;"U";"GT3";"T";4;3;"teacher";"services";"course";"father";2;4;0;"yes";"yes";"no";"no";"yes";"yes";"yes";"no";2;2;2;1;1;3;0;"7";"9";0 143 | "GP";"M";16;"U";"LE3";"T";2;2;"services";"services";"reputation";"father";2;1;2;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";2;3;3;2;2;2;8;"9";"9";9 144 | "GP";"F";15;"U";"GT3";"T";4;4;"teacher";"services";"course";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;2;2;1;1;5;2;"9";"11";11 145 | "GP";"F";16;"U";"LE3";"T";1;1;"at_home";"at_home";"course";"mother";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;4;4;3;3;1;2;"14";"14";13 146 | "GP";"M";17;"U";"GT3";"T";2;1;"other";"other";"home";"mother";1;1;3;"no";"yes";"no";"no";"yes";"yes";"yes";"no";5;4;5;1;2;5;0;"5";"0";0 147 | "GP";"F";15;"U";"GT3";"T";1;1;"other";"services";"course";"father";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;4;2;1;2;5;0;"8";"11";11 148 | "GP";"F";15;"U";"GT3";"T";3;2;"health";"services";"home";"father";1;2;3;"no";"yes";"no";"no";"yes";"yes";"yes";"no";3;3;2;1;1;3;0;"6";"7";0 149 | "GP";"F";15;"U";"GT3";"T";1;2;"at_home";"other";"course";"mother";1;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";4;3;2;1;1;5;2;"10";"11";11 150 | "GP";"M";16;"U";"GT3";"T";4;4;"teacher";"teacher";"course";"mother";1;1;0;"no";"yes";"no";"no";"yes";"no";"yes";"yes";3;3;2;2;1;5;0;"7";"6";0 151 | "GP";"M";15;"U";"LE3";"A";2;1;"services";"other";"course";"mother";4;1;3;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;5;5;2;5;5;0;"8";"9";10 152 | "GP";"M";18;"U";"LE3";"T";1;1;"other";"other";"course";"mother";1;1;3;"no";"no";"no";"no";"yes";"no";"yes";"yes";2;3;5;2;5;4;0;"6";"5";0 153 | "GP";"M";16;"U";"LE3";"T";2;1;"at_home";"other";"course";"mother";1;1;1;"no";"no";"no";"yes";"yes";"yes";"no";"yes";4;4;4;3;5;5;6;"12";"13";14 154 | "GP";"F";15;"R";"GT3";"T";3;3;"services";"services";"reputation";"other";2;3;2;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;2;1;2;3;3;8;"10";"10";10 155 | "GP";"M";19;"U";"GT3";"T";3;2;"services";"at_home";"home";"mother";1;1;3;"no";"yes";"no";"no";"yes";"no";"yes";"yes";4;5;4;1;1;4;0;"5";"0";0 156 | "GP";"F";17;"U";"GT3";"T";4;4;"other";"teacher";"course";"mother";1;1;0;"yes";"yes";"no";"no";"yes";"yes";"no";"yes";4;2;1;1;1;4;0;"11";"11";12 157 | "GP";"M";15;"R";"GT3";"T";2;3;"at_home";"services";"course";"mother";1;2;0;"yes";"no";"yes";"yes";"yes";"yes";"no";"no";4;4;4;1;1;1;2;"11";"8";8 158 | "GP";"M";17;"R";"LE3";"T";1;2;"other";"other";"reputation";"mother";1;1;0;"no";"no";"no";"no";"yes";"yes";"no";"no";2;2;2;3;3;5;8;"16";"12";13 159 | "GP";"F";18;"R";"GT3";"T";1;1;"at_home";"other";"course";"mother";3;1;3;"no";"yes";"no";"yes";"no";"yes";"no";"no";5;2;5;1;5;4;6;"9";"8";10 160 | "GP";"M";16;"R";"GT3";"T";2;2;"at_home";"other";"course";"mother";3;1;0;"no";"no";"no";"no";"no";"yes";"no";"no";4;2;2;1;2;3;2;"17";"15";15 161 | "GP";"M";16;"U";"GT3";"T";3;3;"other";"services";"course";"father";1;2;1;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;5;5;4;4;5;4;"10";"12";12 162 | "GP";"M";17;"R";"LE3";"T";2;1;"at_home";"other";"course";"mother";2;1;2;"no";"no";"no";"yes";"yes";"no";"yes";"yes";3;3;2;2;2;5;0;"7";"6";0 163 | "GP";"M";15;"R";"GT3";"T";3;2;"other";"other";"course";"mother";2;2;2;"yes";"yes";"no";"no";"yes";"yes";"yes";"yes";4;4;4;1;4;3;6;"5";"9";7 164 | "GP";"M";16;"U";"LE3";"T";1;2;"other";"other";"course";"mother";2;1;1;"no";"no";"no";"yes";"yes";"yes";"no";"no";4;4;4;2;4;5;0;"7";"0";0 165 | "GP";"M";17;"U";"GT3";"T";1;3;"at_home";"services";"course";"father";1;1;0;"no";"no";"no";"no";"yes";"no";"yes";"no";5;3;3;1;4;2;2;"10";"10";10 166 | "GP";"M";17;"R";"LE3";"T";1;1;"other";"services";"course";"mother";4;2;3;"no";"no";"no";"yes";"yes";"no";"no";"yes";5;3;5;1;5;5;0;"5";"8";7 167 | "GP";"M";16;"U";"GT3";"T";3;2;"services";"services";"course";"mother";2;1;1;"no";"yes";"no";"yes";"no";"no";"no";"no";4;5;2;1;1;2;16;"12";"11";12 168 | "GP";"M";16;"U";"GT3";"T";2;2;"other";"other";"course";"father";1;2;0;"no";"no";"no";"no";"yes";"no";"yes";"no";4;3;5;2;4;4;4;"10";"10";10 169 | "GP";"F";16;"U";"GT3";"T";4;2;"health";"services";"home";"father";1;2;0;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";4;2;3;1;1;3;0;"14";"15";16 170 | "GP";"F";16;"U";"GT3";"T";2;2;"other";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";5;1;5;1;1;4;0;"6";"7";0 171 | "GP";"F";16;"U";"GT3";"T";4;4;"health";"health";"reputation";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;4;2;1;1;3;0;"14";"14";14 172 | "GP";"M";16;"U";"GT3";"T";3;4;"other";"other";"course";"father";3;1;2;"no";"yes";"no";"yes";"no";"yes";"yes";"no";3;4;5;2;4;2;0;"6";"5";0 173 | "GP";"M";16;"U";"GT3";"T";1;0;"other";"other";"reputation";"mother";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;3;2;1;1;3;2;"13";"15";16 174 | "GP";"M";17;"U";"LE3";"T";4;4;"teacher";"other";"reputation";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;4;4;1;3;5;0;"13";"11";10 175 | "GP";"F";16;"U";"GT3";"T";1;3;"at_home";"services";"home";"mother";1;2;3;"no";"no";"no";"yes";"no";"yes";"yes";"yes";4;3;5;1;1;3;0;"8";"7";0 176 | "GP";"F";16;"U";"LE3";"T";3;3;"other";"other";"reputation";"mother";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;4;5;1;1;4;4;"10";"11";9 177 | "GP";"M";17;"U";"LE3";"T";4;3;"teacher";"other";"course";"mother";2;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";4;4;4;4;4;4;4;"10";"9";9 178 | "GP";"F";16;"U";"GT3";"T";2;2;"services";"other";"reputation";"mother";2;2;0;"no";"no";"yes";"yes";"no";"yes";"yes";"no";3;4;4;1;4;5;2;"13";"13";11 179 | "GP";"M";17;"U";"GT3";"T";3;3;"other";"other";"reputation";"father";1;2;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";4;3;4;1;4;4;4;"6";"5";6 180 | "GP";"M";16;"R";"GT3";"T";4;2;"teacher";"services";"other";"mother";1;1;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;3;3;3;4;3;10;"10";"8";9 181 | "GP";"M";17;"U";"GT3";"T";4;3;"other";"other";"course";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";5;2;3;1;1;2;4;"10";"10";11 182 | "GP";"M";16;"U";"GT3";"T";4;3;"teacher";"other";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;4;3;2;3;3;10;"9";"8";8 183 | "GP";"M";16;"U";"GT3";"T";3;3;"services";"other";"home";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";4;2;3;1;2;3;2;"12";"13";12 184 | "GP";"F";17;"U";"GT3";"T";2;4;"services";"services";"reputation";"father";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"no";"no";5;4;2;2;3;5;0;"16";"17";17 185 | "GP";"F";17;"U";"LE3";"T";3;3;"other";"other";"reputation";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";5;3;3;2;3;1;56;"9";"9";8 186 | "GP";"F";16;"U";"GT3";"T";3;2;"other";"other";"reputation";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";1;2;2;1;2;1;14;"12";"13";12 187 | "GP";"M";17;"U";"GT3";"T";3;3;"services";"services";"other";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;3;4;2;3;4;12;"12";"12";11 188 | "GP";"M";16;"U";"GT3";"T";1;2;"services";"services";"other";"mother";1;1;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";3;3;3;1;2;3;2;"11";"12";11 189 | "GP";"M";16;"U";"LE3";"T";2;1;"other";"other";"course";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";4;2;3;1;2;5;0;"15";"15";15 190 | "GP";"F";17;"U";"GT3";"A";3;3;"health";"other";"reputation";"mother";1;2;0;"no";"yes";"no";"no";"no";"yes";"yes";"yes";3;3;3;1;3;3;6;"8";"7";9 191 | "GP";"M";17;"R";"GT3";"T";1;2;"at_home";"other";"home";"mother";1;2;0;"no";"no";"no";"no";"yes";"yes";"no";"no";3;1;3;1;5;3;4;"8";"9";10 192 | "GP";"F";16;"U";"GT3";"T";2;3;"services";"services";"course";"mother";1;2;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;3;3;1;1;2;10;"11";"12";13 193 | "GP";"F";17;"U";"GT3";"T";1;1;"at_home";"services";"course";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;3;3;1;1;3;0;"8";"8";9 194 | "GP";"M";17;"U";"GT3";"T";1;2;"at_home";"services";"other";"other";2;2;0;"no";"no";"yes";"yes";"no";"yes";"yes";"no";4;4;4;4;5;5;12;"7";"8";8 195 | "GP";"M";16;"R";"GT3";"T";3;3;"services";"services";"reputation";"mother";1;1;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;2;3;4;5;8;"8";"9";10 196 | "GP";"M";16;"U";"GT3";"T";2;3;"other";"other";"home";"father";2;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;3;3;1;1;3;0;"13";"14";14 197 | "GP";"F";17;"U";"LE3";"T";2;4;"services";"services";"course";"father";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";4;3;2;1;1;5;0;"14";"15";15 198 | "GP";"M";17;"U";"GT3";"T";4;4;"services";"teacher";"home";"mother";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;2;3;1;2;5;4;"17";"15";16 199 | "GP";"M";16;"R";"LE3";"T";3;3;"teacher";"other";"home";"father";3;1;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;3;4;3;5;3;8;"9";"9";10 200 | "GP";"F";17;"U";"GT3";"T";4;4;"services";"teacher";"home";"mother";2;1;1;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;2;4;2;3;2;24;"18";"18";18 201 | "GP";"F";16;"U";"LE3";"T";4;4;"teacher";"teacher";"reputation";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;5;2;1;2;3;0;"9";"9";10 202 | "GP";"F";16;"U";"GT3";"T";4;3;"health";"other";"home";"mother";1;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;5;1;5;2;2;"16";"16";16 203 | "GP";"F";16;"U";"GT3";"T";2;3;"other";"other";"reputation";"mother";1;2;0;"yes";"yes";"yes";"yes";"yes";"yes";"no";"no";4;4;3;1;3;4;6;"8";"10";10 204 | "GP";"F";17;"U";"GT3";"T";1;1;"other";"other";"course";"mother";1;2;0;"no";"yes";"yes";"no";"no";"yes";"no";"no";4;4;4;1;3;1;4;"9";"9";10 205 | "GP";"F";17;"R";"GT3";"T";2;2;"other";"other";"reputation";"mother";1;1;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";5;3;2;1;2;3;18;"7";"6";6 206 | "GP";"F";16;"R";"GT3";"T";2;2;"services";"services";"reputation";"mother";2;4;0;"no";"yes";"yes";"yes";"no";"yes";"yes";"no";5;3;5;1;1;5;6;"10";"10";11 207 | "GP";"F";17;"U";"GT3";"T";3;4;"at_home";"services";"home";"mother";1;3;1;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;4;3;3;4;5;28;"10";"9";9 208 | "GP";"F";16;"U";"GT3";"A";3;1;"services";"other";"course";"mother";1;2;3;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";2;3;3;2;2;4;5;"7";"7";7 209 | "GP";"F";16;"U";"GT3";"T";4;3;"teacher";"other";"other";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";1;3;2;1;1;1;10;"11";"12";13 210 | "GP";"F";16;"U";"GT3";"T";1;1;"at_home";"other";"home";"mother";2;1;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";4;3;2;1;4;5;6;"9";"9";10 211 | "GP";"F";17;"R";"GT3";"T";4;3;"teacher";"other";"reputation";"mother";2;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;4;2;1;1;4;6;"7";"7";7 212 | "GP";"F";19;"U";"GT3";"T";3;3;"other";"other";"reputation";"other";1;4;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;1;2;3;10;"8";"8";8 213 | "GP";"M";17;"U";"LE3";"T";4;4;"services";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";5;3;5;4;5;3;13;"12";"12";13 214 | "GP";"F";16;"U";"GT3";"A";2;2;"other";"other";"reputation";"mother";1;2;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"no";3;3;4;1;1;4;0;"12";"13";14 215 | "GP";"M";18;"U";"GT3";"T";2;2;"services";"other";"home";"mother";1;2;1;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;4;4;2;4;5;15;"6";"7";8 216 | "GP";"F";17;"R";"LE3";"T";4;4;"services";"other";"other";"mother";1;1;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";5;2;1;1;2;3;12;"8";"10";10 217 | "GP";"F";17;"U";"LE3";"T";3;2;"other";"other";"reputation";"mother";2;2;0;"no";"no";"yes";"no";"yes";"yes";"yes";"no";4;4;4;1;3;1;2;"14";"15";15 218 | "GP";"F";17;"U";"GT3";"T";4;3;"other";"other";"reputation";"mother";1;2;2;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";3;4;5;2;4;1;22;"6";"6";4 219 | "GP";"M";18;"U";"LE3";"T";3;3;"services";"health";"home";"father";1;2;1;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";3;2;4;2;4;4;13;"6";"6";8 220 | "GP";"F";17;"U";"GT3";"T";2;3;"at_home";"other";"home";"father";2;1;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";3;3;3;1;4;3;3;"7";"7";8 221 | "GP";"F";17;"U";"GT3";"T";2;2;"at_home";"at_home";"course";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;1;1;4;4;"9";"10";10 222 | "GP";"F";17;"R";"GT3";"T";2;1;"at_home";"services";"reputation";"mother";2;2;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;2;5;1;2;5;2;"6";"6";6 223 | "GP";"F";17;"U";"GT3";"T";1;1;"at_home";"other";"reputation";"mother";1;3;1;"no";"yes";"no";"yes";"yes";"yes";"no";"yes";4;3;4;1;1;5;0;"6";"5";0 224 | "GP";"F";16;"U";"GT3";"T";2;3;"services";"teacher";"other";"mother";1;2;0;"yes";"no";"no";"no";"yes";"yes";"yes";"no";2;3;1;1;1;3;2;"16";"16";17 225 | "GP";"M";18;"U";"GT3";"T";2;2;"other";"other";"home";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";3;3;3;5;5;4;0;"12";"13";13 226 | "GP";"F";16;"U";"GT3";"T";4;4;"teacher";"services";"home";"mother";1;3;0;"no";"yes";"no";"yes";"no";"yes";"yes";"no";5;3;2;1;1;5;0;"13";"13";14 227 | "GP";"F";18;"R";"GT3";"T";3;1;"other";"other";"reputation";"mother";1;2;1;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";5;3;3;1;1;4;16;"9";"8";7 228 | "GP";"F";17;"U";"GT3";"T";3;2;"other";"other";"course";"mother";1;2;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";5;3;4;1;3;3;10;"16";"15";15 229 | "GP";"M";17;"U";"LE3";"T";2;3;"services";"services";"reputation";"father";1;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";5;3;3;1;3;3;2;"12";"11";12 230 | "GP";"M";18;"U";"LE3";"T";2;1;"at_home";"other";"course";"mother";4;2;0;"yes";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;3;2;4;5;3;14;"10";"8";9 231 | "GP";"F";17;"U";"GT3";"A";2;1;"other";"other";"course";"mother";2;3;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";3;2;3;1;2;3;10;"12";"10";12 232 | "GP";"F";17;"U";"LE3";"T";4;3;"health";"other";"reputation";"father";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";3;2;3;1;2;3;14;"13";"13";14 233 | "GP";"M";17;"R";"GT3";"T";2;2;"other";"other";"course";"father";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;5;2;1;1;1;4;"11";"11";11 234 | "GP";"M";17;"U";"GT3";"T";4;4;"teacher";"teacher";"reputation";"mother";1;2;0;"yes";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;5;5;1;3;2;14;"11";"9";9 235 | "GP";"M";16;"U";"GT3";"T";4;4;"health";"other";"reputation";"father";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;2;4;2;4;1;2;"14";"13";13 236 | "GP";"M";16;"U";"LE3";"T";1;1;"other";"other";"home";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";3;4;2;1;1;5;18;"9";"7";6 237 | "GP";"M";16;"U";"GT3";"T";3;2;"at_home";"other";"reputation";"mother";2;3;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";5;3;3;1;3;2;10;"11";"9";10 238 | "GP";"M";17;"U";"LE3";"T";2;2;"other";"other";"home";"father";1;2;0;"no";"no";"yes";"yes";"no";"yes";"yes";"yes";4;4;2;5;5;4;4;"14";"13";13 239 | "GP";"F";16;"U";"GT3";"T";2;1;"other";"other";"home";"mother";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"yes";4;5;2;1;1;5;20;"13";"12";12 240 | "GP";"F";17;"R";"GT3";"T";2;1;"at_home";"services";"course";"mother";3;2;0;"no";"no";"no";"yes";"yes";"yes";"no";"no";2;1;1;1;1;3;2;"13";"11";11 241 | "GP";"M";18;"U";"GT3";"T";2;2;"other";"services";"reputation";"father";1;2;1;"no";"no";"no";"no";"yes";"no";"yes";"no";5;5;4;3;5;2;0;"7";"7";0 242 | "GP";"M";17;"U";"LE3";"T";4;3;"health";"other";"course";"mother";2;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";2;5;5;1;4;5;14;"12";"12";12 243 | "GP";"M";17;"R";"LE3";"A";4;4;"teacher";"other";"course";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";3;3;3;2;3;4;2;"10";"11";12 244 | "GP";"M";16;"U";"LE3";"T";4;3;"teacher";"other";"course";"mother";1;1;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";5;4;5;1;1;3;0;"6";"0";0 245 | "GP";"M";16;"U";"GT3";"T";4;4;"services";"services";"course";"mother";1;1;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;3;2;1;2;5;0;"13";"12";12 246 | "GP";"F";18;"U";"GT3";"T";2;1;"other";"other";"course";"other";2;3;0;"no";"yes";"yes";"no";"no";"yes";"yes";"yes";4;4;4;1;1;3;0;"7";"0";0 247 | "GP";"M";16;"U";"GT3";"T";2;1;"other";"other";"course";"mother";3;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;3;3;1;1;4;6;"18";"18";18 248 | "GP";"M";17;"U";"GT3";"T";2;3;"other";"other";"course";"father";2;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;2;2;1;1;2;4;"12";"12";13 249 | "GP";"M";22;"U";"GT3";"T";3;1;"services";"services";"other";"mother";1;1;3;"no";"no";"no";"no";"no";"no";"yes";"yes";5;4;5;5;5;1;16;"6";"8";8 250 | "GP";"M";18;"R";"LE3";"T";3;3;"other";"services";"course";"mother";1;2;1;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;3;3;1;3;5;8;"3";"5";5 251 | "GP";"M";16;"U";"GT3";"T";0;2;"other";"other";"other";"mother";1;1;0;"no";"no";"yes";"no";"no";"yes";"yes";"no";4;3;2;2;4;5;0;"13";"15";15 252 | "GP";"M";18;"U";"GT3";"T";3;2;"services";"other";"course";"mother";2;1;1;"no";"no";"no";"no";"yes";"no";"yes";"no";4;4;5;2;4;5;0;"6";"8";8 253 | "GP";"M";16;"U";"GT3";"T";3;3;"at_home";"other";"reputation";"other";3;2;0;"yes";"yes";"no";"no";"no";"yes";"yes";"no";5;3;3;1;3;2;6;"7";"10";10 254 | "GP";"M";18;"U";"GT3";"T";2;1;"services";"services";"other";"mother";1;1;1;"no";"no";"no";"no";"no";"no";"yes";"no";3;2;5;2;5;5;4;"6";"9";8 255 | "GP";"M";16;"R";"GT3";"T";2;1;"other";"other";"course";"mother";2;1;0;"no";"no";"no";"yes";"no";"yes";"no";"no";3;3;2;1;3;3;0;"8";"9";8 256 | "GP";"M";17;"R";"GT3";"T";2;1;"other";"other";"course";"mother";1;1;0;"no";"no";"no";"no";"no";"yes";"yes";"no";4;4;2;2;4;5;0;"8";"12";12 257 | "GP";"M";17;"U";"LE3";"T";1;1;"health";"other";"course";"mother";2;1;1;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;4;4;1;2;5;2;"7";"9";8 258 | "GP";"F";17;"U";"LE3";"T";4;2;"teacher";"services";"reputation";"mother";1;4;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;2;3;1;1;4;6;"14";"12";13 259 | "GP";"M";19;"U";"LE3";"A";4;3;"services";"at_home";"reputation";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;3;1;1;1;1;12;"11";"11";11 260 | "GP";"M";18;"U";"GT3";"T";2;1;"other";"other";"home";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;2;4;1;2;4;8;"15";"14";14 261 | "GP";"F";17;"U";"LE3";"T";2;2;"services";"services";"course";"father";1;4;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";3;4;1;1;1;2;0;"10";"9";0 262 | "GP";"F";18;"U";"GT3";"T";4;3;"services";"other";"home";"father";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";3;1;2;1;3;2;21;"17";"18";18 263 | "GP";"M";18;"U";"GT3";"T";4;3;"teacher";"other";"course";"mother";1;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"no";4;3;2;1;1;3;2;"8";"8";8 264 | "GP";"M";18;"R";"GT3";"T";3;2;"other";"other";"course";"mother";1;3;0;"no";"no";"no";"yes";"no";"yes";"no";"no";5;3;2;1;1;3;1;"13";"12";12 265 | "GP";"F";17;"U";"GT3";"T";3;3;"other";"other";"home";"mother";1;3;0;"no";"no";"no";"yes";"no";"yes";"no";"no";3;2;3;1;1;4;4;"10";"9";9 266 | "GP";"F";18;"U";"GT3";"T";2;2;"at_home";"services";"home";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;3;3;1;1;3;0;"9";"10";0 267 | "GP";"M";18;"R";"LE3";"A";3;4;"other";"other";"reputation";"mother";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;2;5;3;4;1;13;"17";"17";17 268 | "GP";"M";17;"U";"GT3";"T";3;1;"services";"other";"other";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";5;4;4;3;4;5;2;"9";"9";10 269 | "GP";"F";18;"R";"GT3";"T";4;4;"teacher";"other";"reputation";"mother";2;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";4;3;4;2;2;4;8;"12";"10";11 270 | "GP";"M";18;"U";"GT3";"T";4;2;"health";"other";"reputation";"father";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";5;4;5;1;3;5;10;"10";"9";10 271 | "GP";"F";18;"R";"GT3";"T";2;1;"other";"other";"reputation";"mother";2;2;0;"no";"yes";"no";"no";"yes";"no";"yes";"yes";4;3;5;1;2;3;0;"6";"0";0 272 | "GP";"F";19;"U";"GT3";"T";3;3;"other";"services";"home";"other";1;2;2;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;5;3;3;5;15;"9";"9";9 273 | "GP";"F";18;"U";"GT3";"T";2;3;"other";"services";"reputation";"father";1;4;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;5;5;1;3;2;4;"15";"14";14 274 | "GP";"F";18;"U";"LE3";"T";1;1;"other";"other";"home";"mother";2;2;0;"no";"yes";"yes";"no";"no";"yes";"no";"no";4;4;3;1;1;3;2;"11";"11";11 275 | "GP";"M";17;"R";"GT3";"T";1;2;"at_home";"at_home";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"no";"yes";"no";"yes";3;5;2;2;2;1;2;"15";"14";14 276 | "GP";"F";17;"U";"GT3";"T";2;4;"at_home";"health";"reputation";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;3;3;1;1;1;2;"10";"10";10 277 | "GP";"F";17;"U";"LE3";"T";2;2;"services";"other";"course";"mother";2;2;0;"yes";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;4;4;2;3;5;6;"12";"12";12 278 | "GP";"F";18;"R";"GT3";"A";3;2;"other";"services";"home";"mother";2;2;0;"no";"no";"no";"no";"no";"no";"yes";"yes";4;1;1;1;1;5;75;"10";"9";9 279 | "GP";"M";18;"U";"GT3";"T";4;4;"teacher";"services";"home";"mother";2;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";3;2;4;1;4;3;22;"9";"9";9 280 | "GP";"F";18;"U";"GT3";"T";4;4;"health";"health";"reputation";"father";1;2;1;"yes";"yes";"no";"yes";"yes";"yes";"yes";"yes";2;4;4;1;1;4;15;"9";"8";8 281 | "GP";"M";18;"U";"LE3";"T";4;3;"teacher";"services";"course";"mother";2;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";4;2;3;1;2;1;8;"10";"11";10 282 | "GP";"M";17;"U";"LE3";"A";4;1;"services";"other";"home";"mother";2;1;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";4;5;4;2;4;5;30;"8";"8";8 283 | "GP";"M";17;"U";"LE3";"A";3;2;"teacher";"services";"home";"mother";1;1;1;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;4;4;3;4;3;19;"11";"9";10 284 | "GP";"F";18;"R";"LE3";"T";1;1;"at_home";"other";"reputation";"mother";2;4;0;"no";"yes";"yes";"yes";"yes";"yes";"no";"no";5;2;2;1;1;3;1;"12";"12";12 285 | "GP";"F";18;"U";"GT3";"T";1;1;"other";"other";"home";"mother";2;2;0;"yes";"no";"no";"yes";"yes";"yes";"yes";"no";5;4;4;1;1;4;4;"8";"9";10 286 | "GP";"F";17;"U";"GT3";"T";2;2;"other";"other";"course";"mother";1;2;0;"no";"yes";"no";"no";"no";"yes";"yes";"no";5;4;5;1;2;5;4;"10";"9";11 287 | "GP";"M";17;"U";"GT3";"T";1;1;"other";"other";"reputation";"father";1;2;0;"no";"no";"yes";"no";"no";"yes";"yes";"no";4;3;3;1;2;4;2;"12";"10";11 288 | "GP";"F";18;"U";"GT3";"T";2;2;"at_home";"at_home";"other";"mother";1;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;2;2;5;"18";"18";19 289 | "GP";"F";17;"U";"GT3";"T";1;1;"services";"teacher";"reputation";"mother";1;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;1;3;6;"13";"12";12 290 | "GP";"M";18;"U";"GT3";"T";2;1;"services";"services";"reputation";"mother";1;3;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";4;2;4;1;3;2;6;"15";"14";14 291 | "GP";"M";18;"U";"LE3";"A";4;4;"teacher";"teacher";"reputation";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;4;3;1;1;2;9;"15";"13";15 292 | "GP";"M";18;"U";"GT3";"T";4;2;"teacher";"other";"home";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;3;2;1;4;5;11;"12";"11";11 293 | "GP";"F";17;"U";"GT3";"T";4;3;"health";"services";"reputation";"mother";1;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;2;2;1;2;3;0;"15";"15";15 294 | "GP";"F";18;"U";"LE3";"T";2;1;"services";"at_home";"reputation";"mother";1;2;1;"no";"no";"no";"no";"yes";"yes";"yes";"yes";5;4;3;1;1;5;12;"12";"12";13 295 | "GP";"F";17;"R";"LE3";"T";3;1;"services";"other";"reputation";"mother";2;4;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";3;1;2;1;1;3;6;"18";"18";18 296 | "GP";"M";18;"R";"LE3";"T";3;2;"services";"other";"reputation";"mother";2;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;4;2;1;1;4;8;"14";"13";14 297 | "GP";"M";17;"U";"GT3";"T";3;3;"health";"other";"home";"mother";1;1;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;4;3;1;3;5;4;"14";"12";11 298 | "GP";"F";19;"U";"GT3";"T";4;4;"health";"other";"reputation";"other";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";2;3;4;2;3;2;0;"10";"9";0 299 | "GP";"F";18;"U";"LE3";"T";4;3;"other";"other";"home";"other";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;4;5;1;2;2;10;"10";"8";8 300 | "GP";"F";18;"U";"GT3";"T";4;3;"other";"other";"reputation";"father";1;4;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;1;3;0;"14";"13";14 301 | "GP";"M";18;"U";"LE3";"T";4;4;"teacher";"teacher";"home";"mother";1;1;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";1;4;2;2;2;1;5;"16";"15";16 302 | "GP";"F";18;"U";"LE3";"A";4;4;"health";"other";"home";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;2;4;1;1;4;14;"12";"10";11 303 | "GP";"M";17;"U";"LE3";"T";4;4;"other";"teacher";"home";"father";2;1;0;"no";"no";"yes";"no";"yes";"yes";"yes";"no";4;1;1;2;2;5;0;"11";"11";10 304 | "GP";"F";17;"U";"GT3";"T";4;2;"other";"other";"reputation";"mother";2;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;1;1;3;0;"15";"12";14 305 | "GP";"F";17;"U";"GT3";"T";3;2;"health";"health";"reputation";"father";1;4;0;"no";"yes";"yes";"yes";"no";"yes";"yes";"no";5;2;2;1;2;5;0;"17";"17";18 306 | "GP";"M";19;"U";"GT3";"T";3;3;"other";"other";"home";"other";1;2;1;"no";"yes";"no";"yes";"yes";"yes";"yes";"yes";4;4;4;1;1;3;20;"15";"14";13 307 | "GP";"F";18;"U";"GT3";"T";2;4;"services";"at_home";"reputation";"other";1;2;1;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;4;3;1;1;3;8;"14";"12";12 308 | "GP";"M";20;"U";"GT3";"A";3;2;"services";"other";"course";"other";1;1;0;"no";"no";"no";"yes";"yes";"yes";"no";"no";5;5;3;1;1;5;0;"17";"18";18 309 | "GP";"M";19;"U";"GT3";"T";4;4;"teacher";"services";"reputation";"other";2;1;1;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;3;4;1;1;4;38;"8";"9";8 310 | "GP";"M";19;"R";"GT3";"T";3;3;"other";"services";"reputation";"father";1;2;1;"no";"no";"no";"yes";"yes";"yes";"no";"yes";4;5;3;1;2;5;0;"15";"12";12 311 | "GP";"F";19;"U";"LE3";"T";1;1;"at_home";"other";"reputation";"other";1;2;1;"yes";"yes";"no";"yes";"no";"yes";"yes";"no";4;4;3;1;3;3;18;"12";"10";10 312 | "GP";"F";19;"U";"LE3";"T";1;2;"services";"services";"home";"other";1;2;1;"no";"no";"no";"yes";"no";"yes";"no";"yes";4;2;4;2;2;3;0;"9";"9";0 313 | "GP";"F";19;"U";"GT3";"T";2;1;"at_home";"other";"other";"other";3;2;0;"no";"yes";"no";"no";"yes";"no";"yes";"yes";3;4;1;1;1;2;20;"14";"12";13 314 | "GP";"M";19;"U";"GT3";"T";1;2;"other";"services";"course";"other";1;2;1;"no";"no";"no";"no";"no";"yes";"yes";"no";4;5;2;2;2;4;3;"13";"11";11 315 | "GP";"F";19;"U";"LE3";"T";3;2;"services";"other";"reputation";"other";2;2;1;"no";"yes";"yes";"no";"no";"yes";"yes";"yes";4;2;2;1;2;1;22;"13";"10";11 316 | "GP";"F";19;"U";"GT3";"T";1;1;"at_home";"health";"home";"other";1;3;2;"no";"no";"no";"no";"no";"yes";"yes";"yes";4;1;2;1;1;3;14;"15";"13";13 317 | "GP";"F";19;"R";"GT3";"T";2;3;"other";"other";"reputation";"other";1;3;1;"no";"no";"no";"no";"yes";"yes";"yes";"yes";4;1;2;1;1;3;40;"13";"11";11 318 | "GP";"F";18;"U";"GT3";"T";2;1;"services";"other";"course";"mother";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;3;3;1;2;1;0;"8";"8";0 319 | "GP";"F";18;"U";"GT3";"T";4;3;"other";"other";"course";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;3;4;1;1;5;9;"9";"10";9 320 | "GP";"F";17;"R";"GT3";"T";3;4;"at_home";"services";"course";"father";1;3;0;"no";"yes";"yes";"yes";"no";"yes";"yes";"no";4;3;4;2;5;5;0;"11";"11";10 321 | "GP";"F";18;"U";"GT3";"T";4;4;"teacher";"other";"course";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;4;4;3;3;5;2;"11";"11";11 322 | "GP";"F";17;"U";"GT3";"A";4;3;"services";"services";"course";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";5;2;2;1;2;5;23;"13";"13";13 323 | "GP";"F";17;"U";"GT3";"T";2;2;"other";"other";"course";"mother";1;2;0;"no";"yes";"no";"no";"yes";"yes";"no";"yes";4;2;2;1;1;3;12;"11";"9";9 324 | "GP";"F";17;"R";"LE3";"T";2;2;"services";"services";"course";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";3;3;2;2;2;3;3;"11";"11";11 325 | "GP";"F";17;"U";"GT3";"T";3;1;"services";"services";"course";"father";1;3;0;"no";"yes";"no";"no";"no";"yes";"yes";"no";3;4;3;2;3;5;1;"12";"14";15 326 | "GP";"F";17;"U";"LE3";"T";0;2;"at_home";"at_home";"home";"father";2;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;3;3;2;3;2;0;"16";"15";15 327 | "GP";"M";18;"U";"GT3";"T";4;4;"other";"other";"course";"mother";1;3;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";4;3;3;2;2;3;3;"9";"12";11 328 | "GP";"M";17;"U";"GT3";"T";3;3;"other";"services";"reputation";"mother";1;1;0;"no";"no";"no";"yes";"no";"yes";"yes";"no";4;3;5;3;5;5;3;"14";"15";16 329 | "GP";"M";17;"R";"GT3";"T";2;2;"services";"other";"course";"mother";4;1;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;4;5;5;5;4;8;"11";"10";10 330 | "GP";"F";17;"U";"GT3";"T";4;4;"teacher";"services";"course";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";5;4;4;1;3;4;7;"10";"9";9 331 | "GP";"F";17;"U";"GT3";"T";4;4;"teacher";"teacher";"course";"mother";2;3;0;"no";"yes";"yes";"no";"no";"yes";"yes";"yes";4;3;3;1;2;4;4;"14";"14";14 332 | "GP";"M";18;"U";"LE3";"T";2;2;"other";"other";"course";"mother";1;4;0;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;5;5;2;4;5;2;"9";"8";8 333 | "GP";"F";17;"R";"GT3";"T";2;4;"at_home";"other";"course";"father";1;3;0;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;4;3;1;1;5;7;"12";"14";14 334 | "GP";"F";18;"U";"GT3";"T";3;3;"services";"services";"home";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";5;3;4;1;1;4;0;"7";"0";0 335 | "GP";"F";18;"U";"LE3";"T";2;2;"other";"other";"home";"other";1;2;0;"no";"no";"no";"yes";"no";"yes";"yes";"yes";4;3;3;1;1;2;0;"8";"8";0 336 | "GP";"F";18;"R";"GT3";"T";2;2;"at_home";"other";"course";"mother";2;4;0;"no";"no";"no";"yes";"yes";"yes";"no";"no";4;4;4;1;1;4;0;"10";"9";0 337 | "GP";"F";17;"U";"GT3";"T";3;4;"services";"other";"course";"mother";1;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;4;5;1;3;5;16;"16";"15";15 338 | "GP";"F";19;"R";"GT3";"A";3;1;"services";"at_home";"home";"other";1;3;1;"no";"no";"yes";"no";"yes";"yes";"no";"no";5;4;3;1;2;5;12;"14";"13";13 339 | "GP";"F";17;"U";"GT3";"T";3;2;"other";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";4;3;2;2;3;2;0;"7";"8";0 340 | "GP";"F";18;"U";"LE3";"T";3;3;"services";"services";"home";"mother";1;4;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";5;3;3;1;1;1;7;"16";"15";17 341 | "GP";"F";17;"R";"GT3";"A";3;2;"other";"other";"home";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;3;2;3;2;4;"9";"10";10 342 | "GP";"F";19;"U";"GT3";"T";2;1;"services";"services";"home";"other";1;3;1;"no";"no";"yes";"yes";"yes";"yes";"yes";"yes";4;3;4;1;3;3;4;"11";"12";11 343 | "GP";"M";18;"U";"GT3";"T";4;4;"teacher";"services";"home";"father";1;2;1;"no";"yes";"no";"yes";"yes";"yes";"yes";"no";4;3;3;2;2;2;0;"10";"10";0 344 | "GP";"M";18;"U";"LE3";"T";3;4;"services";"other";"home";"mother";1;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"yes";4;3;3;1;3;5;11;"16";"15";15 345 | "GP";"F";17;"U";"GT3";"A";2;2;"at_home";"at_home";"home";"father";1;2;1;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";3;3;1;1;2;4;0;"9";"8";0 346 | "GP";"F";18;"U";"GT3";"T";2;3;"at_home";"other";"course";"mother";1;3;0;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;3;3;1;2;3;4;"11";"10";10 347 | "GP";"F";18;"U";"GT3";"T";3;2;"other";"services";"other";"mother";1;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"yes";5;4;3;2;3;1;7;"13";"13";14 348 | "GP";"M";18;"R";"GT3";"T";4;3;"teacher";"services";"course";"mother";1;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"yes";5;3;2;1;2;4;9;"16";"15";16 349 | "GP";"M";18;"U";"GT3";"T";4;3;"teacher";"other";"course";"mother";1;3;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";5;4;5;2;3;5;0;"10";"10";9 350 | "GP";"F";17;"U";"GT3";"T";4;3;"health";"other";"reputation";"mother";1;3;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;4;3;1;3;4;0;"13";"15";15 351 | "MS";"M";18;"R";"GT3";"T";3;2;"other";"other";"course";"mother";2;1;1;"no";"yes";"no";"no";"no";"yes";"yes";"no";2;5;5;5;5;5;10;"11";"13";13 352 | "MS";"M";19;"R";"GT3";"T";1;1;"other";"services";"home";"other";3;2;3;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;4;4;3;3;2;8;"8";"7";8 353 | "MS";"M";17;"U";"GT3";"T";3;3;"health";"other";"course";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;5;4;2;3;3;2;"13";"13";13 354 | "MS";"M";18;"U";"LE3";"T";1;3;"at_home";"services";"course";"mother";1;1;1;"no";"no";"no";"no";"yes";"no";"yes";"yes";4;3;3;2;3;3;7;"8";"7";8 355 | "MS";"M";19;"R";"GT3";"T";1;1;"other";"other";"home";"other";3;1;1;"no";"yes";"no";"no";"yes";"yes";"yes";"no";4;4;4;3;3;5;4;"8";"8";8 356 | "MS";"M";17;"R";"GT3";"T";4;3;"services";"other";"home";"mother";2;2;0;"no";"yes";"yes";"yes";"no";"yes";"yes";"yes";4;5;5;1;3;2;4;"13";"11";11 357 | "MS";"F";18;"U";"GT3";"T";3;3;"services";"services";"course";"father";1;2;0;"no";"yes";"no";"no";"yes";"yes";"no";"yes";5;3;4;1;1;5;0;"10";"9";9 358 | "MS";"F";17;"R";"GT3";"T";4;4;"teacher";"services";"other";"father";2;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"no";4;3;3;1;2;5;4;"12";"13";13 359 | "MS";"F";17;"U";"LE3";"A";3;2;"services";"other";"reputation";"mother";2;2;0;"no";"no";"no";"no";"yes";"yes";"no";"yes";1;2;3;1;2;5;2;"12";"12";11 360 | "MS";"M";18;"U";"LE3";"T";1;1;"other";"services";"home";"father";2;1;0;"no";"no";"no";"no";"no";"yes";"yes";"yes";3;3;2;1;2;3;4;"10";"10";10 361 | "MS";"F";18;"U";"LE3";"T";1;1;"at_home";"services";"course";"father";2;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;3;2;1;1;4;0;"18";"16";16 362 | "MS";"F";18;"R";"LE3";"A";1;4;"at_home";"other";"course";"mother";3;2;0;"no";"no";"no";"no";"yes";"yes";"no";"yes";4;3;4;1;4;5;0;"13";"13";13 363 | "MS";"M";18;"R";"LE3";"T";1;1;"at_home";"other";"other";"mother";2;2;1;"no";"no";"no";"yes";"no";"no";"no";"no";4;4;3;2;3;5;2;"13";"12";12 364 | "MS";"F";18;"U";"GT3";"T";3;3;"services";"services";"other";"mother";2;2;0;"no";"yes";"no";"no";"yes";"yes";"yes";"yes";4;3;2;1;3;3;0;"11";"11";10 365 | "MS";"F";17;"U";"LE3";"T";4;4;"at_home";"at_home";"course";"mother";1;2;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";2;3;4;1;1;1;0;"16";"15";15 366 | "MS";"F";17;"R";"GT3";"T";1;2;"other";"services";"course";"father";2;2;0;"no";"no";"no";"no";"no";"yes";"no";"no";3;2;2;1;2;3;0;"12";"11";12 367 | "MS";"M";18;"R";"GT3";"T";1;3;"at_home";"other";"course";"mother";2;2;0;"no";"yes";"yes";"no";"yes";"yes";"no";"no";3;3;4;2;4;3;4;"10";"10";10 368 | "MS";"M";18;"U";"LE3";"T";4;4;"teacher";"services";"other";"mother";2;3;0;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";4;2;2;2;2;5;0;"13";"13";13 369 | "MS";"F";17;"R";"GT3";"T";1;1;"other";"services";"reputation";"mother";3;1;1;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";5;2;1;1;2;1;0;"7";"6";0 370 | "MS";"F";18;"U";"GT3";"T";2;3;"at_home";"services";"course";"father";2;1;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"yes";5;2;3;1;2;4;0;"11";"10";10 371 | "MS";"F";18;"R";"GT3";"T";4;4;"other";"teacher";"other";"father";3;2;0;"no";"yes";"yes";"no";"no";"yes";"yes";"yes";3;2;2;4;2;5;10;"14";"12";11 372 | "MS";"F";19;"U";"LE3";"T";3;2;"services";"services";"home";"other";2;2;2;"no";"no";"no";"yes";"yes";"yes";"no";"yes";3;2;2;1;1;3;4;"7";"7";9 373 | "MS";"M";18;"R";"LE3";"T";1;2;"at_home";"services";"other";"father";3;1;0;"no";"yes";"yes";"yes";"yes";"no";"yes";"yes";4;3;3;2;3;3;3;"14";"12";12 374 | "MS";"F";17;"U";"GT3";"T";2;2;"other";"at_home";"home";"mother";1;3;0;"no";"no";"no";"yes";"yes";"yes";"no";"yes";3;4;3;1;1;3;8;"13";"11";11 375 | "MS";"F";17;"R";"GT3";"T";1;2;"other";"other";"course";"mother";1;1;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";3;5;5;1;3;1;14;"6";"5";5 376 | "MS";"F";18;"R";"LE3";"T";4;4;"other";"other";"reputation";"mother";2;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";5;4;4;1;1;1;0;"19";"18";19 377 | "MS";"F";18;"R";"GT3";"T";1;1;"other";"other";"home";"mother";4;3;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";4;3;2;1;2;4;2;"8";"8";10 378 | "MS";"F";20;"U";"GT3";"T";4;2;"health";"other";"course";"other";2;3;2;"no";"yes";"yes";"no";"no";"yes";"yes";"yes";5;4;3;1;1;3;4;"15";"14";15 379 | "MS";"F";18;"R";"LE3";"T";4;4;"teacher";"services";"course";"mother";1;2;0;"no";"no";"yes";"yes";"yes";"yes";"yes";"no";5;4;3;3;4;2;4;"8";"9";10 380 | "MS";"F";18;"U";"GT3";"T";3;3;"other";"other";"home";"mother";1;2;0;"no";"no";"yes";"no";"yes";"yes";"yes";"yes";4;1;3;1;2;1;0;"15";"15";15 381 | "MS";"F";17;"R";"GT3";"T";3;1;"at_home";"other";"reputation";"mother";1;2;0;"no";"yes";"yes";"yes";"no";"yes";"yes";"no";4;5;4;2;3;1;17;"10";"10";10 382 | "MS";"M";18;"U";"GT3";"T";4;4;"teacher";"teacher";"home";"father";1;2;0;"no";"no";"yes";"yes";"no";"yes";"yes";"no";3;2;4;1;4;2;4;"15";"14";14 383 | "MS";"M";18;"R";"GT3";"T";2;1;"other";"other";"other";"mother";2;1;0;"no";"no";"no";"yes";"no";"yes";"yes";"yes";4;4;3;1;3;5;5;"7";"6";7 384 | "MS";"M";17;"U";"GT3";"T";2;3;"other";"services";"home";"father";2;2;0;"no";"no";"no";"yes";"yes";"yes";"yes";"no";4;4;3;1;1;3;2;"11";"11";10 385 | "MS";"M";19;"R";"GT3";"T";1;1;"other";"services";"other";"mother";2;1;1;"no";"no";"no";"no";"yes";"yes";"no";"no";4;3;2;1;3;5;0;"6";"5";0 386 | "MS";"M";18;"R";"GT3";"T";4;2;"other";"other";"home";"father";2;1;1;"no";"no";"yes";"no";"yes";"yes";"no";"no";5;4;3;4;3;3;14;"6";"5";5 387 | "MS";"F";18;"R";"GT3";"T";2;2;"at_home";"other";"other";"mother";2;3;0;"no";"no";"yes";"no";"yes";"yes";"no";"no";5;3;3;1;3;4;2;"10";"9";10 388 | "MS";"F";18;"R";"GT3";"T";4;4;"teacher";"at_home";"reputation";"mother";3;1;0;"no";"yes";"yes";"yes";"yes";"yes";"yes";"yes";4;4;3;2;2;5;7;"6";"5";6 389 | "MS";"F";19;"R";"GT3";"T";2;3;"services";"other";"course";"mother";1;3;1;"no";"no";"no";"yes";"no";"yes";"yes";"no";5;4;2;1;2;5;0;"7";"5";0 390 | "MS";"F";18;"U";"LE3";"T";3;1;"teacher";"services";"course";"mother";1;2;0;"no";"yes";"yes";"no";"yes";"yes";"yes";"no";4;3;4;1;1;1;0;"7";"9";8 391 | "MS";"F";18;"U";"GT3";"T";1;1;"other";"other";"course";"mother";2;2;1;"no";"no";"no";"yes";"yes";"yes";"no";"no";1;1;1;1;1;5;0;"6";"5";0 392 | "MS";"M";20;"U";"LE3";"A";2;2;"services";"services";"course";"other";1;2;2;"no";"yes";"yes";"no";"yes";"yes";"no";"no";5;5;4;4;5;4;11;"9";"9";9 393 | "MS";"M";17;"U";"LE3";"T";3;1;"services";"services";"course";"mother";2;1;0;"no";"no";"no";"no";"no";"yes";"yes";"no";2;4;5;3;4;2;3;"14";"16";16 394 | "MS";"M";21;"R";"GT3";"T";1;1;"other";"other";"course";"other";1;1;3;"no";"no";"no";"no";"no";"yes";"no";"no";5;5;3;3;3;3;3;"10";"8";7 395 | "MS";"M";18;"R";"LE3";"T";3;2;"services";"other";"course";"mother";3;1;0;"no";"no";"no";"no";"no";"yes";"yes";"no";4;4;1;3;4;5;0;"11";"12";10 396 | "MS";"M";19;"U";"LE3";"T";1;1;"other";"at_home";"course";"father";1;1;0;"no";"no";"no";"no";"yes";"yes";"yes";"no";3;2;3;3;3;5;5;"8";"9";9 397 | --------------------------------------------------------------------------------