From 0e522a71ff44abe52c96a8096a0cd68bf53598ac Mon Sep 17 00:00:00 2001 From: devfzn Date: Tue, 14 Nov 2023 23:29:30 -0300 Subject: [PATCH] +: intermedios 118-123 --- README.md | 1 + interm/interm.py | 55 ++++----- interm/interm07.py | 297 +++++++++++++++++++++++++++++++++++++++++++++ main.py | 5 +- 4 files changed, 326 insertions(+), 32 deletions(-) create mode 100644 interm/interm07.py diff --git a/README.md b/README.md index 9f797cb..b1bb266 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ de *Nichola Lacey* - [096-104](./interm/interm04.py) - [105-110](./interm/interm05.py) - [111-117](./interm/interm06.py) +- [118-123](./interm/interm07.py) ## Uso diff --git a/interm/interm.py b/interm/interm.py index 05a1c40..3efd2e4 100644 --- a/interm/interm.py +++ b/interm/interm.py @@ -4,6 +4,7 @@ from . import interm03 as ex03 from . import interm04 as ex04 from . import interm05 as ex05 from . import interm06 as ex06 +from . import interm07 as ex07 from common.common import ( print_challenges, user_input, @@ -194,32 +195,28 @@ def challenges06(): case _: continue -#def challenges07(): -# select_ok = False -# while not select_ok: -# clear() -# i, ex7 = print_challenges(ex07.basics_007) -# selection = user_input(i) -# match selection: -# case 1: -# run_func(ex7.rand_range) -# case 2: -# run_func(ex7.rand_choice) -# case 3: -# run_func(ex7.rand_game) -# case 4: -# run_func(ex7.rand_pick) -# case 5: -# run_func(ex7.rand_10) -# case 6: -# run_func(ex7.rand_10_upgrade) -# case 7: -# run_func(ex7.rand_quiz) -# case 8: -# run_func(ex7.rand_color) -# case 'v': -# return -# case 's': -# exit(0) -# case _: -# continue +def challenges07(): + select_ok = False + while not select_ok: + clear() + i, ex7 = print_challenges(ex07.interm007) + selection = user_input(i) + match selection: + case 1: + run_func(ex7.sub_118) + case 2: + run_func(ex7.sub_119) + case 3: + run_func(ex7.sub_120) + case 4: + run_func(ex7.sub_121) + case 5: + run_func(ex7.sub_122) + case 6: + run_func(ex7.sub_123) + case 'v': + return + case 's': + exit(0) + case _: + continue diff --git a/interm/interm07.py b/interm/interm07.py new file mode 100644 index 0000000..c745535 --- /dev/null +++ b/interm/interm07.py @@ -0,0 +1,297 @@ +class interm007: + + def sub_118(self): + """Define a subprogram that will ask the user to enter a number and + save it as the variable \'num\'. Define another subprogram that will + use \'num\' and count from 1 to that number.""" + def save_num(): + return int(input("Ingresa un número: ")) + + def use_num(num): + print(*[x for x in range(1, num+1)]) + + num = save_num() + use_num(num) + + def sub_119(self): + """Define a subprogram that will ask the user to pick a low and a high + number, and then generate a random number between those two values and + store it in a variable called \'comp_num\'. + Define another subprogram that will give the instruction \'I am thinking + of a number…\' and then ask the user to guess the number they are + thinking of. + Define a third subprogram that will check to see if the comp_num is the + same as the user’s guess. If it is, it should display the message + \'Correct, you win\', otherwise it should keep looping, telling the user + if they are too low or too high and asking them to guess again until they + guess correctly.""" + from random import randint + def num_gen(): + ini = int(input("Ingresa un número inicial: ")) + end = int(input("Ingresa un número final: ")) + return randint(ini, end) + + def thinking(): + print("¡Estoy pensando en un número!") + guess = int(input("¿Cual es el número?: ")) + return guess + + def check_nums(num, guess): + while num != guess: + if num > guess: + print("Muy bajo") + else: + print("Muy alto") + guess = int(input("¿Cual es el número?: ")) + print("Correcto, ganaste!") + + secret = num_gen() + guess = thinking() + check_nums(secret, guess) + + def sub_120(self): + """Display the following menu to the user: + 1) Addition + 2) Subtraction + Enter 1 or 2: + If they enter a 1, it should run a subprogram that will generate two + random numbers between 5 and 20, and ask the user to add them together. + Work out the correct answer and return both the user’s answer and the + correct answer. + If they entered 2 as their selection on the menu, it should run a + subprogram that will generate one number between 25 and 50 and another + number between 1 and 25 and ask them to work out num1 minus num2. This + way they will not have to worry about negative answers. Return both the + user’s answer and the correct answer. + Create another subprogram that will check if the user’s answer matches + the actual answer. If it does, display \'Correct\', otherwise display a + message that will say \'Incorrect, the answer is\' and display the real + answer. + If they do not select a relevant option on the first menu you should + display a suitable message.""" + from random import randint + def menu(): + print( + """ + 1) Suma + 2) Resta + """) + sel = int(input("Ingresa una opción: ")) + match sel: + case 1: + num, resp = gen_add() + check_resp(num, resp) + case 2: + num, resp = gen_sub() + check_resp(num, resp) + case _: + print("Debes elegir una opción válida") + + def gen_add(): + num_1 = randint(25, 50) + num_2 = randint(25, 50) + resp = int(input(f"¿Cuanto es {num_1}+{num_2}?: ")) + return num_1+num_2, resp + + def gen_sub(): + num_1 = randint(25, 50) + num_2 = randint(1, 25) + resp = int(input(f"¿Cuanto es {num_1}-{num_2}?: ")) + return num_1-num_2, resp + + def check_resp(correct, resp): + if correct == resp: + print("Correcto!") + else: + print(f"Incorrecto, la respuesta es {correct}") + + menu() + + def sub_121(self): + """Create a program that will allow the user to easily manage a list of + names. You should display a menu that will allow them to add a name to + the list, change a name in the list, delete a name from the list or view + all the names in the list. There should also be a menu option to allow + the user to end the program. If they select an option that is not + relevant, then it should display a suitable message. After they have made + a selection to either add a name, change a name, delete a name or view + all the names, they should see the menu again without having to restart + the program. The program should be made as easy to use as possible.""" + lmenu =""" + 1) Agregar nombre + 2) Editar nombre + 3) Borrar nombre + 4) Ver nombres + 0) Salir + """ + names = [] + def menu(): + while True: + print(lmenu) + sel = int(input("Ingresa una opción: ")) + match sel: + case 1: + add_name() + case 2: + edit_name() + case 3: + del_name() + case 4: + show_names() + case 0: + break + case _: + print("Debes ingresar una opción válida") + + def add_name(): + name = input("Ingresa el nombre: ").title() + names.append(name) + + def edit_name(): + name = input("Ingresa el nombre que quieres editar: ") + if name in names: + new_name = input("Ingresa el nuevo nombre: ").title() + names[names.index(name)] = new_name + else: + print(f"{name} no esta en la lista") + + def del_name(): + name = input("Ingresa el nombre que quieres borrar: ").title() + if name in names: + del names[names.index(name)] + else: + print(f"{name} no esta en la lista") + + def show_names(): + print("\nNombres:") + for name in names: + print(name) + + menu() + + def sub_122(self): + """Create the following menu: + 1) Add to file + 2) View all records + 3) Quit program + Enter the number of your selection: + If the user selects 1, allow them to add to a file called Salaries.csv + which will store their name and salary. If they select 2 it should + display all records in the Salaries.csv file. If they select 3 it should + stop the program. If they select an incorrect option they should see an + error message. They should keep returning to the menu until they select + option 3.""" + from os import getcwd as pwd + from os.path import isfile + import csv + file_path = f"{pwd()}/interm/files/Salaries.csv" + lmenu =""" + 1) Agregar a archivo + 2) Ver registros + 3) Salir + """ + def menu(): + while True: + print(lmenu) + sel = int(input("Ingresa una opción: ")) + match sel: + case 1: + add_to() + case 2: + view_all() + case 3: + break + case _: + print("Debes ingresar una opción válida") + + def add_to(): + print("\nAgregando un nuevo registro") + name = input("Ingresa el nombre: ").title() + salary = input("Ingresa el salario: ") + new_data = [name, salary] + with open(file_path, 'a') as file: + writer = csv.writer(file) + writer.writerow(new_data) + + def view_all(): + if isfile(file_path): + with open(file_path, 'r') as file: + reader = csv.reader(file) + contnt = list(reader) + for i, line in enumerate(contnt): + print(str(i).ljust(3), line[0].ljust(12), line[1].ljust(8)) + else: + print("El archivo aún no existe, agrega un registro para crearlo") + + menu() + + def sub_123(self): + """In Python, it is not technically possible to directly delete a record + from a .csv file. Instead you need to save the file to a temporary list + in Python, make the changes to the list and then overwrite the original + file with the temporary list. + Change the previous program to allow you to do this. Your menu should + now look like this: + 1) Add to file + 2) View all records + 3) Delete a record + 4) Quit program + Enter the number of your selection:""" + from os import getcwd as pwd + from os.path import isfile + import csv + file_path = f"{pwd()}/interm/files/Salaries.csv" + lmenu =""" + 1) Agregar a archivo + 2) Ver registros + 3) Eliminar un registro + 4) Salir + """ + def menu(): + while True: + print(lmenu) + sel = int(input("Ingresa una opción: ")) + match sel: + case 1: + add_to() + case 2: + view_all() + case 3: + del_reg() + case 4: + break + case _: + print("Debes ingresar una opción válida") + + def add_to(): + print("\nAgregando un nuevo registro") + name = input("Ingresa el nombre: ").title() + salary = input("Ingresa el salario: ") + new_data = [name, salary] + with open(file_path, 'a') as file: + writer = csv.writer(file) + writer.writerow(new_data) + + def view_all(): + if isfile(file_path): + with open(file_path, 'r') as file: + reader = csv.reader(file) + contnt = list(reader) + for i, line in enumerate(contnt): + print(str(i).ljust(3), line[0].ljust(12), line[1].ljust(8)) + else: + print("El archivo aún no existe, agrega un registro para crearlo") + + def del_reg(): + view_all() + with open(file_path, 'r') as file: + reader = csv.reader(file) + contnt = list(reader) + to_del = int(input("Ingresa el número del registro a borrar: ")) + if to_del < len(contnt): + del contnt[to_del] + with open(file_path, 'w') as file: + writer = csv.writer(file) + writer.writerows(contnt) + + menu() diff --git a/main.py b/main.py index 2bbb6ff..7e919ab 100755 --- a/main.py +++ b/main.py @@ -70,7 +70,7 @@ def interm_challenges(): clear() print(content) opcs_default(1) - selection = user_input(6) + selection = user_input(7) match selection: case 1: interm.challenges01() @@ -85,8 +85,7 @@ def interm_challenges(): case 6: interm.challenges06() case 7: - #interm.challenges07() - pass + interm.challenges07() case 'v': return case 's':