{"id":15769,"date":"2024-12-24T11:53:40","date_gmt":"2024-12-24T09:53:40","guid":{"rendered":"https:\/\/www.beseit.net\/?p=15769"},"modified":"2024-12-25T12:29:31","modified_gmt":"2024-12-25T10:29:31","slug":"calculadora-amb-pyton-flask-i-html","status":"publish","type":"post","link":"https:\/\/www.beseit.net\/?p=15769","title":{"rendered":"Calculadora amb Python, Flask, JavaScript, HTML"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Arbre del projecte<\/h3>\n\n\n\n<p><a href=\"https:\/\/www.python.org\/downloads\/\" target=\"_blank\" rel=\"noreferrer noopener\">Insta-la Python a Windows<\/a><\/p>\n\n\n\n<p>Python no apareix a l&#8217;arbre del projecte perqu\u00e8 es pressuposa que ja est\u00e0 instal\u00b7lat pr\u00e8viament al sistema operatiu. L&#8217;arbre del projecte nom\u00e9s mostra els fitxers i directoris espec\u00edfics del teu projecte. Aqu\u00ed tens l&#8217;arbre del projecte sense Python:<\/p>\n\n\n\n<p>Ara hem d&#8217;instal\u00b7lar Flask al directori <mark style=\"background-color:rgba(0, 0, 0, 0);color:#f80b0b\" class=\"has-inline-color\">env<\/mark> (entorn virtual)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python -m venv env (crea un entorn virtual)\n.\\env\\Scripts\\activate (Activa l'entorn vritual)\npip install flask (instal\u00b7la Flask dintre del entorn-&gt; dependencies aillades)<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#ee0d0d\" class=\"has-inline-color\">ARBRE1:<\/mark> Es llan\u00e7a l'escript obrint calculadora.html amb el navegador \n\nC:\\Users\\urqte\\Desktop\\calculadora\n\u251c\u2500\u2500 app.py\n\u251c\u2500\u2500 calculadora_html.py\n\u251c\u2500\u2500 env\n\u251c\u2500\u2500 estructura.txt\n\u251c\u2500\u2500 \n\u2514\u2500\u2500 templates\n    \u2514\u2500\u2500 calculadora.html\n\nindex.html= calculadora.html, es canvia el nom per a que funcioni a l'arbre 2\nFunciona indistintament tamb\u00e9 a:\n\n<mark style=\"background-color:rgba(0, 0, 0, 0);color:#ee0d0d\" class=\"has-inline-color\">ARBRE2: <\/mark>Es llan\u00e7a l'escript amb el navegador a l'adre\u00e7a: <a href=\"https:\/\/beseit.net\/calculadora\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/beseit.net\/calculadora\/<\/a>\nS: es una unitat de xarxa de Synology que coinsideix amb el www del Synology,\n\n\nS:\\beseit\\calculadora>\n\u251c\u2500\u2500 app.py\n\u251c\u2500\u2500 calculadora_html.py\n\u251c\u2500\u2500 calculadora.ico\n\u251c\u2500\u2500 env\n\u251c\u2500\u2500 estructura.txt\n\u251c\u2500\u2500 index.htm\n\u2514\u2500\u2500 templates\n    \u2514\u2500\u2500 \n\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explicaci\u00f3 del projecte<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>app.py<\/strong>: Aquest fitxer cont\u00e9 el codi per al servidor Flask que gestiona les sol\u00b7licituds del formulari HTML i retorna el resultat de la calculadora.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, render_template, request  # Importa les classes i funcions necess\u00e0ries de Flask\n\napp = Flask(__name__)  # Crea una inst\u00e0ncia de l'aplicaci\u00f3 Flask\n\ndef suma(a, b):  # Defineix una funci\u00f3 per sumar dos n\u00fameros\n    return a + b\n\ndef resta(a, b):  # Defineix una funci\u00f3 per restar dos n\u00fameros\n    return a - b\n\ndef multiplica(a, b):  # Defineix una funci\u00f3 per multiplicar dos n\u00fameros\n    return a * b\n\ndef divideix(a, b):  # Defineix una funci\u00f3 per dividir dos n\u00fameros\n    if b != 0:  # Comprova que el divisor no sigui zero\n        return a \/ b\n    else:  # Si el divisor \u00e9s zero, retorna un missatge d'error\n        return \"No es pot dividir per zero\"\n\n@app.route('\/')  # Defineix la ruta per a la p\u00e0gina principal\ndef index():  # Defineix la funci\u00f3 que es crida quan es visita la p\u00e0gina principal\n    return render_template('calculadora.html')  # Renderitza el fitxer HTML 'calculadora.html'\n\n@app.route('\/resultat', methods=&#91;'POST'])  # Defineix la ruta per a la p\u00e0gina de resultats, nom\u00e9s accepta sol\u00b7licituds POST\ndef resultat():  # Defineix la funci\u00f3 que es crida quan es visita la p\u00e0gina de resultats\n    operacio = request.form&#91;'operacio']  # Obt\u00e9 l'operaci\u00f3 seleccionada del formulari\n    num1 = float(request.form&#91;'num1'])  # Obt\u00e9 el primer n\u00famero del formulari i el converteix a float\n    num2 = float(request.form&#91;'num2'])  # Obt\u00e9 el segon n\u00famero del formulari i el converteix a float\n\n    if operacio == '1':  # Si l'operaci\u00f3 \u00e9s '1', suma els dos n\u00fameros\n        resultat = suma(num1, num2)\n    elif operacio == '2':  # Si l'operaci\u00f3 \u00e9s '2', resta els dos n\u00fameros\n        resultat = resta(num1, num2)\n    elif operacio == '3':  # Si l'operaci\u00f3 \u00e9s '3', multiplica els dos n\u00fameros\n        resultat = multiplica(num1, num2)\n    elif operacio == '4':  # Si l'operaci\u00f3 \u00e9s '4', divideix els dos n\u00fameros\n        resultat = divideix(num1, num2)\n    else:  # Si l'operaci\u00f3 no \u00e9s v\u00e0lida, retorna un missatge d'error\n        resultat = \"Elecci\u00f3 inv\u00e0lida\"\n\n    return render_template('resultat.html', resultat=resultat)  # Renderitza el fitxer HTML 'resultat.html' amb el resultat\n\nif __name__ == '__main__':  # Si aquest fitxer es crida directament, executa l'aplicaci\u00f3 Flask\n    app.run(debug=True)  # Executa l'aplicaci\u00f3 en mode de depuraci\u00f3\n<\/code><\/pre>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>calculadora.py<\/strong>: Aquest fitxer cont\u00e9 la l\u00f2gica de la calculadora, com ara les funcions per sumar, restar, multiplicar i dividir.<\/li>\n\n\n\n<li><strong>calculadora_html.py<\/strong>: Aquest fitxer genera el fitxer HTML que s&#8217;obre amb el navegador. Potser cont\u00e9 codi per crear la interf\u00edcie d&#8217;usuari de la calculadora.<\/li>\n\n\n\n<li><strong>env\/<\/strong>: Aquest directori cont\u00e9 l&#8217;entorn virtual de Python, que inclou totes les depend\u00e8ncies necess\u00e0ries per executar el projecte.<\/li>\n\n\n\n<li><strong>estructura.txt<\/strong>: Aquest fitxer probablement cont\u00e9 informaci\u00f3 sobre l&#8217;estructura del projecte o instruccions per a l&#8217;\u00fas del projecte.<\/li>\n\n\n\n<li><strong>templates\/<\/strong>: Aquest directori cont\u00e9 els fitxers HTML. En aquest cas, cont\u00e9 el fitxer <code>calculadora.html<\/code>, que \u00e9s la interf\u00edcie d&#8217;usuari de la calculadora. Un cop finalitzat el projecte aquest directori es pot suprimir.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Funcionament del projecte<\/h3>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Formulari HTML<\/strong>: El fitxer <code>calculadora.html<\/code> cont\u00e9 un formulari que permet als usuaris introduir n\u00fameros i seleccionar una operaci\u00f3. Quan l&#8217;usuari envia el formulari, les dades es passen al servidor Flask.<\/li>\n\n\n\n<li><strong>Servidor Flask<\/strong>: El fitxer <code>app.py<\/code> cont\u00e9 el codi per al servidor Flask. Aquest servidor gestiona les sol\u00b7licituds del formulari HTML i crida les funcions de la calculadora per calcular el resultat.<\/li>\n\n\n\n<li><strong>L\u00f2gica de la calculadora<\/strong>: El fitxer <code>calculadora.py<\/code> cont\u00e9 les funcions per sumar, restar, multiplicar i dividir. Aquestes funcions es criden des del servidor Flask per calcular el resultat.<\/li>\n\n\n\n<li><strong>Resultat<\/strong>: El servidor Flask retorna el resultat de la calculadora al navegador web, on es mostra a l&#8217;usuari.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Arbre del projecte Insta-la Python a Windows Python no apareix a l&#8217;arbre del projecte perqu\u00e8 es pressuposa que ja est\u00e0 instal\u00b7lat pr\u00e8viament al sistema operatiu. L&#8217;arbre del projecte nom\u00e9s mostra els fitxers i directoris espec\u00edfics del teu projecte. Aqu\u00ed tens &hellip; <a href=\"https:\/\/www.beseit.net\/?p=15769\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":8179,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[182],"tags":[],"class_list":["post-15769","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-django"],"_links":{"self":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/15769","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15769"}],"version-history":[{"count":12,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/15769\/revisions"}],"predecessor-version":[{"id":15793,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/15769\/revisions\/15793"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/media\/8179"}],"wp:attachment":[{"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=15769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=15769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}