jedesa> hey 

jedesa: kin kon kan kon amigojapan Haniibooru 

amgigojapan: hey jedesa ! 

amgigojapan: jedesa: un segundo 

amgigojapan: jajaja jedesa, eso fue gracioso 

amgigojapan: jedesa: ¿empezamos? 

jedesa: ok amigojapan 

jedesa: ¿qué vamos a aprender hoy? 

amgigojapan: jedesa: bueno, déjame mirar mis notas 

amgigojapan: jedesa: lecciones de programación, lo siguiente prioridad de operadores, manejo de cadenas, clases, recursión 

amgigojapan: jedesa: de más fácil a más difícil orden 

amgigojapan: jedesa: creo que la recursión puede ocupar una lección completa por sí sola 

amgigojapan: y puede que necesitemos tomar prestadas algunas de mis lecciones de Piensa como una computadora para ello 

jedesa: hmm 

amgigojapan: jedesa: ok, ¿estás listo? 

jedesa: ¿qué es Piensa como una computadora? 

jedesa: ¿un canal de YouTube? 

amgigojapan: jedesa: es un juego de mesa que estoy haciendo para enseñar programación, aún no te lo había contado. 

amgigojapan: jedesa: aún no lo he publicado. 

amgigojapan: jedesa: no está terminado. 

jedesa: Ah, vale. 

jedesa: por cierto. 

amgigojapan: ¿sí? 

jedesa: he dedicado un poco de tiempo a repasar algunos conceptos fundamentales de programación. 

jedesa: espero poder seguirlo sin mucha dificultad. 

amgigojapan: vale, ¿sabes qué son los operadores? ¿Y cuál es su prioridad? 

jedesa: hmm, ¿símbolos como +, -, AND, OR...? 

amgigojapan: sí. 

amgigojapan: ¿conoces la prioridad? 

amgigojapan: jedesa: como si haces 2*2+1, ¿cuál es la diferencia entre eso y 1+2*2? 

jedesa: en realidad no, para ningún idioma específico 

amgigojapan: jedesa: esto es generalmente lo mismo en todos los idiomas 

jedesa: quiero decir que para la aritmética * tiene precedencia 

amgigojapan: sí, ok, sí 

amgigojapan: entonces lo sabes 

amgigojapan: jedesa: ¿sabías que puedes rodear las operaciones con paréntesis para cambiar la prioridad? 

jedesa: sí 

jedesa: entonces como 

amgigojapan: ah ok, déjame mencionarlo para las otras personas que puedan ver la lección más tarde 

amgigojapan: como decir que 1+(2*2) es lo mismo que 2*2+1 

jedesa: sí, me gustaría saber lo que tú también sabes 

amgigojapan: bueno, eso es todo para la prioridad de operadores, si alguna vez tienes dudas, simplemente rodéalo con paréntesis para que sepas qué va primero 

jedesa: Ok 

amgigojapan: jedesa: ok, entonces supongo que podemos continuar con el manejo de cadenas 

amgigojapan: jedesa: entonces una cadena es algo como str="abc" 

amgigojapan: jedesa: en python si quieres "concatenar" (conectar dos cadenas) una cadena una forma de hacerlo, es usar el signo +, como esto str = "abc" + "def"

jedesa: Ya veo 

amgigojapan: jedesa: También puedes hacerlo dentro de una instrucción print, así: print("hola " + nombre) 

amgigojapan: jedesa: donde nombre es una variable de cadena 

amgigojapan: jedesa: ¿Por qué no haces un pequeño ejercicio? Obtén la entrada del usuario preguntándole su nombre y muestra "hola" seguido de su nombre. 

jedesa: Sí, de acuerdo 

amgigojapan: :) 

amgigojapan: Entonces, pásame el código.

jedesa:

print("what is your name?")
name=str(input())
print("hello " + name + "!")

amgigojapan: déjame ver 

amgigojapan: ¡perfecto jedesa! 

jedesa: ¡sí! 

amgigojapan: jedesa: así es como saludo a la gente en el BBS 

amgigojapan: jedesa: ahora, mira el siguiente código:

main_string = "Hello, world!"
substring = "world"
if substring in main_string:
print(f'"{substring}" was found in the string.') # Output: "world" was found in the string.
else:
print(f'"{substring}" was not found.')
jedesa: Ya veo amgigojapan: sí amgigojapan: así es como puedes verificar si una subcadena, una cadena se encuentra dentro de otra cadena jedesa: entonces una cadena está hecha de un montón de caracteres, con eso también puedes agregarla o restarla amgigojapan: jedesa: luego en python tienes str.find() para encontrar la posición de una subcadena en una cadena, esto es bastante útil, porque pronto te enseñaré cómo usar la posición jedesa: De acuerdo amgigojapan: jedesa: no, esto es aparte de la lección de operadores, una cadena es solo un montón de caracteres amgigojapan: agregar una cadena a otra cadena en python se llama "concatenación" y en python sucede que es + lo que lo hace, pero no es matemáticas amgigojapan: como en PHP la concatenación se hace usando . no + jedesa: hmm ya veo amgigojapan: entonces en PHP harías $str = "abc" . "def"; amgigojapan: sí amgigojapan: pero ya nos preocuparemos por PHP más tarde amgigojapan: jedesa: en Python y JS es + en LUA es .. y en PHP es . amgigojapan: pero siguen siendo similares jedesa: . .. + son todos operadores en sus respectivos lenguajes amgigojapan: sí jedesa amgigojapan: jedesa: ahora prueba este código: text = "Hello, world!"
position = text.find("world")
print(position) # Output: 7
jedesa: Vale jedesa: entonces 7 es de la longitud de "Hola, " amgigojapan: jedesa: ahora esto es muy útil, porque si conocemos la posición de una subcadena en una cadena podemos hacer muchas operaciones con ella jedesa: ¿tenemos algunos ejemplos? jedesa: no tengo ninguna idea por ahora amgigojapan: ¡sí, exactamente! jedesa ahora intenta un pequeño ejercicio y muéstrame si puedes hacer un programa que averigüe si el nombre de alguien contiene la letra a amgigojapan: jedesa: y si la contiene, dime en qué posición de la palabra está amgigojapan: jedesa: vale, haré un ejemplo mientras tanto jedesa: # https://www.programiz.com/online-compiler/3zEZ7Dtxl2FHy
substr="a" print(f'"what is your name?"') name=str(input()) print(f'"{substr}" is at position {name.find(substr)}') amgigojapan: jedesa: es útil porque, por ejemplo: text = "I love Python" new_text = text[:2] + text[7:] print(new_text) #output is "I Python" amgigojapan: eliminará la palabra "amor" de esa nueva variable amgigojapan: déjame ver amgigojapan: ok, eso funciona jedesa, aunque ten en cuenta que si el nombre no contiene "a", devolverá -1 amgigojapan: lo que significa "no se encontró" jedesa: Sí jedesa: Se podría agregar para manejar palabras inexistentes amgigojapan: jedesa: ahora, haz un programa que tome la entrada del usuario para una cadena1, luego la entrada del usuario para una cadena2, y elimine la palabra de la cadena e imprima el resultado amgigojapan: sí amgigojapan: tómate tu tiempo jedesa: ¿hmm? amgigojapan: ¿alguna pregunta? jedesa: ¿eliminar una subcadena en la cadena1, basándose en la entrada de la cadena2? amgigojapan: sí amgigojapan: jedesa: oh, olvidé enseñarte un componente necesario para ese programa jedesa: en realidad déjame intentarlo amgigojapan: jedesa: len(string) te da la longitud de una cadena amgigojapan: ¿necesitas una pista? jedesa: # https://www.programiz.com/online-compiler/2HhtjMY99LFzU
print("input string1") string1 = str(input()) print("input string2") string2 = str(input()) pos = string1.find(string2) while pos > -1: string1 = string1[:pos] + string1[pos+len(string2):] pos = string1.find(string2) print(string1) amgigojapan: déjame ver jedesa: Esto debería funcionar amgigojapan: ¡Sí, funciona! jedesa :) ¡Genial! amgigojapan: jedesa: Ahora haz un programa que tome 3 cadenas, similar a este programa, pero ahora la tercera cadena debe ocupar el lugar de la palabra que se eliminó jedesa: De acuerdo # https://www.programiz.com/online-compiler/31ZQbvUMBRE3C
print("input string1:") string1 = str(input()) print("input string2:") string2 = str(input()) print("input string3:") string3 = str(input()) pos = string1.find(string2) while pos > -1: string1 = string1[:pos] + string3 + string1[pos+len(string2):] pos = string1.find(string2) print(string1) #example output input string1: HELLO WORLD BYE input string2: WORLD input string3: MARS HELLO MARS BYE jedesa: wow, rápido amgigojapan: déjame ver amgigojapan: ¡bien jedesa! amgigojapan: jedesa: creo que ya dominas lo básico del manejo de cadenas :) jedesa: print("ehehe") amgigojapan: :) amgigojapan: jedesa: Podría darte una tarea difícil sobre manejo de cadenas, si quieres jedesa: de acuerdo jedesa: espera jedesa: todavía tenemos clases y recursión jedesa: hmm de acuerdo amgigojapan: jedesa: de acuerdo, no lo hagas ahora, tomará demasiado tiempo, pero la tarea es hacer el juego del ahorcado, usando manejo de cadenas jedesa: ya veo amgigojapan: jedesa: sí, la recursión puede venir después, y no creo que tengamos tiempo para clases hoy amgigojapan: jedesa: puedes tomarte una semana entera para hacer esta tarea jedesa: lo intentaré más tarde jedesa: de acuerdo amigojapan — jedesa kin kon kan kon jedesa: sí, gracias por tu tiempo hoy :3 amgigojapan: ¡gracias por tu tiempo también! La tarea de Jedesa print("The Hangman Game: Guess a Distro Edition!") import random, string # pick a random distro def genword(): words = ["CachyOS", "Mint", "MX Linux", "Debian", "EndeavourOS", "Pop!_OS", "Zorin", "Manjaro", "Fedora", "Ubuntu", "AnduinOS", "openSUSE", "Nobara", "elementary", "NixOS", "Bluestar", "KDE neon", "antiX", "BigLinux", "Bazzite", "Arch", "Garuda", "Q4OS", "TUXEDO", "FreeBSD", "PikaOS", "SparkyLinux", "Kali", "AlmaLinux", "Puppy", "Alpine", "MiniOS", "CentOS", "PCLinuxOS", "Tails", "Voyager", "EasyOS", "Linuxfx", "Kubuntu", "Solus", "Lite", "Devuan", "Artix", "Parrot", "AerynOS", "Void", "Exton", "DragonOS", "Omarchy", "ALT", "Rocky", "FunOS", "Lubuntu", "OpenMandriva", "Slackware", "Gentoo", "Commodore", "Peppermint", "deepin", "Ultimate", "Mageia", "PorteuX", "Red Hat", "Xubuntu", "AV Linux", "blendOS", "MODICIA", "Archcraft", "Kodachi", "MocaccinoOS", "ReactOS", "Tiny Core", "ArchBANG", "KaOS", "Bodhi", "GhostBSD", "KDE Linux", "Ultramarine", "Gnoppix", "Vanilla", "ZimaOS", "Calculate", "FydeOS", "Mabox", "Nitrux", "Qubes", "SmartOS", "AxOS", "MagOS", "Feren", "4MLinux", "OpenBSD", "GNOME OS", "Ubuntu Studio", "Chimera", "Proxmox", "Besgnulinux", "Regata", "TrueNAS", "HackerOS", "BunsenLabs", "MakuluLinux", "RebornOS", "Oracle", "Emmabuntüs", "SDesk", "Murena", "Expirion", "Rhino", "Aurora", "Haiku", "Porteus", "Wifislax", "GLF", "Ubuntu MATE", "Endless", "Dr.Parted", "TROMjaro", "VailuxOS", "ChromeOS", "iDeal", "Volumio", "Talos", "GXDE", "Br OS", "NebiOS", "Oreon", "SliTaz", "AUSTRUMI", "DragonFly", "openmamba", "RasPiOS", "Kicksecure", "LinuxHub", "openKylin", "DietPi", "Neptune", "postmarketOS", "Security Onion", "Whonix", "Damn Small", "Athena", "MidnightBSD", "Pardus", "extrox", "Ubuntu Cinnamon", "Ufficio Zero", "Liya", "OmegaLinux", "Genuen", "siduction", "Shanios", "Synex", "Kiro", "ROSA", "GParted", "Lingmo", "pearOS", "Clonezilla", "Mauna", "Nyarch", "Redox", "StormOS", "XIVA Studio", "SystemRescue", "Archman", "Guix System", "Ubuntu Budgie", "LFS", "HeliumOS", "Obarun", "SUSE", "ExTiX", "iodéOS", "Loc-OS", "RefreshOS", "Vendefoul", "Asmi", "Pearl", "CRUX", "T2 Linux", "Debian Edu", "OpenMediaVault", "LainOS", "RELIANOID", "Rescuezilla", "BlueOnyx", "GrapheneOS", "NetHydra", "NuTyX", "AgarimOS", "CuerdOS", "OpenIndiana", "Ubuntu Unity", "IPFire", "Soplos", "SysLinuxOS", "Armbian", "Batocera", "Bluefin", "Exe", "Finnix", "SteamOS", "FreedomBox", "Grml", "Trisquel", "ELEGANCE", "NetBSD", "Univention", "GoboLinux", "Lakka", "Slimbook OS", "Alien-OS", "OPNsense", "Slackel", "Tribblix", "Ubuntu Kylin", "Xray_OS", "BackBox", "HardenedBSD", "NomadBSD", "d77void", "DESERT", "Edubuntu", "KolibriOS", "LibreELEC", "Plop", "UBports", "umbrelOS", "Zephix", "Canaima", "Elive", "ObsidianOS", "openEuler", "Drauger", "Melawy", "MIRACLE", "PakOS", "Pisi", "VyOS", "WM Live", "Arkane", "Sculpt", "Berry", "Daphile", "Mobian", "NethServer", "spirit OS", "Calam", "Plamo", "Redcore", "Refracta", "Vinari", "arcOS", "Luberri", "Venom", "Vipnix", "Aeon", "DynFi", "GuideOS", "Unraid", "Zenwalk", "Adélie", "BSDRP", "FuguIta", "Kamarada", "RED OS", "Tsurugi", "ElysiaOS", "Peropesis", "Slint", "Bedrock", "Crunchbangplusplus", "MAX", "AOSC", "CAINE", "Netrunner", "Shebang", "SolydXK", "XigmaNAS", "46=", "Parch", "RebeccaBlackOS", "Recalbox", "Flatcar", "Kumander", "Lilidog", "PrismLinux", "Solaris", "StartOS", "Accessible-Coconut", "Live Raizo", "Parted Magic", "Pentoo", "Snal", "ATZ Linux", "Clear NDR", "NST", "Ubuntu Pack", "DebLight", "Kamuriki", "LinuxConsole", "TeaLinux", "Zentyal", "DEKUVE", "LliureX", "Predator-OS", "Skywave", "Vine", "XeroLinux", "KANOTIX", "LinuxCNC", "Macaroni", "Runtu", "NethSecurity", "pfSense", "AcreetionOS", "Rockstor", "Fatdog64", "PelicanHPC", "Porteus Kiosk", "UOS", "Zenned", "Exherbo", "gabeeOSLinux", "OsoLinux", "Planeta Tecno", "PLD", "Quarkos", "secureblue", "TileOS", "Ventoy", "AlterOS", "LazyLinux", "Secure-K", "StratOS", "Archriot", "Berserk Arch", "Ditana", "HamoniKR", "Noid", "Origami", "OSMC", "RISC", "Zenclora", "Astra", "Blade", "Flora", "Koozali", "paldo", "Super Grub2", "OmniOS", "Escuelas", "Helwan", "mAid", "rlxos", "AnuBitux", "Catbird", "Essora", "Salix", "TTOS", "Uncom", "Thinstation", "YunoHost", "AçorOS", "AfagOS", "DAT", "Lernstick", "Linux Schools", "Milis", "PelandukOS", "Vincent", "Ximper", "OSGeoLive", "PrimTux", "Smoothwall", "TurnKey", "UBOS", "Asahi", "BRGV-OS", "Green", "nakeDeb", "Xebian", "Bicom", "LangitKetujuh", "NexentaStor", "TobbeOS", "Vitalinux", "BOSS", "LxPup", "OviOS", "Quirinux", "UBLinux", "Ubuntu Sway", "Fluxuan", "FUSS", "Maple", "REMnux", "Skudonet", "AiO-SRT", "CloudLinux", "Nemesis", "RDS", "RSS", "Senpai", "Side", "XCP-ng", "< 1 or not g.isalpha(): print("Guess with case-sensitive alphabet:") g = str(input()) return g # run until quit or game over retry = True score = 0 while retry: # generate word word = genword() print("Hint:", len(word), "characters long") # print("ANSWER:", word) # how hangman works # the word list should have its copy value hidden # player make a guess # if it's wrong, add to wrong guess, advance to gallows # if it's correct, update character display, halt gallows # if health ran out, game is over # if guessed all characters correctly, continue game # hangman start # 10 health points # 20 if long word health = 20 if len(word) > 12 else 10 if health > 10: print("Good News! HP x20") progress = [ "_" for i in range(0, len(word)) ] wrong = [] while health > 0 and "_" in progress : iscorrect = False pguess = guess() # player guess iscorrect = pguess in word # check guess if pguess in wrong or pguess in progress: print("Already Guessed!") elif iscorrect: print("Correct!") progress = gallows(word, progress, pguess) else: print("Wrong!") wrong.append(pguess) health = health - 1 print("Health :", health) print("Progress:", progress) print("Miss :", wrong) # check win if "_" in progress: print("Hanged!") retry = False else: print("Good Work") score = score + 1 # retry game if retry: print("Enter '0' to exit or any key to continue") if str(input()) == "0": retry = False print("Game Over. Correct guesses:", str(score) + " word:" + word)