<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Foros Python - General]]></title>
		<link>https://foro.recursospython.com/</link>
		<description><![CDATA[Foros Python - https://foro.recursospython.com]]></description>
		<pubDate>Tue, 14 Apr 2026 17:41:18 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[ORIENTACION]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1517</link>
			<pubDate>Tue, 21 Jan 2025 12:38:43 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1671">Mezu</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1517</guid>
			<description><![CDATA[Buenas tardes se que no es la temática que se viene tratando en este foro, pero solicito de su ayuda comunidad.<br />
<br />
Soy un aficionado en la creación de bases de datos en Access ahora quiero dar el salto para aprender un lenguaje de programación. Quiero en esta oportunidad con todo el respeto hacia ustedes los desarrolladores en Python preguntar lo siguiente:<br />
Con Python puedo crear un programa o software para un colegio, donde pueda llevar los diferentes registros de estudiantes, salones, cursos, áreas o materias y calificaciones, sacar promedios e informes y que me expida boletín de calificaciones. Será que se puede?<br />
Muchas gracias por la ayuda Bendiciones a cada uno de ustedes.]]></description>
			<content:encoded><![CDATA[Buenas tardes se que no es la temática que se viene tratando en este foro, pero solicito de su ayuda comunidad.<br />
<br />
Soy un aficionado en la creación de bases de datos en Access ahora quiero dar el salto para aprender un lenguaje de programación. Quiero en esta oportunidad con todo el respeto hacia ustedes los desarrolladores en Python preguntar lo siguiente:<br />
Con Python puedo crear un programa o software para un colegio, donde pueda llevar los diferentes registros de estudiantes, salones, cursos, áreas o materias y calificaciones, sacar promedios e informes y que me expida boletín de calificaciones. Será que se puede?<br />
Muchas gracias por la ayuda Bendiciones a cada uno de ustedes.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Recuperar contraseña fichero ZIP]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1516</link>
			<pubDate>Tue, 21 Jan 2025 09:37:02 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1670">JAMPGD</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1516</guid>
			<description><![CDATA[Buenas tardes.<br />
Llevo poco tiempo aprendiendo PYTHON.<br />
Tengo un problema con un fichero ZIP del cuál no recuerdo la contraseña.<br />
He localizado este programa pero no logro que funcione.<br />
El fichero esta en la siguiente localización:  <span style="font-weight: bold;" class="mycode_b">c:\072023JULIO2023.ZIP</span><br />
Utilizo SPYDER.<br />
Por favor rogaría que lo reviséis.<br />
Muchas gracias.<br />
<br />
# -*- coding: utf-8 -*-<br />
<br />
# Nombre del archivo ZIP protegido con contraseña<br />
archivo_zip = "c:/072023JULIO2023.zip"<br />
<br />
# Lista de caracteres que se usarán para realizar el ataque de fuerza bruta (puedes personalizarla según tus necesidades)<br />
caracteres = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#&#36;%^&amp;*()_-+=[]{}|;:,.&lt;&gt;?`~"<br />
<br />
# Longitud máxima de la contraseña a probar<br />
longitud_maxima = 25<br />
<br />
def fuerza_bruta():<br />
    for longitud in range(1, longitud_maxima + 1):<br />
        intento = [0] * longitud<br />
        while True:<br />
            # Generar la contraseña actual basada en el intento actual<br />
            contraseña = ''.join([caracteres[i] for i in intento])<br />
<br />
            try:<br />
                with zipfile.ZipFile(archivo_zip, "r") as zf:<br />
                    zf.extractall(pwd=bytes(contraseña, 'utf-8'))<br />
                print(f"Contraseña encontrada: {contraseña}")<br />
                return<br />
            except Exception as e:<br />
                # Continuar con el siguiente intento<br />
                pass<br />
            <br />
            # Aumentar el intento<br />
            posicion = 0<br />
            while True:<br />
                if posicion == longitud:<br />
                    break<br />
                intento[posicion] += 1<br />
                if intento[posicion] == len(caracteres):<br />
                    intento[posicion] = 0<br />
                    posicion += 1<br />
                else:<br />
                    break<br />
<br />
if __name__ == "__main__":<br />
    fuerza_bruta()]]></description>
			<content:encoded><![CDATA[Buenas tardes.<br />
Llevo poco tiempo aprendiendo PYTHON.<br />
Tengo un problema con un fichero ZIP del cuál no recuerdo la contraseña.<br />
He localizado este programa pero no logro que funcione.<br />
El fichero esta en la siguiente localización:  <span style="font-weight: bold;" class="mycode_b">c:\072023JULIO2023.ZIP</span><br />
Utilizo SPYDER.<br />
Por favor rogaría que lo reviséis.<br />
Muchas gracias.<br />
<br />
# -*- coding: utf-8 -*-<br />
<br />
# Nombre del archivo ZIP protegido con contraseña<br />
archivo_zip = "c:/072023JULIO2023.zip"<br />
<br />
# Lista de caracteres que se usarán para realizar el ataque de fuerza bruta (puedes personalizarla según tus necesidades)<br />
caracteres = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#&#36;%^&amp;*()_-+=[]{}|;:,.&lt;&gt;?`~"<br />
<br />
# Longitud máxima de la contraseña a probar<br />
longitud_maxima = 25<br />
<br />
def fuerza_bruta():<br />
    for longitud in range(1, longitud_maxima + 1):<br />
        intento = [0] * longitud<br />
        while True:<br />
            # Generar la contraseña actual basada en el intento actual<br />
            contraseña = ''.join([caracteres[i] for i in intento])<br />
<br />
            try:<br />
                with zipfile.ZipFile(archivo_zip, "r") as zf:<br />
                    zf.extractall(pwd=bytes(contraseña, 'utf-8'))<br />
                print(f"Contraseña encontrada: {contraseña}")<br />
                return<br />
            except Exception as e:<br />
                # Continuar con el siguiente intento<br />
                pass<br />
            <br />
            # Aumentar el intento<br />
            posicion = 0<br />
            while True:<br />
                if posicion == longitud:<br />
                    break<br />
                intento[posicion] += 1<br />
                if intento[posicion] == len(caracteres):<br />
                    intento[posicion] = 0<br />
                    posicion += 1<br />
                else:<br />
                    break<br />
<br />
if __name__ == "__main__":<br />
    fuerza_bruta()]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Valor de fecha diferente al que esta en la nube]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1515</link>
			<pubDate>Thu, 09 Jan 2025 09:08:40 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1665">Carlos</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1515</guid>
			<description><![CDATA[Saludos grupo estoy haciendo un programa que usa conexion a Firebase, tengo un dilema que no logro resolver cuando consulta un campo TimeStamp en un documento al hacer el print del valor en pyhton me da un dia mas del que esta en la base de datos.<br />
<br />
Registro Firebase<br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font">8 de enero de 2025, 11:02:13 p.m. UTC-4</span></span> <br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font">Resultado al imprimir el campo desde python </span></span><br />
<br />
<span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font"><span style="color: #000000;" class="mycode_color">2025-01-</span><span style="color: #ff4136;" class="mycode_color">09</span><span style="color: #000000;" class="mycode_color"> 03:02:13.887000+00:00</span></span><br />
<br />
<span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font"><span style="color: #000000;" class="mycode_color">Como pueden ver me da 1 dia adicional al valor</span></span><br />
<br />
<span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font"><span style="color: #000000;" class="mycode_color">Que me pueden recomendar necesito resolver esto pues ese valor es actualizado en un sistema local con SQL.</span></span><br />
<br />
<span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font"><span style="color: #000000;" class="mycode_color">Agradecido de sus comentarios.</span></span>]]></description>
			<content:encoded><![CDATA[Saludos grupo estoy haciendo un programa que usa conexion a Firebase, tengo un dilema que no logro resolver cuando consulta un campo TimeStamp en un documento al hacer el print del valor en pyhton me da un dia mas del que esta en la base de datos.<br />
<br />
Registro Firebase<br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font">8 de enero de 2025, 11:02:13 p.m. UTC-4</span></span> <br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font">Resultado al imprimir el campo desde python </span></span><br />
<br />
<span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font"><span style="color: #000000;" class="mycode_color">2025-01-</span><span style="color: #ff4136;" class="mycode_color">09</span><span style="color: #000000;" class="mycode_color"> 03:02:13.887000+00:00</span></span><br />
<br />
<span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font"><span style="color: #000000;" class="mycode_color">Como pueden ver me da 1 dia adicional al valor</span></span><br />
<br />
<span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font"><span style="color: #000000;" class="mycode_color">Que me pueden recomendar necesito resolver esto pues ese valor es actualizado en un sistema local con SQL.</span></span><br />
<br />
<span style="font-family: Roboto, 'Helvetica Neue', sans-serif;" class="mycode_font"><span style="color: #000000;" class="mycode_color">Agradecido de sus comentarios.</span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Duda python para descargar pdf]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1513</link>
			<pubDate>Mon, 30 Dec 2024 03:11:59 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1660">ignasi.alberti</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1513</guid>
			<description><![CDATA[Hola, <br />
Estoy programando un pequeño código que va entrando en diferentes links y debe navegar por una página y descargar los pdfs que encuentre, pero por algún motivo no los detecta, y por tanto, no los descarga. Les dejo el código resumido para un caso a ver si pueden ayudarme:<br />
<span style="color: #cccccc;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font"><span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">pandas</span> <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #4ec9b0;" class="mycode_color">pd</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> <span style="color: #4ec9b0;" class="mycode_color">selenium</span> <span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">webdriver</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> <span style="color: #4ec9b0;" class="mycode_color">selenium</span>.<span style="color: #4ec9b0;" class="mycode_color">webdriver</span>.<span style="color: #4ec9b0;" class="mycode_color">common</span>.<span style="color: #4ec9b0;" class="mycode_color">by</span> <span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">By</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">time</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">os</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">requests</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> <span style="color: #4ec9b0;" class="mycode_color">selenium</span>.<span style="color: #4ec9b0;" class="mycode_color">webdriver</span>.<span style="color: #4ec9b0;" class="mycode_color">support</span> <span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">expected_conditions</span> <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #4ec9b0;" class="mycode_color">EC</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> <span style="color: #4ec9b0;" class="mycode_color">selenium</span>.<span style="color: #4ec9b0;" class="mycode_color">webdriver</span>.<span style="color: #4ec9b0;" class="mycode_color">support</span>.<span style="color: #4ec9b0;" class="mycode_color">ui</span> <span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">WebDriverWait</span><br />
<span style="color: #6a9955;" class="mycode_color"># Crear una carpeta per guardar els documents descarregats</span><br />
<span style="color: #9cdcfe;" class="mycode_color">carpeta_descargas</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #ce9178;" class="mycode_color">"Documents_Descarregats_Ajuntament"</span><br />
<span style="color: #c586c0;" class="mycode_color">if</span> <span style="color: #569cd6;" class="mycode_color">not</span> <span style="color: #4ec9b0;" class="mycode_color">os</span>.<span style="color: #9cdcfe;" class="mycode_color">path</span>.<span style="color: #dcdcaa;" class="mycode_color">exists</span>(<span style="color: #9cdcfe;" class="mycode_color">carpeta_descargas</span>):<br />
    <span style="color: #4ec9b0;" class="mycode_color">os</span>.<span style="color: #dcdcaa;" class="mycode_color">makedirs</span>(<span style="color: #9cdcfe;" class="mycode_color">carpeta_descargas</span>)<br />
<span style="color: #6a9955;" class="mycode_color"># Configura el WebDriver.</span><br />
<span style="color: #9cdcfe;" class="mycode_color">driver</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">webdriver</span>.<span style="color: #4ec9b0;" class="mycode_color">Chrome</span>()  <span style="color: #6a9955;" class="mycode_color"># Assegura't que ChromeDriver està instal·lat i configurat</span><br />
<span style="color: #c586c0;" class="mycode_color">try</span>:<br />
    <span style="color: #6a9955;" class="mycode_color"># 1. Obre Google</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">driver</span>.<span style="color: #dcdcaa;" class="mycode_color">get</span>(<span style="color: #ce9178;" class="mycode_color">"https://contractaciopublica.cat/ca/detall-publicacio/3a992746-70c0-48f7-ae49-2377ed4cd3c9/200152387"</span>)<br />
    <span style="color: #6a9955;" class="mycode_color"># 2. Accepta cookies (si cal)</span><br />
    <span style="color: #c586c0;" class="mycode_color">try</span>:<br />
        <span style="color: #9cdcfe;" class="mycode_color">accept_cookies_button</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">WebDriverWait</span>(<span style="color: #9cdcfe;" class="mycode_color">driver</span>, <span style="color: #b5cea8;" class="mycode_color">5</span>).<span style="color: #dcdcaa;" class="mycode_color">until</span>(<span style="color: #4ec9b0;" class="mycode_color">EC</span>.<span style="color: #dcdcaa;" class="mycode_color">element_to_be_clickable</span>((<span style="color: #4ec9b0;" class="mycode_color">By</span>.<span style="color: #9cdcfe;" class="mycode_color">XPATH</span>, <span style="color: #ce9178;" class="mycode_color">"//button[contains(text(),'Accepta')]"</span>)))<br />
        <span style="color: #9cdcfe;" class="mycode_color">accept_cookies_button</span>.<span style="color: #dcdcaa;" class="mycode_color">click</span>()<br />
    <span style="color: #c586c0;" class="mycode_color">except</span> <span style="color: #4ec9b0;" class="mycode_color">Exception</span>:<br />
        <span style="color: #dcdcaa;" class="mycode_color">print</span>(<span style="color: #ce9178;" class="mycode_color">"No s'ha trobat el botó de cookies. Continuant..."</span>)<br />
    <span style="color: #6a9955;" class="mycode_color"># 3. Cerca l'enllaç 'Anunci de licitació</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">gmail_link</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">driver</span>.<span style="color: #dcdcaa;" class="mycode_color">find_element</span>(<span style="color: #4ec9b0;" class="mycode_color">By</span>.<span style="color: #9cdcfe;" class="mycode_color">LINK_TEXT</span>, <span style="color: #ce9178;" class="mycode_color">"Anunci de licitació"</span>)<br />
    <span style="color: #6a9955;" class="mycode_color"># 4. Fes clic a 'Anunci de licitació'</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">gmail_link</span>.<span style="color: #dcdcaa;" class="mycode_color">click</span>()<br />
    <span style="color: #6a9955;" class="mycode_color"># Opcional: Espera per veure el resultat</span><br />
    <span style="color: #4ec9b0;" class="mycode_color">time</span>.<span style="color: #dcdcaa;" class="mycode_color">sleep</span>(<span style="color: #b5cea8;" class="mycode_color">5</span>)<br />
    <span style="color: #6a9955;" class="mycode_color"># Desplaçar-se cap al final de la pàgina</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">driver</span>.<span style="color: #dcdcaa;" class="mycode_color">execute_script</span>(<span style="color: #ce9178;" class="mycode_color">"window.scrollTo(0, document.body.scrollHeight);"</span>)<br />
    <span style="color: #4ec9b0;" class="mycode_color">time</span>.<span style="color: #dcdcaa;" class="mycode_color">sleep</span>(<span style="color: #b5cea8;" class="mycode_color">5</span>)  <span style="color: #6a9955;" class="mycode_color"># Dona temps a carregar el contingut</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">pdf_links</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">WebDriverWait</span>(<span style="color: #9cdcfe;" class="mycode_color">driver</span>, <span style="color: #b5cea8;" class="mycode_color">10</span>).<span style="color: #dcdcaa;" class="mycode_color">until</span>(<br />
    <span style="color: #4ec9b0;" class="mycode_color">EC</span>.<span style="color: #dcdcaa;" class="mycode_color">presence_of_all_elements_located</span>((<span style="color: #4ec9b0;" class="mycode_color">By</span>.<span style="color: #9cdcfe;" class="mycode_color">XPATH</span>, <span style="color: #ce9178;" class="mycode_color">"//a[contains(@href, '.pdf')]"</span>)))<br />
    <span style="color: #c586c0;" class="mycode_color">for</span> <span style="color: #9cdcfe;" class="mycode_color">pdf_link</span> <span style="color: #c586c0;" class="mycode_color">in</span> <span style="color: #9cdcfe;" class="mycode_color">pdf_links</span>:<br />
        <span style="color: #9cdcfe;" class="mycode_color">pdf_url</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">pdf_link</span>.<span style="color: #dcdcaa;" class="mycode_color">get_attribute</span>(<span style="color: #ce9178;" class="mycode_color">"href"</span>)<br />
        <span style="color: #9cdcfe;" class="mycode_color">pdf_text</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">pdf_link</span>.<span style="color: #9cdcfe;" class="mycode_color">text</span>.<span style="color: #dcdcaa;" class="mycode_color">strip</span>().<span style="color: #dcdcaa;" class="mycode_color">lower</span>()<br />
          <span style="color: #6a9955;" class="mycode_color"># Download the PDF</span><br />
        <span style="color: #c586c0;" class="mycode_color">try</span>:<br />
            <span style="color: #9cdcfe;" class="mycode_color">response</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">requests</span>.<span style="color: #dcdcaa;" class="mycode_color">get</span>(<span style="color: #9cdcfe;" class="mycode_color">pdf_url</span>)<br />
            <span style="color: #9cdcfe;" class="mycode_color">response</span>.<span style="color: #dcdcaa;" class="mycode_color">raise_for_status</span>()  <span style="color: #6a9955;" class="mycode_color"># This will raise an exception for HTTP errors</span><br />
            <span style="color: #9cdcfe;" class="mycode_color">filename</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">os</span>.<span style="color: #9cdcfe;" class="mycode_color">path</span>.<span style="color: #dcdcaa;" class="mycode_color">join</span>(<span style="color: #9cdcfe;" class="mycode_color">carpeta_descargas</span>, <span style="color: #9cdcfe;" class="mycode_color">pdf_url</span>.<span style="color: #dcdcaa;" class="mycode_color">split</span>(<span style="color: #ce9178;" class="mycode_color">'/'</span>)[<span style="color: #d4d4d4;" class="mycode_color">-</span><span style="color: #b5cea8;" class="mycode_color">1</span>])<br />
            <span style="color: #c586c0;" class="mycode_color">with</span> <span style="color: #dcdcaa;" class="mycode_color">open</span>(<span style="color: #9cdcfe;" class="mycode_color">filename</span>, <span style="color: #ce9178;" class="mycode_color">'wb'</span>) <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #9cdcfe;" class="mycode_color">f</span>:<br />
                <span style="color: #9cdcfe;" class="mycode_color">f</span>.<span style="color: #dcdcaa;" class="mycode_color">write</span>(<span style="color: #9cdcfe;" class="mycode_color">response</span>.<span style="color: #9cdcfe;" class="mycode_color">content</span>)<br />
                <span style="color: #dcdcaa;" class="mycode_color">print</span>(<span style="color: #569cd6;" class="mycode_color">f</span><span style="color: #ce9178;" class="mycode_color">"PDF descarregat correctament com </span><span style="color: #569cd6;" class="mycode_color">{</span><span style="color: #9cdcfe;" class="mycode_color">filename</span><span style="color: #569cd6;" class="mycode_color">}</span><span style="color: #ce9178;" class="mycode_color">"</span>)<br />
        <span style="color: #c586c0;" class="mycode_color">except</span> <span style="color: #4ec9b0;" class="mycode_color">requests</span>.<span style="color: #4ec9b0;" class="mycode_color">exceptions</span>.<span style="color: #4ec9b0;" class="mycode_color">RequestException</span> <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #9cdcfe;" class="mycode_color">e</span>:<br />
            <span style="color: #dcdcaa;" class="mycode_color">print</span>(<span style="color: #569cd6;" class="mycode_color">f</span><span style="color: #ce9178;" class="mycode_color">"Error descarregant el PDF: </span><span style="color: #569cd6;" class="mycode_color">{</span><span style="color: #9cdcfe;" class="mycode_color">e</span><span style="color: #569cd6;" class="mycode_color">}</span><span style="color: #ce9178;" class="mycode_color">"</span>)<br />
        <span style="color: #4ec9b0;" class="mycode_color">time</span>.<span style="color: #dcdcaa;" class="mycode_color">sleep</span>(<span style="color: #b5cea8;" class="mycode_color">5</span>)<br />
<span style="color: #c586c0;" class="mycode_color">finally</span>:<br />
    <span style="color: #6a9955;" class="mycode_color"># Tanca el navegador</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">driver</span>.<span style="color: #dcdcaa;" class="mycode_color">quit</span>()</span></span>]]></description>
			<content:encoded><![CDATA[Hola, <br />
Estoy programando un pequeño código que va entrando en diferentes links y debe navegar por una página y descargar los pdfs que encuentre, pero por algún motivo no los detecta, y por tanto, no los descarga. Les dejo el código resumido para un caso a ver si pueden ayudarme:<br />
<span style="color: #cccccc;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font"><span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">pandas</span> <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #4ec9b0;" class="mycode_color">pd</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> <span style="color: #4ec9b0;" class="mycode_color">selenium</span> <span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">webdriver</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> <span style="color: #4ec9b0;" class="mycode_color">selenium</span>.<span style="color: #4ec9b0;" class="mycode_color">webdriver</span>.<span style="color: #4ec9b0;" class="mycode_color">common</span>.<span style="color: #4ec9b0;" class="mycode_color">by</span> <span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">By</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">time</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">os</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">requests</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> <span style="color: #4ec9b0;" class="mycode_color">selenium</span>.<span style="color: #4ec9b0;" class="mycode_color">webdriver</span>.<span style="color: #4ec9b0;" class="mycode_color">support</span> <span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">expected_conditions</span> <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #4ec9b0;" class="mycode_color">EC</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> <span style="color: #4ec9b0;" class="mycode_color">selenium</span>.<span style="color: #4ec9b0;" class="mycode_color">webdriver</span>.<span style="color: #4ec9b0;" class="mycode_color">support</span>.<span style="color: #4ec9b0;" class="mycode_color">ui</span> <span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">WebDriverWait</span><br />
<span style="color: #6a9955;" class="mycode_color"># Crear una carpeta per guardar els documents descarregats</span><br />
<span style="color: #9cdcfe;" class="mycode_color">carpeta_descargas</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #ce9178;" class="mycode_color">"Documents_Descarregats_Ajuntament"</span><br />
<span style="color: #c586c0;" class="mycode_color">if</span> <span style="color: #569cd6;" class="mycode_color">not</span> <span style="color: #4ec9b0;" class="mycode_color">os</span>.<span style="color: #9cdcfe;" class="mycode_color">path</span>.<span style="color: #dcdcaa;" class="mycode_color">exists</span>(<span style="color: #9cdcfe;" class="mycode_color">carpeta_descargas</span>):<br />
    <span style="color: #4ec9b0;" class="mycode_color">os</span>.<span style="color: #dcdcaa;" class="mycode_color">makedirs</span>(<span style="color: #9cdcfe;" class="mycode_color">carpeta_descargas</span>)<br />
<span style="color: #6a9955;" class="mycode_color"># Configura el WebDriver.</span><br />
<span style="color: #9cdcfe;" class="mycode_color">driver</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">webdriver</span>.<span style="color: #4ec9b0;" class="mycode_color">Chrome</span>()  <span style="color: #6a9955;" class="mycode_color"># Assegura't que ChromeDriver està instal·lat i configurat</span><br />
<span style="color: #c586c0;" class="mycode_color">try</span>:<br />
    <span style="color: #6a9955;" class="mycode_color"># 1. Obre Google</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">driver</span>.<span style="color: #dcdcaa;" class="mycode_color">get</span>(<span style="color: #ce9178;" class="mycode_color">"https://contractaciopublica.cat/ca/detall-publicacio/3a992746-70c0-48f7-ae49-2377ed4cd3c9/200152387"</span>)<br />
    <span style="color: #6a9955;" class="mycode_color"># 2. Accepta cookies (si cal)</span><br />
    <span style="color: #c586c0;" class="mycode_color">try</span>:<br />
        <span style="color: #9cdcfe;" class="mycode_color">accept_cookies_button</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">WebDriverWait</span>(<span style="color: #9cdcfe;" class="mycode_color">driver</span>, <span style="color: #b5cea8;" class="mycode_color">5</span>).<span style="color: #dcdcaa;" class="mycode_color">until</span>(<span style="color: #4ec9b0;" class="mycode_color">EC</span>.<span style="color: #dcdcaa;" class="mycode_color">element_to_be_clickable</span>((<span style="color: #4ec9b0;" class="mycode_color">By</span>.<span style="color: #9cdcfe;" class="mycode_color">XPATH</span>, <span style="color: #ce9178;" class="mycode_color">"//button[contains(text(),'Accepta')]"</span>)))<br />
        <span style="color: #9cdcfe;" class="mycode_color">accept_cookies_button</span>.<span style="color: #dcdcaa;" class="mycode_color">click</span>()<br />
    <span style="color: #c586c0;" class="mycode_color">except</span> <span style="color: #4ec9b0;" class="mycode_color">Exception</span>:<br />
        <span style="color: #dcdcaa;" class="mycode_color">print</span>(<span style="color: #ce9178;" class="mycode_color">"No s'ha trobat el botó de cookies. Continuant..."</span>)<br />
    <span style="color: #6a9955;" class="mycode_color"># 3. Cerca l'enllaç 'Anunci de licitació</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">gmail_link</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">driver</span>.<span style="color: #dcdcaa;" class="mycode_color">find_element</span>(<span style="color: #4ec9b0;" class="mycode_color">By</span>.<span style="color: #9cdcfe;" class="mycode_color">LINK_TEXT</span>, <span style="color: #ce9178;" class="mycode_color">"Anunci de licitació"</span>)<br />
    <span style="color: #6a9955;" class="mycode_color"># 4. Fes clic a 'Anunci de licitació'</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">gmail_link</span>.<span style="color: #dcdcaa;" class="mycode_color">click</span>()<br />
    <span style="color: #6a9955;" class="mycode_color"># Opcional: Espera per veure el resultat</span><br />
    <span style="color: #4ec9b0;" class="mycode_color">time</span>.<span style="color: #dcdcaa;" class="mycode_color">sleep</span>(<span style="color: #b5cea8;" class="mycode_color">5</span>)<br />
    <span style="color: #6a9955;" class="mycode_color"># Desplaçar-se cap al final de la pàgina</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">driver</span>.<span style="color: #dcdcaa;" class="mycode_color">execute_script</span>(<span style="color: #ce9178;" class="mycode_color">"window.scrollTo(0, document.body.scrollHeight);"</span>)<br />
    <span style="color: #4ec9b0;" class="mycode_color">time</span>.<span style="color: #dcdcaa;" class="mycode_color">sleep</span>(<span style="color: #b5cea8;" class="mycode_color">5</span>)  <span style="color: #6a9955;" class="mycode_color"># Dona temps a carregar el contingut</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">pdf_links</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">WebDriverWait</span>(<span style="color: #9cdcfe;" class="mycode_color">driver</span>, <span style="color: #b5cea8;" class="mycode_color">10</span>).<span style="color: #dcdcaa;" class="mycode_color">until</span>(<br />
    <span style="color: #4ec9b0;" class="mycode_color">EC</span>.<span style="color: #dcdcaa;" class="mycode_color">presence_of_all_elements_located</span>((<span style="color: #4ec9b0;" class="mycode_color">By</span>.<span style="color: #9cdcfe;" class="mycode_color">XPATH</span>, <span style="color: #ce9178;" class="mycode_color">"//a[contains(@href, '.pdf')]"</span>)))<br />
    <span style="color: #c586c0;" class="mycode_color">for</span> <span style="color: #9cdcfe;" class="mycode_color">pdf_link</span> <span style="color: #c586c0;" class="mycode_color">in</span> <span style="color: #9cdcfe;" class="mycode_color">pdf_links</span>:<br />
        <span style="color: #9cdcfe;" class="mycode_color">pdf_url</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">pdf_link</span>.<span style="color: #dcdcaa;" class="mycode_color">get_attribute</span>(<span style="color: #ce9178;" class="mycode_color">"href"</span>)<br />
        <span style="color: #9cdcfe;" class="mycode_color">pdf_text</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">pdf_link</span>.<span style="color: #9cdcfe;" class="mycode_color">text</span>.<span style="color: #dcdcaa;" class="mycode_color">strip</span>().<span style="color: #dcdcaa;" class="mycode_color">lower</span>()<br />
          <span style="color: #6a9955;" class="mycode_color"># Download the PDF</span><br />
        <span style="color: #c586c0;" class="mycode_color">try</span>:<br />
            <span style="color: #9cdcfe;" class="mycode_color">response</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">requests</span>.<span style="color: #dcdcaa;" class="mycode_color">get</span>(<span style="color: #9cdcfe;" class="mycode_color">pdf_url</span>)<br />
            <span style="color: #9cdcfe;" class="mycode_color">response</span>.<span style="color: #dcdcaa;" class="mycode_color">raise_for_status</span>()  <span style="color: #6a9955;" class="mycode_color"># This will raise an exception for HTTP errors</span><br />
            <span style="color: #9cdcfe;" class="mycode_color">filename</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">os</span>.<span style="color: #9cdcfe;" class="mycode_color">path</span>.<span style="color: #dcdcaa;" class="mycode_color">join</span>(<span style="color: #9cdcfe;" class="mycode_color">carpeta_descargas</span>, <span style="color: #9cdcfe;" class="mycode_color">pdf_url</span>.<span style="color: #dcdcaa;" class="mycode_color">split</span>(<span style="color: #ce9178;" class="mycode_color">'/'</span>)[<span style="color: #d4d4d4;" class="mycode_color">-</span><span style="color: #b5cea8;" class="mycode_color">1</span>])<br />
            <span style="color: #c586c0;" class="mycode_color">with</span> <span style="color: #dcdcaa;" class="mycode_color">open</span>(<span style="color: #9cdcfe;" class="mycode_color">filename</span>, <span style="color: #ce9178;" class="mycode_color">'wb'</span>) <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #9cdcfe;" class="mycode_color">f</span>:<br />
                <span style="color: #9cdcfe;" class="mycode_color">f</span>.<span style="color: #dcdcaa;" class="mycode_color">write</span>(<span style="color: #9cdcfe;" class="mycode_color">response</span>.<span style="color: #9cdcfe;" class="mycode_color">content</span>)<br />
                <span style="color: #dcdcaa;" class="mycode_color">print</span>(<span style="color: #569cd6;" class="mycode_color">f</span><span style="color: #ce9178;" class="mycode_color">"PDF descarregat correctament com </span><span style="color: #569cd6;" class="mycode_color">{</span><span style="color: #9cdcfe;" class="mycode_color">filename</span><span style="color: #569cd6;" class="mycode_color">}</span><span style="color: #ce9178;" class="mycode_color">"</span>)<br />
        <span style="color: #c586c0;" class="mycode_color">except</span> <span style="color: #4ec9b0;" class="mycode_color">requests</span>.<span style="color: #4ec9b0;" class="mycode_color">exceptions</span>.<span style="color: #4ec9b0;" class="mycode_color">RequestException</span> <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #9cdcfe;" class="mycode_color">e</span>:<br />
            <span style="color: #dcdcaa;" class="mycode_color">print</span>(<span style="color: #569cd6;" class="mycode_color">f</span><span style="color: #ce9178;" class="mycode_color">"Error descarregant el PDF: </span><span style="color: #569cd6;" class="mycode_color">{</span><span style="color: #9cdcfe;" class="mycode_color">e</span><span style="color: #569cd6;" class="mycode_color">}</span><span style="color: #ce9178;" class="mycode_color">"</span>)<br />
        <span style="color: #4ec9b0;" class="mycode_color">time</span>.<span style="color: #dcdcaa;" class="mycode_color">sleep</span>(<span style="color: #b5cea8;" class="mycode_color">5</span>)<br />
<span style="color: #c586c0;" class="mycode_color">finally</span>:<br />
    <span style="color: #6a9955;" class="mycode_color"># Tanca el navegador</span><br />
    <span style="color: #9cdcfe;" class="mycode_color">driver</span>.<span style="color: #dcdcaa;" class="mycode_color">quit</span>()</span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[problemas con Keras y tensorflow]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1510</link>
			<pubDate>Thu, 28 Nov 2024 07:37:31 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1648">eduardo_</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1510</guid>
			<description><![CDATA[no me funciona el keras ni el tensorflow <br />
<br />
<span style="color: #cccccc;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font"><span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">random</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">json</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">pickle</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> numpy <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #4ec9b0;" class="mycode_color">np</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">nltk</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> nltk.stem <span style="color: #c586c0;" class="mycode_color">import</span> WordNetLemmatizer <span style="color: #6a9955;" class="mycode_color">#Para pasar las palabras a su forma raíz</span><br />
<span style="color: #6a9955;" class="mycode_color">#Para crear la red neuronal</span><br />
<span style="color: #6a9955;" class="mycode_color"># Para crear la red neuronal</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> tensorflow.keras.models <span style="color: #c586c0;" class="mycode_color">import</span> Sequential<br />
<span style="color: #c586c0;" class="mycode_color">from</span> tensorflow.keras.layers <span style="color: #c586c0;" class="mycode_color">import</span> Dense, Activation, Dropout<br />
<span style="color: #c586c0;" class="mycode_color">from</span> tensorflow.keras.optimizers <span style="color: #c586c0;" class="mycode_color">import</span> SGD</span></span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://foro.recursospython.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=217" target="_blank" title="">Screenshot_1.png</a> (Tamaño: 18,01 KB / Descargas: 3)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[no me funciona el keras ni el tensorflow <br />
<br />
<span style="color: #cccccc;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font"><span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">random</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">json</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">pickle</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> numpy <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #4ec9b0;" class="mycode_color">np</span><br />
<span style="color: #c586c0;" class="mycode_color">import</span> <span style="color: #4ec9b0;" class="mycode_color">nltk</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> nltk.stem <span style="color: #c586c0;" class="mycode_color">import</span> WordNetLemmatizer <span style="color: #6a9955;" class="mycode_color">#Para pasar las palabras a su forma raíz</span><br />
<span style="color: #6a9955;" class="mycode_color">#Para crear la red neuronal</span><br />
<span style="color: #6a9955;" class="mycode_color"># Para crear la red neuronal</span><br />
<span style="color: #c586c0;" class="mycode_color">from</span> tensorflow.keras.models <span style="color: #c586c0;" class="mycode_color">import</span> Sequential<br />
<span style="color: #c586c0;" class="mycode_color">from</span> tensorflow.keras.layers <span style="color: #c586c0;" class="mycode_color">import</span> Dense, Activation, Dropout<br />
<span style="color: #c586c0;" class="mycode_color">from</span> tensorflow.keras.optimizers <span style="color: #c586c0;" class="mycode_color">import</span> SGD</span></span><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://foro.recursospython.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=217" target="_blank" title="">Screenshot_1.png</a> (Tamaño: 18,01 KB / Descargas: 3)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Error con pyinstaller al instalarlo]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1507</link>
			<pubDate>Sat, 16 Nov 2024 14:08:18 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1642">Juan197407</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1507</guid>
			<description><![CDATA[Buenas tardes.<br />
<br />
Tengo un problema a la hora de generar un ejecutable Python al momento de instalar pyinstaller.<br />
<br />
Este es el error.<br />
jromero74@debian074:~&#36; pip install pyinstaller<br />
error: externally-managed-environment<br />
<br />
× This environment is externally managed<br />
╰─&gt; To install Python packages system-wide, try apt install<br />
    python3-xyz, where xyz is the package you are trying to<br />
    install.<br />
    <br />
    If you wish to install a non-Debian-packaged Python package,<br />
    create a virtual environment using python3 -m venv path/to/venv.<br />
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make<br />
    sure you have python3-full installed.<br />
    <br />
    If you wish to install a non-Debian packaged Python application,<br />
    it may be easiest to use pipx install xyz, which will manage a<br />
    virtual environment for you. Make sure you have pipx installed.<br />
    <br />
    See /usr/share/doc/python3.11/README.venv for more information.<br />
<br />
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.<br />
hint: See PEP 668 for the detailed specification.<br />
<br />
Saludos.]]></description>
			<content:encoded><![CDATA[Buenas tardes.<br />
<br />
Tengo un problema a la hora de generar un ejecutable Python al momento de instalar pyinstaller.<br />
<br />
Este es el error.<br />
jromero74@debian074:~&#36; pip install pyinstaller<br />
error: externally-managed-environment<br />
<br />
× This environment is externally managed<br />
╰─&gt; To install Python packages system-wide, try apt install<br />
    python3-xyz, where xyz is the package you are trying to<br />
    install.<br />
    <br />
    If you wish to install a non-Debian-packaged Python package,<br />
    create a virtual environment using python3 -m venv path/to/venv.<br />
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make<br />
    sure you have python3-full installed.<br />
    <br />
    If you wish to install a non-Debian packaged Python application,<br />
    it may be easiest to use pipx install xyz, which will manage a<br />
    virtual environment for you. Make sure you have pipx installed.<br />
    <br />
    See /usr/share/doc/python3.11/README.venv for more information.<br />
<br />
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.<br />
hint: See PEP 668 for the detailed specification.<br />
<br />
Saludos.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Condifcación utf8 en html]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1506</link>
			<pubDate>Wed, 13 Nov 2024 07:15:50 -0800</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1640">Tartanboi</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1506</guid>
			<description><![CDATA[Buenas,<br />
<br />
Tengo una función en un programa para enviar correos electrónicos. Sería esta:<br />
<br />
<span style="color: #cccccc;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font"><span style="color: #569cd6;" class="mycode_color">def</span> <span style="color: #dcdcaa;" class="mycode_color">envio</span>(<span style="color: #9cdcfe;" class="mycode_color">self</span>, <span style="color: #9cdcfe;" class="mycode_color">remitente</span>, <span style="color: #9cdcfe;" class="mycode_color">para</span>, <span style="color: #9cdcfe;" class="mycode_color">copia</span>, <span style="color: #9cdcfe;" class="mycode_color">asunto</span>, <span style="color: #9cdcfe;" class="mycode_color">body</span>):<br />
        <br />
        <span style="color: #c586c0;" class="mycode_color">with</span> <span style="color: #dcdcaa;" class="mycode_color">open</span>(<span style="color: #ce9178;" class="mycode_color">'config.yaml'</span>, <span style="color: #ce9178;" class="mycode_color">'r'</span>) <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #9cdcfe;" class="mycode_color">file</span>:<br />
            <span style="color: #9cdcfe;" class="mycode_color">config</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">yaml</span>.<span style="color: #dcdcaa;" class="mycode_color">safe_load</span>(<span style="color: #9cdcfe;" class="mycode_color">file</span>)<br />
    <br />
        <span style="color: #9cdcfe;" class="mycode_color">smtp</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">config</span>[<span style="color: #ce9178;" class="mycode_color">'server_correo'</span>][<span style="color: #ce9178;" class="mycode_color">'smtp_server'</span>]<br />
        <span style="color: #9cdcfe;" class="mycode_color">puerto</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">config</span>[<span style="color: #ce9178;" class="mycode_color">'server_correo'</span>][<span style="color: #ce9178;" class="mycode_color">'smtp_port'</span>]<br />
        <span style="color: #9cdcfe;" class="mycode_color">cuenta</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">config</span>[<span style="color: #ce9178;" class="mycode_color">'server_correo'</span>][<span style="color: #ce9178;" class="mycode_color">'account'</span>] <br />
        <span style="color: #9cdcfe;" class="mycode_color">contrasena</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">config</span>[<span style="color: #ce9178;" class="mycode_color">'server_correo'</span>][<span style="color: #ce9178;" class="mycode_color">'password'</span>]<br />
        <span style="color: #6a9955;" class="mycode_color"># Parametros del mensaje</span><br />
        <span style="color: #9cdcfe;" class="mycode_color">message</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">MIMEMultipart</span>()<br />
        <span style="color: #9cdcfe;" class="mycode_color">message</span>[<span style="color: #ce9178;" class="mycode_color">'From'</span>] <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">remitente</span> <br />
        <span style="color: #9cdcfe;" class="mycode_color">message</span>[<span style="color: #ce9178;" class="mycode_color">'To'</span>] <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">para</span><br />
        <span style="color: #c586c0;" class="mycode_color">if</span> <span style="color: #9cdcfe;" class="mycode_color">copia</span>: <br />
            <span style="color: #9cdcfe;" class="mycode_color">message</span>[<span style="color: #ce9178;" class="mycode_color">'CC'</span>] <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">copia</span><br />
        <span style="color: #9cdcfe;" class="mycode_color">message</span>[<span style="color: #ce9178;" class="mycode_color">'Subject'</span>] <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">asunto</span><br />
    <br />
        <span style="color: #9cdcfe;" class="mycode_color">message</span>.<span style="color: #dcdcaa;" class="mycode_color">attach</span>(<span style="color: #4ec9b0;" class="mycode_color">MIMEText</span>(<span style="color: #9cdcfe;" class="mycode_color">body</span>, <span style="color: #ce9178;" class="mycode_color">'html'</span>, <span style="color: #ce9178;" class="mycode_color">'utf-8'</span>))<br />
        <br />
        <span style="color: #c586c0;" class="mycode_color">with</span> <span style="color: #4ec9b0;" class="mycode_color">smtplib</span>.<span style="color: #4ec9b0;" class="mycode_color">SMTP_SSL</span>(<span style="color: #9cdcfe;" class="mycode_color">smtp</span>, <span style="color: #9cdcfe;" class="mycode_color">puerto</span>) <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #9cdcfe;" class="mycode_color">server</span>:<br />
            <span style="color: #9cdcfe;" class="mycode_color">server</span>.<span style="color: #dcdcaa;" class="mycode_color">login</span>(<span style="color: #9cdcfe;" class="mycode_color">cuenta</span>, <span style="color: #9cdcfe;" class="mycode_color">contrasena</span>)<br />
            <span style="color: #9cdcfe;" class="mycode_color">server</span>.<span style="color: #dcdcaa;" class="mycode_color">send_message</span>(<span style="color: #9cdcfe;" class="mycode_color">message</span>)<br />
        <br />
        <span style="color: #dcdcaa;" class="mycode_color">print</span>(<span style="color: #569cd6;" class="mycode_color">f</span><span style="color: #ce9178;" class="mycode_color">"</span><span style="color: #569cd6;" class="mycode_color">{</span><span style="color: #4ec9b0;" class="mycode_color">datetime</span>.<span style="color: #4ec9b0;" class="mycode_color">datetime</span>.<span style="color: #dcdcaa;" class="mycode_color">now</span>()<span style="color: #569cd6;" class="mycode_color">}</span><span style="color: #ce9178;" class="mycode_color"> - Correo enviado"</span>)<br />
</span></span><br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font">Uso esta plantilla html, que está en un fichero yaml:</span></span><br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font"><span style="color: #cccccc;" class="mycode_color"><span style="color: #ce9178;" class="mycode_color">&lt;html&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">    &lt;head&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        &lt;meta charset="UTF-8"&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        &lt;style&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        table {{</span><br />
<span style="color: #ce9178;" class="mycode_color">            border-collapse: collapse;</span><br />
<span style="color: #ce9178;" class="mycode_color">        }}</span><br />
<span style="color: #ce9178;" class="mycode_color">        th, td {{</span><br />
<span style="color: #ce9178;" class="mycode_color">            border: 1px solid black;</span><br />
<span style="color: #ce9178;" class="mycode_color">            padding: 8px;</span><br />
<span style="color: #ce9178;" class="mycode_color">            text-align: left;</span><br />
<span style="color: #ce9178;" class="mycode_color">        }}</span><br />
<span style="color: #ce9178;" class="mycode_color">        &lt;/style&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">    &lt;/head&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">    &lt;body&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        &lt;h4&gt;Buenos días&lt;/h4&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        &lt;p&gt;Revisar:&lt;/p&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        {}</span><br />
<span style="color: #ce9178;" class="mycode_color">    &lt;/body&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">    &lt;/html&gt;</span></span></span></span><br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font">El tema es que aunque, se envía bien el correo, y se especifica en la cabecera del html la codificación utf8 y también en el MIMEText, siguen sin codificarse correctamente. Las tildes o ñ no aparecen bien.<br />
<br />
¿Sabéis a qué puede deberse?</span></span><br />
<hr class="mycode_hr" />
Nada, ya lo he solucionado ... me faltaba el encoding al leer el fichero yaml:<br />
<br />
with open('plantillas_correo.yaml', 'r', encoding='utf-8') as file:<br />
            plantilla = yaml.safe_load(file)]]></description>
			<content:encoded><![CDATA[Buenas,<br />
<br />
Tengo una función en un programa para enviar correos electrónicos. Sería esta:<br />
<br />
<span style="color: #cccccc;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font"><span style="color: #569cd6;" class="mycode_color">def</span> <span style="color: #dcdcaa;" class="mycode_color">envio</span>(<span style="color: #9cdcfe;" class="mycode_color">self</span>, <span style="color: #9cdcfe;" class="mycode_color">remitente</span>, <span style="color: #9cdcfe;" class="mycode_color">para</span>, <span style="color: #9cdcfe;" class="mycode_color">copia</span>, <span style="color: #9cdcfe;" class="mycode_color">asunto</span>, <span style="color: #9cdcfe;" class="mycode_color">body</span>):<br />
        <br />
        <span style="color: #c586c0;" class="mycode_color">with</span> <span style="color: #dcdcaa;" class="mycode_color">open</span>(<span style="color: #ce9178;" class="mycode_color">'config.yaml'</span>, <span style="color: #ce9178;" class="mycode_color">'r'</span>) <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #9cdcfe;" class="mycode_color">file</span>:<br />
            <span style="color: #9cdcfe;" class="mycode_color">config</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">yaml</span>.<span style="color: #dcdcaa;" class="mycode_color">safe_load</span>(<span style="color: #9cdcfe;" class="mycode_color">file</span>)<br />
    <br />
        <span style="color: #9cdcfe;" class="mycode_color">smtp</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">config</span>[<span style="color: #ce9178;" class="mycode_color">'server_correo'</span>][<span style="color: #ce9178;" class="mycode_color">'smtp_server'</span>]<br />
        <span style="color: #9cdcfe;" class="mycode_color">puerto</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">config</span>[<span style="color: #ce9178;" class="mycode_color">'server_correo'</span>][<span style="color: #ce9178;" class="mycode_color">'smtp_port'</span>]<br />
        <span style="color: #9cdcfe;" class="mycode_color">cuenta</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">config</span>[<span style="color: #ce9178;" class="mycode_color">'server_correo'</span>][<span style="color: #ce9178;" class="mycode_color">'account'</span>] <br />
        <span style="color: #9cdcfe;" class="mycode_color">contrasena</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">config</span>[<span style="color: #ce9178;" class="mycode_color">'server_correo'</span>][<span style="color: #ce9178;" class="mycode_color">'password'</span>]<br />
        <span style="color: #6a9955;" class="mycode_color"># Parametros del mensaje</span><br />
        <span style="color: #9cdcfe;" class="mycode_color">message</span> <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #4ec9b0;" class="mycode_color">MIMEMultipart</span>()<br />
        <span style="color: #9cdcfe;" class="mycode_color">message</span>[<span style="color: #ce9178;" class="mycode_color">'From'</span>] <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">remitente</span> <br />
        <span style="color: #9cdcfe;" class="mycode_color">message</span>[<span style="color: #ce9178;" class="mycode_color">'To'</span>] <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">para</span><br />
        <span style="color: #c586c0;" class="mycode_color">if</span> <span style="color: #9cdcfe;" class="mycode_color">copia</span>: <br />
            <span style="color: #9cdcfe;" class="mycode_color">message</span>[<span style="color: #ce9178;" class="mycode_color">'CC'</span>] <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">copia</span><br />
        <span style="color: #9cdcfe;" class="mycode_color">message</span>[<span style="color: #ce9178;" class="mycode_color">'Subject'</span>] <span style="color: #d4d4d4;" class="mycode_color">=</span> <span style="color: #9cdcfe;" class="mycode_color">asunto</span><br />
    <br />
        <span style="color: #9cdcfe;" class="mycode_color">message</span>.<span style="color: #dcdcaa;" class="mycode_color">attach</span>(<span style="color: #4ec9b0;" class="mycode_color">MIMEText</span>(<span style="color: #9cdcfe;" class="mycode_color">body</span>, <span style="color: #ce9178;" class="mycode_color">'html'</span>, <span style="color: #ce9178;" class="mycode_color">'utf-8'</span>))<br />
        <br />
        <span style="color: #c586c0;" class="mycode_color">with</span> <span style="color: #4ec9b0;" class="mycode_color">smtplib</span>.<span style="color: #4ec9b0;" class="mycode_color">SMTP_SSL</span>(<span style="color: #9cdcfe;" class="mycode_color">smtp</span>, <span style="color: #9cdcfe;" class="mycode_color">puerto</span>) <span style="color: #c586c0;" class="mycode_color">as</span> <span style="color: #9cdcfe;" class="mycode_color">server</span>:<br />
            <span style="color: #9cdcfe;" class="mycode_color">server</span>.<span style="color: #dcdcaa;" class="mycode_color">login</span>(<span style="color: #9cdcfe;" class="mycode_color">cuenta</span>, <span style="color: #9cdcfe;" class="mycode_color">contrasena</span>)<br />
            <span style="color: #9cdcfe;" class="mycode_color">server</span>.<span style="color: #dcdcaa;" class="mycode_color">send_message</span>(<span style="color: #9cdcfe;" class="mycode_color">message</span>)<br />
        <br />
        <span style="color: #dcdcaa;" class="mycode_color">print</span>(<span style="color: #569cd6;" class="mycode_color">f</span><span style="color: #ce9178;" class="mycode_color">"</span><span style="color: #569cd6;" class="mycode_color">{</span><span style="color: #4ec9b0;" class="mycode_color">datetime</span>.<span style="color: #4ec9b0;" class="mycode_color">datetime</span>.<span style="color: #dcdcaa;" class="mycode_color">now</span>()<span style="color: #569cd6;" class="mycode_color">}</span><span style="color: #ce9178;" class="mycode_color"> - Correo enviado"</span>)<br />
</span></span><br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font">Uso esta plantilla html, que está en un fichero yaml:</span></span><br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font"><span style="color: #cccccc;" class="mycode_color"><span style="color: #ce9178;" class="mycode_color">&lt;html&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">    &lt;head&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        &lt;meta charset="UTF-8"&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        &lt;style&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        table {{</span><br />
<span style="color: #ce9178;" class="mycode_color">            border-collapse: collapse;</span><br />
<span style="color: #ce9178;" class="mycode_color">        }}</span><br />
<span style="color: #ce9178;" class="mycode_color">        th, td {{</span><br />
<span style="color: #ce9178;" class="mycode_color">            border: 1px solid black;</span><br />
<span style="color: #ce9178;" class="mycode_color">            padding: 8px;</span><br />
<span style="color: #ce9178;" class="mycode_color">            text-align: left;</span><br />
<span style="color: #ce9178;" class="mycode_color">        }}</span><br />
<span style="color: #ce9178;" class="mycode_color">        &lt;/style&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">    &lt;/head&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">    &lt;body&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        &lt;h4&gt;Buenos días&lt;/h4&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        &lt;p&gt;Revisar:&lt;/p&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">        {}</span><br />
<span style="color: #ce9178;" class="mycode_color">    &lt;/body&gt;</span><br />
<span style="color: #ce9178;" class="mycode_color">    &lt;/html&gt;</span></span></span></span><br />
<br />
<span style="color: #000000;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font">El tema es que aunque, se envía bien el correo, y se especifica en la cabecera del html la codificación utf8 y también en el MIMEText, siguen sin codificarse correctamente. Las tildes o ñ no aparecen bien.<br />
<br />
¿Sabéis a qué puede deberse?</span></span><br />
<hr class="mycode_hr" />
Nada, ya lo he solucionado ... me faltaba el encoding al leer el fichero yaml:<br />
<br />
with open('plantillas_correo.yaml', 'r', encoding='utf-8') as file:<br />
            plantilla = yaml.safe_load(file)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[visual studio code python terminal bash]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1505</link>
			<pubDate>Sat, 26 Oct 2024 14:03:06 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1630">FleyNandez</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1505</guid>
			<description><![CDATA[hola, buenas tardes, tengo un problema y es que cuando en el visual studio intento ejecutar el "hola mundo" pero no desde la terminal de python sino desde bash, no me arroja nada, ni error, ni ruta incorrecta, nada, solo aparece el espacio vacio, llevo dias buscando el problema pero nada, las versiones están bien, las extensiones, pero no me da el resultado del print("hola mundo"), cuando lo hago en la terminal bash, desde la carpeta que cree, mi ruta sería : python src/app.py pero no me da el resultado, agradeceria si me pueden ayudar con este tema, he visto varios videos pero ninguno me a servido, uso windows.<br />
gracias!!!<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://foro.recursospython.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=215" target="_blank" title="">Captura de pantalla 2024-10-26 151605.png</a> (Tamaño: 40,91 KB / Descargas: 6)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[hola, buenas tardes, tengo un problema y es que cuando en el visual studio intento ejecutar el "hola mundo" pero no desde la terminal de python sino desde bash, no me arroja nada, ni error, ni ruta incorrecta, nada, solo aparece el espacio vacio, llevo dias buscando el problema pero nada, las versiones están bien, las extensiones, pero no me da el resultado del print("hola mundo"), cuando lo hago en la terminal bash, desde la carpeta que cree, mi ruta sería : python src/app.py pero no me da el resultado, agradeceria si me pueden ayudar con este tema, he visto varios videos pero ninguno me a servido, uso windows.<br />
gracias!!!<br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://foro.recursospython.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=215" target="_blank" title="">Captura de pantalla 2024-10-26 151605.png</a> (Tamaño: 40,91 KB / Descargas: 6)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[No consigo que aparezcan los Header Labels]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1499</link>
			<pubDate>Sun, 06 Oct 2024 20:56:17 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1219">Baldomero123</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1499</guid>
			<description><![CDATA[Estoy haciendo una  app en Python y con QtDesigner, pero todo en código, es decir sin el .ui previo. De momento son dos ventanas y una CRUD en  cada window. Para entrar los datos a la tabla utilizo addDialog que me presenta los LineEdit donde entro los valores a incorporar. Todo esto funciona perfecto. Lo que no consigo es poner encima de los LineEdit son los nombres de cada campo a pesar de que en el método <br />
def AnadirI(): he puesto al principio<br />
self.table_widget=QtWidgets.QTableWidget()<br />
self.table_widget.setGeometry 250, 50, 35, 50)<br />
self.table_widget.setColumnCount(9)<br />
self.table_widget.setHorizontalHeaderLabels([‘Inv’, …])<br />
No me da ningún error,  sencillamente no aparece en la <br />
 ventana ningún encabezamiento. ¿Qué podría hacer? Gracias.]]></description>
			<content:encoded><![CDATA[Estoy haciendo una  app en Python y con QtDesigner, pero todo en código, es decir sin el .ui previo. De momento son dos ventanas y una CRUD en  cada window. Para entrar los datos a la tabla utilizo addDialog que me presenta los LineEdit donde entro los valores a incorporar. Todo esto funciona perfecto. Lo que no consigo es poner encima de los LineEdit son los nombres de cada campo a pesar de que en el método <br />
def AnadirI(): he puesto al principio<br />
self.table_widget=QtWidgets.QTableWidget()<br />
self.table_widget.setGeometry 250, 50, 35, 50)<br />
self.table_widget.setColumnCount(9)<br />
self.table_widget.setHorizontalHeaderLabels([‘Inv’, …])<br />
No me da ningún error,  sencillamente no aparece en la <br />
 ventana ningún encabezamiento. ¿Qué podría hacer? Gracias.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Problema con un programa de login y usuario]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1498</link>
			<pubDate>Sat, 05 Oct 2024 11:55:59 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1619">Tirifilo</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1498</guid>
			<description><![CDATA[Buenas tardes<br />
<br />
Estoy teniendo problemas para poder guardar multiples usuarios con sus contraseñas en el programa que estoy haciendo, que es para una entrega de un curso.<br />
<br />
Mes esta costando mucho entender como puedo hacerlo, si alguno me puede encarrilar para ver que estyo haciendo mal. Desde ya gracias!<br />
<br />
<span style="color: #d4d4d4;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font"><span style="color: #569cd6;" class="mycode_color">def</span> almacenar_datos():<br />
    print(<span style="color: #ce9178;" class="mycode_color">"BIENVENIDO AL PROGRAMA DE CREACION DE USUARIOS!!"</span>)<br />
    <span style="color: #569cd6;" class="mycode_color">while</span> <span style="color: #569cd6;" class="mycode_color">True</span>:<br />
        almacenar = {}<br />
        user = input(<span style="color: #ce9178;" class="mycode_color">"Digame su nombre de usuario que quiere utilizar: "</span>)<br />
        pwd = input(<span style="color: #ce9178;" class="mycode_color">"Digame su contraseña: "</span>)<br />
        <br />
        almacenar[user] = pwd<br />
        print(<span style="color: #ce9178;" class="mycode_color">"Gracias por registrarse!!!"</span>)<br />
        seguir = input(<span style="color: #ce9178;" class="mycode_color">"Desea seguir agregando usuarios? \n (si/no)"</span>)<br />
    <br />
        <span style="color: #569cd6;" class="mycode_color">if</span> seguir.lower() != <span style="color: #ce9178;" class="mycode_color">"si"</span>:<br />
            print(<span style="color: #ce9178;" class="mycode_color">"PROGRAMA FINALIZADO"</span>)<br />
            <span style="color: #569cd6;" class="mycode_color">break</span><br />
    <span style="color: #569cd6;" class="mycode_color">return</span> almacenar  <br />
usuarios_registrados = almacenar_datos()<br />
<span style="color: #569cd6;" class="mycode_color">def</span> login_usuarios():<br />
    print(<span style="color: #ce9178;" class="mycode_color">"BIENVENIDO AL PROGRAMA DE INICIO DE SESION!!!"</span>)<br />
    <br />
    <span style="color: #569cd6;" class="mycode_color">while</span> <span style="color: #569cd6;" class="mycode_color">True</span>:<br />
        user_ = input(<span style="color: #ce9178;" class="mycode_color">"Coloque su usuario: "</span>)<br />
        pwd_ = input(<span style="color: #ce9178;" class="mycode_color">"Coloque su contraseña: "</span>)<br />
        <span style="color: #569cd6;" class="mycode_color">if</span> user_ <span style="color: #569cd6;" class="mycode_color">in</span> usuarios_registrados.keys() <span style="color: #569cd6;" class="mycode_color">and</span> pwd_ <span style="color: #569cd6;" class="mycode_color">in</span> usuarios_registrados.values():<br />
            seguir_ = print(<span style="color: #ce9178;" class="mycode_color">"Inicio de sesion exitosa"</span>)<br />
            <span style="color: #569cd6;" class="mycode_color">if</span> seguir_.lower() != <span style="color: #ce9178;" class="mycode_color">"si"</span>:<br />
                print(<span style="color: #ce9178;" class="mycode_color">"PROGRAMA FINALIZADO"</span>)<br />
                <span style="color: #569cd6;" class="mycode_color">break</span><br />
            <br />
        <span style="color: #569cd6;" class="mycode_color">else</span>:<br />
            print(<span style="color: #ce9178;" class="mycode_color">"Usuario o contrasseña incorrecta, vuelva a intentarlo nuevamente!"</span>)<br />
            <br />
login_usuarios()</span></span>]]></description>
			<content:encoded><![CDATA[Buenas tardes<br />
<br />
Estoy teniendo problemas para poder guardar multiples usuarios con sus contraseñas en el programa que estoy haciendo, que es para una entrega de un curso.<br />
<br />
Mes esta costando mucho entender como puedo hacerlo, si alguno me puede encarrilar para ver que estyo haciendo mal. Desde ya gracias!<br />
<br />
<span style="color: #d4d4d4;" class="mycode_color"><span style="font-family: Consolas, 'Courier New', monospace;" class="mycode_font"><span style="color: #569cd6;" class="mycode_color">def</span> almacenar_datos():<br />
    print(<span style="color: #ce9178;" class="mycode_color">"BIENVENIDO AL PROGRAMA DE CREACION DE USUARIOS!!"</span>)<br />
    <span style="color: #569cd6;" class="mycode_color">while</span> <span style="color: #569cd6;" class="mycode_color">True</span>:<br />
        almacenar = {}<br />
        user = input(<span style="color: #ce9178;" class="mycode_color">"Digame su nombre de usuario que quiere utilizar: "</span>)<br />
        pwd = input(<span style="color: #ce9178;" class="mycode_color">"Digame su contraseña: "</span>)<br />
        <br />
        almacenar[user] = pwd<br />
        print(<span style="color: #ce9178;" class="mycode_color">"Gracias por registrarse!!!"</span>)<br />
        seguir = input(<span style="color: #ce9178;" class="mycode_color">"Desea seguir agregando usuarios? \n (si/no)"</span>)<br />
    <br />
        <span style="color: #569cd6;" class="mycode_color">if</span> seguir.lower() != <span style="color: #ce9178;" class="mycode_color">"si"</span>:<br />
            print(<span style="color: #ce9178;" class="mycode_color">"PROGRAMA FINALIZADO"</span>)<br />
            <span style="color: #569cd6;" class="mycode_color">break</span><br />
    <span style="color: #569cd6;" class="mycode_color">return</span> almacenar  <br />
usuarios_registrados = almacenar_datos()<br />
<span style="color: #569cd6;" class="mycode_color">def</span> login_usuarios():<br />
    print(<span style="color: #ce9178;" class="mycode_color">"BIENVENIDO AL PROGRAMA DE INICIO DE SESION!!!"</span>)<br />
    <br />
    <span style="color: #569cd6;" class="mycode_color">while</span> <span style="color: #569cd6;" class="mycode_color">True</span>:<br />
        user_ = input(<span style="color: #ce9178;" class="mycode_color">"Coloque su usuario: "</span>)<br />
        pwd_ = input(<span style="color: #ce9178;" class="mycode_color">"Coloque su contraseña: "</span>)<br />
        <span style="color: #569cd6;" class="mycode_color">if</span> user_ <span style="color: #569cd6;" class="mycode_color">in</span> usuarios_registrados.keys() <span style="color: #569cd6;" class="mycode_color">and</span> pwd_ <span style="color: #569cd6;" class="mycode_color">in</span> usuarios_registrados.values():<br />
            seguir_ = print(<span style="color: #ce9178;" class="mycode_color">"Inicio de sesion exitosa"</span>)<br />
            <span style="color: #569cd6;" class="mycode_color">if</span> seguir_.lower() != <span style="color: #ce9178;" class="mycode_color">"si"</span>:<br />
                print(<span style="color: #ce9178;" class="mycode_color">"PROGRAMA FINALIZADO"</span>)<br />
                <span style="color: #569cd6;" class="mycode_color">break</span><br />
            <br />
        <span style="color: #569cd6;" class="mycode_color">else</span>:<br />
            print(<span style="color: #ce9178;" class="mycode_color">"Usuario o contrasseña incorrecta, vuelva a intentarlo nuevamente!"</span>)<br />
            <br />
login_usuarios()</span></span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Exportación de datos.]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1496</link>
			<pubDate>Mon, 23 Sep 2024 20:31:37 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1281">Diego</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1496</guid>
			<description><![CDATA[Buenas, les quiero consultar sobre la exportación en txt.<br />
<br />
Tengo una lista: [('aaa', 'aa', '1111/11/11'), ('bbb', 'bb', '2222/22/22')] (cuya longitud es variable de acuerdo al criterio de búsqueda).<br />
<br />
Y me interesaría generar una salida del tipo:<br />
<br />
col1    col2    col3<br />
aaa    aa       1111/11/11<br />
bbb    bb      2222/11/11<br />
<br />
<br />
He intentado, con el siguiente método (ya que la salida debería ser un txt):<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>with open("resultado4.txt", "a+") as f:<br />
        print(resultado2, "&#92;n",file=f)</code></div></div><br />
como para, aunque sea, separar los ítems de la lista. Pero tampoco lo logré.<br />
<br />
Agradecería si pueden darme una indicación sobre cómo lograr la salida deseada a partir del ejemplo de lista dado.<br />
Saludos.]]></description>
			<content:encoded><![CDATA[Buenas, les quiero consultar sobre la exportación en txt.<br />
<br />
Tengo una lista: [('aaa', 'aa', '1111/11/11'), ('bbb', 'bb', '2222/22/22')] (cuya longitud es variable de acuerdo al criterio de búsqueda).<br />
<br />
Y me interesaría generar una salida del tipo:<br />
<br />
col1    col2    col3<br />
aaa    aa       1111/11/11<br />
bbb    bb      2222/11/11<br />
<br />
<br />
He intentado, con el siguiente método (ya que la salida debería ser un txt):<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>with open("resultado4.txt", "a+") as f:<br />
        print(resultado2, "&#92;n",file=f)</code></div></div><br />
como para, aunque sea, separar los ítems de la lista. Pero tampoco lo logré.<br />
<br />
Agradecería si pueden darme una indicación sobre cómo lograr la salida deseada a partir del ejemplo de lista dado.<br />
Saludos.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Coger datos de api esios luz]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1492</link>
			<pubDate>Sun, 25 Aug 2024 03:34:53 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1603">Alejandrogm</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1492</guid>
			<description><![CDATA[Hola,<br />
<br />
Por favor, te comento un poco porque he probado hacer scraping, tambien con<br />
codigo html y javascript. He probado con una herramienta de github,<br />
creo que tambien he mirado phyton.<br />
<br />
Necesitaria los **precios hora** como en esta web <a href="http://www.tarifaluzhora.es" target="_blank" rel="noopener" class="mycode_url">www.tarifaluzhora.es</a>, y tambien una **grafica** que tiene abajo.<br />
<br />
Probé este codigo html en mi web que me dijo la ia, pero no funciona.<br />
<br />
Qué habría que hacer?<br />
<br />
Un saludo, gracias.<br />
----<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
&lt;html lang="es"&gt;<br />
&lt;head&gt;<br />
    &lt;meta charset="UTF-8"&gt;<br />
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;<br />
    &lt;title&gt;Precios de la Luz&lt;/title&gt;<br />
    &lt;style&gt;<br />
        table {<br />
            width: 100%;<br />
            border-collapse: collapse;<br />
        }<br />
        th, td {<br />
            border: 1px solid #ddd;<br />
            padding: 8px;<br />
            text-align: center;<br />
        }<br />
        th {<br />
            background-color: #f2f2f2;<br />
        }<br />
        .highlight {<br />
            color: red; /* Cambia esto según sea necesario para el<br />
precio más alto */<br />
        }<br />
    &lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
    &lt;h1&gt;Precios de la Luz&lt;/h1&gt;<br />
    Precio ahora mismo: &lt;strong id="current-price"&gt;Cargando...&lt;/strong&gt;&lt;br&gt;<br />
    Precio medio del día: &lt;strong id="average-price"&gt;Cargando...&lt;/strong&gt;&lt;br&gt;<br />
    Precio más bajo del día: &lt;strong id="lowest-price"<br />
class="highlight"&gt;Cargando...&lt;/strong&gt;&lt;br&gt;<br />
    Precio más alto del día: &lt;strong id="highest-price"<br />
class="highlight"&gt;Cargando...&lt;/strong&gt;&lt;br&gt;<br />
<br />
    &lt;h2&gt;Precios por Hora&lt;/h2&gt;<br />
    &lt;table id="price-table"&gt;<br />
        &lt;thead&gt;<br />
            &lt;tr&gt;<br />
                &lt;th&gt;Hora&lt;/th&gt;<br />
                &lt;th&gt;Precio (€/kWh)&lt;/th&gt;<br />
            &lt;/tr&gt;<br />
        &lt;/thead&gt;<br />
        &lt;tbody&gt;<br />
            &lt;!-- Aquí se añadirán dinámicamente las filas de precios<br />
por hora --&gt;<br />
        &lt;/tbody&gt;<br />
    &lt;/table&gt;<br />
    &lt;p&gt;Datos extraídos de la Red Eléctrica de España. Precio medio del<br />
día: Media aritmética de los precios del día en función del tipo de<br />
tarifa.&lt;/p&gt;<br />
<br />
    &lt;script&gt;<br />
        async function fetchPrices() {<br />
            const date = new Date();<br />
            const startDate = date.toISOString().split('T')[0]; //<br />
Fecha de hoy en formato YYYY-MM-DD<br />
            const endDate = date.toISOString().split('T')[0]; // Fecha<br />
de hoy en formato YYYY-MM-DD<br />
<br />
            const url =<br />
`https://api.esios.ree.es/indicators/1013?start_date=&#36;{startDate}T00:00:00&amp;end_date=&#36;{endDate}T23:59:59`;<br />
<br />
            try {<br />
                const response = await fetch(url, {<br />
                    headers: {<br />
                        'Authorization': 'Token<br />
mi token' //<br />
Tu token<br />
                    }<br />
                });<br />
<br />
                if (!response.ok) {<br />
                    throw new Error('Error en la red');<br />
                }<br />
<br />
                const data = await response.json();<br />
<br />
                // Obtener precios y actualizar el HTML<br />
                const currentPrices = data.indicator.values[0]; // El<br />
primer valor es el actual<br />
                document.getElementById('current-price').innerText =<br />
`&#36;{currentPrices.value}€/kWh`;<br />
                document.getElementById('average-price').innerText =<br />
`&#36;{currentPrices.average}€/kWh`;<br />
                document.getElementById('lowest-price').innerText =<br />
`&#36;{currentPrices.min}€/kWh`;<br />
                document.getElementById('highest-price').innerText =<br />
`&#36;{currentPrices.max}€/kWh`;<br />
<br />
                // Actualiza la tabla de precios por hora<br />
                const tableBody =<br />
document.getElementById('price-table').getElementsByTagName('tbody')[0];<br />
                tableBody.innerHTML = ''; // Limpiar tabla antes de<br />
agregar nuevas filas<br />
<br />
                data.indicator.values.forEach((value) =&gt; {<br />
                    const row = document.createElement('tr');<br />
                    const hour = new<br />
Date(value.datetime).toLocaleTimeString([], { hour: '2-digit', minute:<br />
'2-digit' });<br />
                    row.innerHTML =<br />
`&lt;td&gt;&#36;{hour}&lt;/td&gt;&lt;td&gt;&#36;{value.value}€/kWh&lt;/td&gt;`;<br />
                    tableBody.appendChild(row);<br />
                });<br />
            } catch (error) {<br />
                console.error('Error al fetch los precios:', error);<br />
            }<br />
        }<br />
<br />
        // Llama a la función al cargar la página<br />
        fetchPrices();<br />
    &lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div><br />
Un saludo, gracias.]]></description>
			<content:encoded><![CDATA[Hola,<br />
<br />
Por favor, te comento un poco porque he probado hacer scraping, tambien con<br />
codigo html y javascript. He probado con una herramienta de github,<br />
creo que tambien he mirado phyton.<br />
<br />
Necesitaria los **precios hora** como en esta web <a href="http://www.tarifaluzhora.es" target="_blank" rel="noopener" class="mycode_url">www.tarifaluzhora.es</a>, y tambien una **grafica** que tiene abajo.<br />
<br />
Probé este codigo html en mi web que me dijo la ia, pero no funciona.<br />
<br />
Qué habría que hacer?<br />
<br />
Un saludo, gracias.<br />
----<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
&lt;html lang="es"&gt;<br />
&lt;head&gt;<br />
    &lt;meta charset="UTF-8"&gt;<br />
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;<br />
    &lt;title&gt;Precios de la Luz&lt;/title&gt;<br />
    &lt;style&gt;<br />
        table {<br />
            width: 100%;<br />
            border-collapse: collapse;<br />
        }<br />
        th, td {<br />
            border: 1px solid #ddd;<br />
            padding: 8px;<br />
            text-align: center;<br />
        }<br />
        th {<br />
            background-color: #f2f2f2;<br />
        }<br />
        .highlight {<br />
            color: red; /* Cambia esto según sea necesario para el<br />
precio más alto */<br />
        }<br />
    &lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
    &lt;h1&gt;Precios de la Luz&lt;/h1&gt;<br />
    Precio ahora mismo: &lt;strong id="current-price"&gt;Cargando...&lt;/strong&gt;&lt;br&gt;<br />
    Precio medio del día: &lt;strong id="average-price"&gt;Cargando...&lt;/strong&gt;&lt;br&gt;<br />
    Precio más bajo del día: &lt;strong id="lowest-price"<br />
class="highlight"&gt;Cargando...&lt;/strong&gt;&lt;br&gt;<br />
    Precio más alto del día: &lt;strong id="highest-price"<br />
class="highlight"&gt;Cargando...&lt;/strong&gt;&lt;br&gt;<br />
<br />
    &lt;h2&gt;Precios por Hora&lt;/h2&gt;<br />
    &lt;table id="price-table"&gt;<br />
        &lt;thead&gt;<br />
            &lt;tr&gt;<br />
                &lt;th&gt;Hora&lt;/th&gt;<br />
                &lt;th&gt;Precio (€/kWh)&lt;/th&gt;<br />
            &lt;/tr&gt;<br />
        &lt;/thead&gt;<br />
        &lt;tbody&gt;<br />
            &lt;!-- Aquí se añadirán dinámicamente las filas de precios<br />
por hora --&gt;<br />
        &lt;/tbody&gt;<br />
    &lt;/table&gt;<br />
    &lt;p&gt;Datos extraídos de la Red Eléctrica de España. Precio medio del<br />
día: Media aritmética de los precios del día en función del tipo de<br />
tarifa.&lt;/p&gt;<br />
<br />
    &lt;script&gt;<br />
        async function fetchPrices() {<br />
            const date = new Date();<br />
            const startDate = date.toISOString().split('T')[0]; //<br />
Fecha de hoy en formato YYYY-MM-DD<br />
            const endDate = date.toISOString().split('T')[0]; // Fecha<br />
de hoy en formato YYYY-MM-DD<br />
<br />
            const url =<br />
`https://api.esios.ree.es/indicators/1013?start_date=&#36;{startDate}T00:00:00&amp;end_date=&#36;{endDate}T23:59:59`;<br />
<br />
            try {<br />
                const response = await fetch(url, {<br />
                    headers: {<br />
                        'Authorization': 'Token<br />
mi token' //<br />
Tu token<br />
                    }<br />
                });<br />
<br />
                if (!response.ok) {<br />
                    throw new Error('Error en la red');<br />
                }<br />
<br />
                const data = await response.json();<br />
<br />
                // Obtener precios y actualizar el HTML<br />
                const currentPrices = data.indicator.values[0]; // El<br />
primer valor es el actual<br />
                document.getElementById('current-price').innerText =<br />
`&#36;{currentPrices.value}€/kWh`;<br />
                document.getElementById('average-price').innerText =<br />
`&#36;{currentPrices.average}€/kWh`;<br />
                document.getElementById('lowest-price').innerText =<br />
`&#36;{currentPrices.min}€/kWh`;<br />
                document.getElementById('highest-price').innerText =<br />
`&#36;{currentPrices.max}€/kWh`;<br />
<br />
                // Actualiza la tabla de precios por hora<br />
                const tableBody =<br />
document.getElementById('price-table').getElementsByTagName('tbody')[0];<br />
                tableBody.innerHTML = ''; // Limpiar tabla antes de<br />
agregar nuevas filas<br />
<br />
                data.indicator.values.forEach((value) =&gt; {<br />
                    const row = document.createElement('tr');<br />
                    const hour = new<br />
Date(value.datetime).toLocaleTimeString([], { hour: '2-digit', minute:<br />
'2-digit' });<br />
                    row.innerHTML =<br />
`&lt;td&gt;&#36;{hour}&lt;/td&gt;&lt;td&gt;&#36;{value.value}€/kWh&lt;/td&gt;`;<br />
                    tableBody.appendChild(row);<br />
                });<br />
            } catch (error) {<br />
                console.error('Error al fetch los precios:', error);<br />
            }<br />
        }<br />
<br />
        // Llama a la función al cargar la página<br />
        fetchPrices();<br />
    &lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div><br />
Un saludo, gracias.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Programa de simulación de rayo de luz]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1491</link>
			<pubDate>Mon, 12 Aug 2024 15:12:14 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1598">Camilo782</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1491</guid>
			<description><![CDATA[Tengo este código que debe simular un rayo de luz atravesando diferentes medios, hace bien el cálculo de los ángulos de refracción pero no los gráfica correctamente, creo que puede deberse a la forma en que se cálcula la posición X y Y, agradecería demasiado su ayuda<br />
<br />
-----<br />
<br />
import numpy as np<br />
import matplotlib.pyplot as plt<br />
from tkinter import Tk, Label, Entry, Button, StringVar, messagebox<br />
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg<br />
<br />
def snell_law(n1, n2, theta1):<br />
    """<br />
    Aplica la ley de Snell para calcular el ángulo de refracción dado el ángulo de incidencia.<br />
    """<br />
    theta1_rad = np.radians(theta1)<br />
    <br />
    sin_theta2 = (n1 / n2) * np.sin(theta1_rad)<br />
    <br />
    # Verificar si sin_theta2 está en el rango válido para arcsin<br />
    if sin_theta2 &lt; -1 or sin_theta2 &gt; 1:<br />
        raise ValueError("Hay reflexión total del rayo de luz")<br />
    <br />
    theta2_rad = np.arcsin(sin_theta2)<br />
    return np.degrees(theta2_rad)<br />
<br />
def calcular_trayectoria(n_indices, espesores, angulo_incidencia):<br />
    """<br />
    Calcula la trayectoria del rayo de luz a través de los diferentes medios.<br />
    """<br />
    angulos_refraccion = [angulo_incidencia]<br />
    puntos_x = [0]<br />
    puntos_y = [0]<br />
<br />
    x_actual = 0<br />
    y_actual = 0<br />
    angulo_actual = angulo_incidencia<br />
<br />
    for i in range(len(n_indices) - 1):<br />
        n1 = n_indices[i]<br />
        n2 = n_indices[i + 1]<br />
        espesor = espesores[i]<br />
<br />
<br />
        angulo_refraccion = snell_law(n1, n2, angulo_actual)<br />
        angulos_refraccion.append(angulo_refraccion)<br />
<br />
        distancia = espesor / np.cos(np.radians(angulo_refraccion))<br />
        x_actual += distancia * np.cos(np.radians(angulo_refraccion))<br />
        if n1 &gt; n2:<br />
            y_actual += distancia * np.sin(np.radians(angulo_refraccion))<br />
        elif n2 &gt; n1:<br />
            y_actual -= distancia * np.sin(np.radians(angulo_refraccion))<br />
        else:<br />
            y_actual = y_actual<br />
        <br />
        puntos_x.append(x_actual)<br />
        puntos_y.append(y_actual)<br />
        <br />
        # Actualizar el ángulo de incidencia para la siguiente iteración<br />
        angulo_actual = angulo_refraccion<br />
    return puntos_x, puntos_y, angulos_refraccion<br />
<br />
def graficar_trayectoria(puntos_x, puntos_y):<br />
    """<br />
    Grafica la trayectoria del rayo de luz.<br />
    """<br />
    fig, ax = plt.subplots(figsize=(6, 4))<br />
    ax.plot(puntos_x, puntos_y, '-o', label='Trayectoria del rayo')<br />
    for i in range(1, len(puntos_x)):<br />
        plt.axvline(x=puntos_x[i], color='gray', linestyle='--')<br />
    ax.set_xlabel('Profundidad (cm)')<br />
    ax.set_ylabel('Distancia vertical (cm)')<br />
    ax.set_title('Trayectoria del rayo de luz en diferentes medios')<br />
    ax.axhline(0, color='black', linewidth=0.5)<br />
    ax.grid(True)<br />
    ax.legend()<br />
    return fig<br />
<br />
def calcular_y_graficar():<br />
    """<br />
    Obtiene los datos de entrada, calcula la trayectoria y muestra la gráfica.<br />
    """<br />
    try:<br />
        n_indices = list(map(float, entry_n_indices.get().split(',')))<br />
        espesores = list(map(float, entry_espesores.get().split(',')))<br />
        angulo_incidencia = float(entry_angulo_incidencia.get())<br />
        <br />
        if len(n_indices) != len(espesores) + 1:<br />
            messagebox.showerror("Error", "La cantidad de índices de refracción debe ser igual a la cantidad de espesores + 1.")<br />
            return<br />
        <br />
        puntos_x, puntos_y, angulos_refraccion = calcular_trayectoria(n_indices, espesores, angulo_incidencia)<br />
        <br />
        fig = graficar_trayectoria(puntos_x, puntos_y)<br />
        <br />
        canvas = FigureCanvasTkAgg(fig, master=window)<br />
        canvas.draw()<br />
        canvas.get_tk_widget().grid(row=6, columnspan=2)<br />
        <br />
        resultado.set(f"Ángulos de refracción: {angulos_refraccion}")<br />
    except Exception as e:<br />
        messagebox.showerror("Error", f"Ha ocurrido un error: {str(e)}")<br />
<br />
# Configuración de la ventana principal<br />
window = Tk()<br />
window.title("Simulación de trayectoria de un rayo de luz")<br />
<br />
# Etiquetas y entradas<br />
Label(window, text="Índices de refracción (separados por comas):").grid(row=0, column=0)<br />
entry_n_indices = Entry(window)<br />
entry_n_indices.grid(row=0, column=1)<br />
<br />
Label(window, text="Espesores de los medios (separados por comas):").grid(row=1, column=0)<br />
entry_espesores = Entry(window)<br />
entry_espesores.grid(row=1, column=1)<br />
<br />
Label(window, text="Ángulo de incidencia (grados):").grid(row=2, column=0)<br />
entry_angulo_incidencia = Entry(window)<br />
entry_angulo_incidencia.grid(row=2, column=1)<br />
<br />
# Botón para calcular y graficar<br />
Button(window, text="Calcular y Graficar", command=calcular_y_graficar).grid(row=3, columnspan=2)<br />
<br />
# Campo para mostrar resultados<br />
resultado = StringVar()<br />
Label(window, textvariable=resultado).grid(row=4, columnspan=2)<br />
<br />
# Ejecución de la interfaz gráfica<br />
window.mainloop()<br />
-----]]></description>
			<content:encoded><![CDATA[Tengo este código que debe simular un rayo de luz atravesando diferentes medios, hace bien el cálculo de los ángulos de refracción pero no los gráfica correctamente, creo que puede deberse a la forma en que se cálcula la posición X y Y, agradecería demasiado su ayuda<br />
<br />
-----<br />
<br />
import numpy as np<br />
import matplotlib.pyplot as plt<br />
from tkinter import Tk, Label, Entry, Button, StringVar, messagebox<br />
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg<br />
<br />
def snell_law(n1, n2, theta1):<br />
    """<br />
    Aplica la ley de Snell para calcular el ángulo de refracción dado el ángulo de incidencia.<br />
    """<br />
    theta1_rad = np.radians(theta1)<br />
    <br />
    sin_theta2 = (n1 / n2) * np.sin(theta1_rad)<br />
    <br />
    # Verificar si sin_theta2 está en el rango válido para arcsin<br />
    if sin_theta2 &lt; -1 or sin_theta2 &gt; 1:<br />
        raise ValueError("Hay reflexión total del rayo de luz")<br />
    <br />
    theta2_rad = np.arcsin(sin_theta2)<br />
    return np.degrees(theta2_rad)<br />
<br />
def calcular_trayectoria(n_indices, espesores, angulo_incidencia):<br />
    """<br />
    Calcula la trayectoria del rayo de luz a través de los diferentes medios.<br />
    """<br />
    angulos_refraccion = [angulo_incidencia]<br />
    puntos_x = [0]<br />
    puntos_y = [0]<br />
<br />
    x_actual = 0<br />
    y_actual = 0<br />
    angulo_actual = angulo_incidencia<br />
<br />
    for i in range(len(n_indices) - 1):<br />
        n1 = n_indices[i]<br />
        n2 = n_indices[i + 1]<br />
        espesor = espesores[i]<br />
<br />
<br />
        angulo_refraccion = snell_law(n1, n2, angulo_actual)<br />
        angulos_refraccion.append(angulo_refraccion)<br />
<br />
        distancia = espesor / np.cos(np.radians(angulo_refraccion))<br />
        x_actual += distancia * np.cos(np.radians(angulo_refraccion))<br />
        if n1 &gt; n2:<br />
            y_actual += distancia * np.sin(np.radians(angulo_refraccion))<br />
        elif n2 &gt; n1:<br />
            y_actual -= distancia * np.sin(np.radians(angulo_refraccion))<br />
        else:<br />
            y_actual = y_actual<br />
        <br />
        puntos_x.append(x_actual)<br />
        puntos_y.append(y_actual)<br />
        <br />
        # Actualizar el ángulo de incidencia para la siguiente iteración<br />
        angulo_actual = angulo_refraccion<br />
    return puntos_x, puntos_y, angulos_refraccion<br />
<br />
def graficar_trayectoria(puntos_x, puntos_y):<br />
    """<br />
    Grafica la trayectoria del rayo de luz.<br />
    """<br />
    fig, ax = plt.subplots(figsize=(6, 4))<br />
    ax.plot(puntos_x, puntos_y, '-o', label='Trayectoria del rayo')<br />
    for i in range(1, len(puntos_x)):<br />
        plt.axvline(x=puntos_x[i], color='gray', linestyle='--')<br />
    ax.set_xlabel('Profundidad (cm)')<br />
    ax.set_ylabel('Distancia vertical (cm)')<br />
    ax.set_title('Trayectoria del rayo de luz en diferentes medios')<br />
    ax.axhline(0, color='black', linewidth=0.5)<br />
    ax.grid(True)<br />
    ax.legend()<br />
    return fig<br />
<br />
def calcular_y_graficar():<br />
    """<br />
    Obtiene los datos de entrada, calcula la trayectoria y muestra la gráfica.<br />
    """<br />
    try:<br />
        n_indices = list(map(float, entry_n_indices.get().split(',')))<br />
        espesores = list(map(float, entry_espesores.get().split(',')))<br />
        angulo_incidencia = float(entry_angulo_incidencia.get())<br />
        <br />
        if len(n_indices) != len(espesores) + 1:<br />
            messagebox.showerror("Error", "La cantidad de índices de refracción debe ser igual a la cantidad de espesores + 1.")<br />
            return<br />
        <br />
        puntos_x, puntos_y, angulos_refraccion = calcular_trayectoria(n_indices, espesores, angulo_incidencia)<br />
        <br />
        fig = graficar_trayectoria(puntos_x, puntos_y)<br />
        <br />
        canvas = FigureCanvasTkAgg(fig, master=window)<br />
        canvas.draw()<br />
        canvas.get_tk_widget().grid(row=6, columnspan=2)<br />
        <br />
        resultado.set(f"Ángulos de refracción: {angulos_refraccion}")<br />
    except Exception as e:<br />
        messagebox.showerror("Error", f"Ha ocurrido un error: {str(e)}")<br />
<br />
# Configuración de la ventana principal<br />
window = Tk()<br />
window.title("Simulación de trayectoria de un rayo de luz")<br />
<br />
# Etiquetas y entradas<br />
Label(window, text="Índices de refracción (separados por comas):").grid(row=0, column=0)<br />
entry_n_indices = Entry(window)<br />
entry_n_indices.grid(row=0, column=1)<br />
<br />
Label(window, text="Espesores de los medios (separados por comas):").grid(row=1, column=0)<br />
entry_espesores = Entry(window)<br />
entry_espesores.grid(row=1, column=1)<br />
<br />
Label(window, text="Ángulo de incidencia (grados):").grid(row=2, column=0)<br />
entry_angulo_incidencia = Entry(window)<br />
entry_angulo_incidencia.grid(row=2, column=1)<br />
<br />
# Botón para calcular y graficar<br />
Button(window, text="Calcular y Graficar", command=calcular_y_graficar).grid(row=3, columnspan=2)<br />
<br />
# Campo para mostrar resultados<br />
resultado = StringVar()<br />
Label(window, textvariable=resultado).grid(row=4, columnspan=2)<br />
<br />
# Ejecución de la interfaz gráfica<br />
window.mainloop()<br />
-----]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ayuda con Sockets en Python]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1484</link>
			<pubDate>Tue, 02 Jul 2024 05:55:28 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1579">jorgeSanDoc</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1484</guid>
			<description><![CDATA[Necesito ayuda con una serie de ejercicios en python con sockets contra un servidor, no son muy complicados.]]></description>
			<content:encoded><![CDATA[Necesito ayuda con una serie de ejercicios en python con sockets contra un servidor, no son muy complicados.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[buen libro para aprender phyton]]></title>
			<link>https://foro.recursospython.com/showthread.php?tid=1480</link>
			<pubDate>Tue, 18 Jun 2024 06:10:45 -0700</pubDate>
			<dc:creator><![CDATA[<a href="https://foro.recursospython.com/member.php?action=profile&uid=1550">tokiodata</a>]]></dc:creator>
			<guid isPermaLink="false">https://foro.recursospython.com/showthread.php?tid=1480</guid>
			<description><![CDATA[hola quiero aprender phyton desde 0 y me recomendaron este libro <br />
<a href="http://do1.dr-chuck.com/pythonlearn/ES_es/pythonlearn.pdf" target="_blank" rel="noopener" class="mycode_url">http://do1.dr-chuck.com/pythonlearn/ES_e...nlearn.pdf</a><br />
no se si me lo recomienden para empezar, y que tan bueno sea. <br />
les agradezco.]]></description>
			<content:encoded><![CDATA[hola quiero aprender phyton desde 0 y me recomendaron este libro <br />
<a href="http://do1.dr-chuck.com/pythonlearn/ES_es/pythonlearn.pdf" target="_blank" rel="noopener" class="mycode_url">http://do1.dr-chuck.com/pythonlearn/ES_e...nlearn.pdf</a><br />
no se si me lo recomienden para empezar, y que tan bueno sea. <br />
les agradezco.]]></content:encoded>
		</item>
	</channel>
</rss>