UTFSM/Programación/Jupyter/Tarea2.ipynb

164 lines
5.5 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"id": "73850839",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=== SISTEMA DE FACTURACIÓN KEWA-WEI ===\n",
"\n",
"Ingrese las llamadas separadas por comas (ej: 56897456 01:35, 98657458 10:20, ...)\n",
"Termine con: 99999999 00:00\n",
"\n",
"RESULTADO:\n",
"Número más frecuente: 98657458\n",
"Cantidad de llamadas: 5\n",
"Total a pagar: $60\n"
]
}
],
"source": [
"# Separa llamadas y entrega valores de minutos y segundos.\n",
"def leer_llamadas():\n",
" entrada = input().strip()\n",
" llamadas_str = [llamada.strip() for llamada in entrada.split(',')]\n",
" llamadas = []\n",
"\n",
" for llamada_str in llamadas_str:\n",
" if not llamada_str:\n",
" continue\n",
" partes = llamada_str.split()\n",
"\n",
" if len(partes) != 2:\n",
" print(f\"Formato incorrecto en: {llamada_str}. Se omitirá.\")\n",
" continue\n",
"\n",
" numero = partes[0]\n",
" tiempo = partes[1]\n",
" if ':' not in tiempo:\n",
" print(f\"Formato de tiempo incorrecto en: {llamada_str}. Se omitirá.\")\n",
" continue\n",
" minutos_str, segundos_str = tiempo.split(':')\n",
" \n",
" # Verificar que minutos_str y segundos_str sean números\n",
" if not minutos_str.isdigit() or not segundos_str.isdigit():\n",
" continue\n",
" \n",
" minutos = int(minutos_str)\n",
" segundos = int(segundos_str)\n",
" \n",
" # Verificar si es la marca de fin\n",
" if numero == \"99999999\" and minutos == 0 and segundos == 0:\n",
" break\n",
" \n",
" # Validar rangos de tiempo (segundos entre 0 y 59)\n",
" if minutos < 0 or segundos < 0 or segundos >= 60:\n",
" continue\n",
" \n",
" llamadas.append((numero, minutos, segundos))\n",
" \n",
" return llamadas\n",
"\n",
"# Encuentra el número que más se repite en la lista de llamadas.\n",
"def numero_frecuente(llamadas):\n",
" if len(llamadas) == 0:\n",
" return \"\"\n",
" \n",
" conteo_numeros = {}\n",
" \n",
" # Recorrer cada llamada en la lista y conteo de números\n",
" for llamada in llamadas:\n",
" numero_actual = llamada[0]\n",
" if numero_actual in conteo_numeros:\n",
" conteo_numeros[numero_actual] = conteo_numeros[numero_actual] + 1\n",
" else:\n",
" conteo_numeros[numero_actual] = 1\n",
" \n",
" maximo_repeticiones = 0\n",
" numero_mas_llamado = \"\"\n",
" \n",
" # Revisar todos los números y sus conteos\n",
" for numero, cantidad in conteo_numeros.items():\n",
" if cantidad > maximo_repeticiones:\n",
" maximo_repeticiones = cantidad\n",
" numero_mas_llamado = numero\n",
" \n",
" return numero_mas_llamado\n",
"\n",
"# Calcula el total a pagar según las reglas de facturación.\n",
"def calcular_factura(llamadas, numero_frecuente):\n",
" if not llamadas:\n",
" return 0\n",
" \n",
" # Cobro por establecimiento de llamada\n",
" cantidad_llamadas = len(llamadas)\n",
" costo_llamadas = cantidad_llamadas * 3\n",
" \n",
" # Calcular minutos y segundos (sin contar el número frecuente)\n",
" minutos_totales = 0\n",
" segundos_totales = 0\n",
" \n",
" for numero, minutos, segundos in llamadas:\n",
" if numero != numero_frecuente:\n",
" minutos_totales += minutos\n",
" segundos_totales += segundos\n",
" \n",
" minutos_extra = segundos_totales // 60\n",
"\n",
" if segundos_totales % 60 != 0:\n",
" minutos_extra += 1\n",
"\n",
" minutos_a_cobrar = minutos_totales + minutos_extra\n",
" costo_minutos = minutos_a_cobrar * 5\n",
" total = costo_llamadas + costo_minutos\n",
" return total\n",
"\n",
"# Programazo\n",
"print(\"=== SISTEMA DE FACTURACIÓN KEWA-WEI ===\\n\")\n",
"print(\"Ingrese las llamadas separadas por comas (ej: 56897456 01:35, 98657458 10:20, ...)\")\n",
"print(\"Termine con: 99999999 00:00\")\n",
" \n",
"\n",
"llamadas = leer_llamadas()\n",
"\n",
"if not llamadas:\n",
" print(\"No hay llamadas válidas para facturar.\")\n",
"else:\n",
" numero_frec = numero_frecuente(llamadas)\n",
" total = calcular_factura(llamadas, numero_frec)\n",
" \n",
" print(f\"\\nRESULTADO:\")\n",
" print(f\"Número frecuente: {numero_frec}\")\n",
" print(f\"Cantidad de llamadas: {len(llamadas)}\")\n",
" print(f\"Total a pagar: ${total}\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}