Web版本计算器——AIGC自动化编程(13)

发表于:2023-11-15 09:12

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:李宁    来源:51Testing软件测试网原创

#
AI
  5.2.2  Web版本计算器
  在4.3节中,我们使用Python和Tkinter实现了一个计算器程序。通过ChatGPT,我们也可以很容易将其转换为Web版,只需要向ChatGPT提供下面的文本即可。
  下面是用Python和Tkinter做的计算器程序,将这段程序转换为用HTML、CSS和JavaScript实现的Web程序。.css文件用calc.css,.js文件用calc.js。
  import tkinter as tk
  from tkinter import Entry, Button
  root = tk.Tk()
  root.geometry("300x400")
  ... 
  # 这里应该是完整的计算器代码
  读者在向ChatGPT提交上述文本时,应该提供完整的Python版本计算器代码。然后就是见证奇迹的时刻,ChatGPT会在一瞬间为你生成Web版计算器的相关代码。
  HTML代码如下。
  代码位置:src/web/calc.html
  <!DOCTYPE html>
  <html>
  <head>
    <title>计算器</title>
    <link rel="stylesheet" type="text/css" href="calc.css">
  </head>
  <body>
    <div class="calculator">
      <input id="display" type="text" readonly>
      <div class="buttons">
        <button class="number">7</button>
        <button class="number">8</button>
        <button class="number">9</button>
        <button class="operator">/</button>
        <button class="number">4</button>
        <button class="number">5</button>
        <button class="number">6</button>
        <button class="operator">*</button>
        <button class="number">1</button>
        <button class="number">2</button>
        <button class="number">3</button>
        <button class="operator">-</button>
        <button class="number">0</button>
        <button class="decimal">.</button>
        <button class="equal">=</button>
        <button class="operator">+</button>
      </div>
    </div>
    <script src="calc.js"></script>
  </body>
  </html>
  CSS代码如下。
  代码位置:src/web/calc.css
  .calculator {
      width: 300px;
      margin: 0 auto;
      padding: 20px;
      text-align: center;
    }
    
    #display {
      width: 100%;
      margin-bottom: 10px;
      font-size: 18px;
      padding: 5px;
    }
    
    .buttons {
      display: grid;
      grid-template-columns: repeat(4, 1fr);
      grid-gap: 5px;
    }
    
    button {
      width: 100%;
      font-size: 18px;
      padding: 10px;
    }
  JavaScript代码如下。
  代码位置:src/web/calc.js
  document.addEventListener('DOMContentLoaded', function() {
      var display = document.getElementById('display');
      var buttons = document.getElementsByClassName('number');
      var operators = document.getElementsByClassName('operator');
      var decimal = document.getElementsByClassName('decimal')[0];
      var equal = document.getElementsByClassName('equal')[0];
    
      for (var i = 0; i < buttons.length; i++) {
        buttons[i].addEventListener('click', function() {
          display.value += this.textContent;
        });
      }
    
      for (var i = 0; i < operators.length; i++) {
        operators[i].addEventListener('click', function() {
          display.value += this.textContent;
        });
      }
    
      decimal.addEventListener('click', function() {
        if (!display.value.includes('.')) {
          display.value += this.textContent;
        }
      });
    
      equal.addEventListener('click', function() {
        var expression = display.value;
        var result = eval(expression);
        display.value = result;
      });
    });
  在浏览器中,打开calc.html页面,会显示计算器页面。图5-6展示了输入表达式的页面,图5-7展示了得到结果的页面。
图5-6  输入表达式的页面
图5-7  得到结果的页面
  不过ChatGPT生成的代码有两个小瑕疵。
  ·<input>标签是只读的。calc.html中有一个小瑕疵,就是<input>标签多了一个readonly属性,让<input>成为只读的标签了,将readonly属性去掉,就与用Python和Tkinter实现的计算器程序一样了,这样可以同时通过文本框和按键输入数字了。
  · 没有生成双击清除的代码。
  在calc.js文件最后,输入下面的注释。
  <span style="white-space:pre"> </span>// 为display添加鼠标左键双击事件<span style="white-space:pre"> </span>
  不断按Enter键和Tab键,GitHub Copilot会自动生成如下代码,默认就将display中的内容清空了。
  display.addEventListener('dblclick', function() {
      display.value = '';
  });
  5.2.3  Web版图像搜索器
  在4.5节中,我们使用Tkinter与Flask分别实现了图像搜索器的客户端和服务端程序。在本节中,我们使用ChatGPT直接将用Tkinter实现的客户端程序转换为Web版的图像搜索器客户端程序。直接发给ChatGPT如下文本就可以实现这个转换。
  下面的代码是使用Python和Tkinter实现的图像搜索器客户端程序。将这段代码转换为用HTML、CSS、JavaScript等Web技术实现的Web版客户端程序。.js文件可以用单个文件存储。
  # 这里要粘贴完整的Tkinter版客户端代码
  ChatGPT会回复如下两段代码。
  HTML代码如下。
  代码位置:src/web/image_searcher.html
  <!DOCTYPE html>
  <html>
  <head>
      <title>图像搜索器</title>
      <style>
          .image-container {
              display: flex;
              flex-wrap: wrap;
              justify-content: center;
          }
          .image-container img {
              width: 150px;
              height: 150px;
              margin: 5px;
          }
      </style>
  </head>
  <body>
      <div>
          <label for="query-input">文件名</label>
          <input id="query-input" type="text" />
          <button id="search-button">搜索</button>
      </div>
      <div id="image-container" class="image-container"></div>
      <script src="image_searcher.js"></script>
  </body>
  </html>
  JavaScript代码如下。
  代码位置:src/web/image_searcher.js
  document.getElementById('search-button').addEventListener('click', function() {
      const queryInput = document.getElementById('query-input');
      const imageContainer = document.getElementById('image-container');
      // 清空image-container
      imageContainer.innerHTML = '';
      // 获取查询字符串
      const query = queryInput.value;
      // 发送GET请求
      fetch('http://localhost:1234/search query=${query}')
          .then(response => {
              if (!response.ok) {
                  throw new Error('Network response was not ok');
              }
              return response.text();
          })
          .then(data => {
              const relativePaths = data.split(', ');
              const base_url = 'http://localhost:1234/';
              const absolutePaths = relativePaths.map(path => base_url + path);
              // 对于每个图像URL,创建一个新的img元素,并添加到image-container中
              absolutePaths.forEach(path => {
                  const img = document.createElement('img');
                  img.src = path;
                  imageContainer.appendChild(img);
              });
          })
          .catch(error => {
              console.error('There has been a problem with your fetch 
                                 operation:', error);
          });
  });
  由于本例直接在浏览器中发送HTTP GET请求,属于跨域访问,因此需要改进server.py的代码,加入跨域访问支持。这里需要一个flask_cors模块,使用下面的命令安装该模块。
  pip install flask_cors
  然后,在server.py中,添加如下代码。
  from flask_cors import CORS
  app = Flask(__name__)
  CORS(app)  # 使Flask应用支持CORS
  在浏览器中,访问image_searcher.html页面,然后在出现的搜索框中输入robot,单击“搜索”按钮,会显示图5-8所示的搜索结果。
图5-8  搜索结果
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号