python_by_example/interm/interm07.py

285 lines
11 KiB
Python
Raw Permalink Normal View History

2023-11-14 23:29:30 -03:00
class interm007:
def sub_118(self):
2023-11-22 11:54:37 -03:00
"""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."""
2023-11-14 23:29:30 -03:00
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
2023-11-22 11:54:37 -03:00
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."""
2023-11-14 23:29:30 -03:00
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):
2023-11-22 11:54:37 -03:00
"""Display the following menu to the user: 1) Addition
2) Subtraction
Enter 1 or 2:
2023-11-14 23:29:30 -03:00
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.
2023-11-17 13:26:09 -03:00
Work out the correct answer and return both the user's answer and the
2023-11-22 11:54:37 -03:00
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 menu you should display a suitable message."""
2023-11-14 23:29:30 -03:00
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):
2023-11-22 11:54:37 -03:00
"""Create the following menu: 1) Add to file
2) View all records
3) Quit program
Enter the number of your selection:
2023-11-14 23:29:30 -03:00
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
2023-11-22 11:54:37 -03:00
file with the temporary list. Change the previous program to allow you to
do this. Your menu should have the new option: 3) Delete a record"""
2023-11-14 23:29:30 -03:00
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()