秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  276 随笔 :: 0 文章 :: 305 评论 :: 19万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
昨天测试本地部署deepseek-r1:8b模型,今天安装qwen2.5-coder模型,看哪个更适合代码编写。
一、安装qwen2.5-code:

1.如没安装过ollama,请下载并安装ollama安装脚本,如果已安装,请直接跳到第3步。如果没安装curl,请先安装(sudo apt install curl)再执行如下命令:

curl -fsSL https://ollama.com/install.sh | sh

2. 验证ollama是否安装成功,最简单是检查版本号。我安装的版本是 0.5.11,您安装的版本可能会有所不同。

ollama --version

3. 下载并运行 ollama run qwen2.5-coder(这个模型4.7GB)。

ollama run qwen2.5-coder

以下是详细的安装过程:

复制代码
lbz@lbz-VMware-Virtual-Platform:/usr/share/ollama/.ollama$ ollama run qwen2.5-coder
pulling manifest 
pulling 60e05f210007...  86% ▕██████████████████████    ▏ 4.0 GB/4.7 GB                  
Error: max retries exceeded: Get "https://dd20bb891979d25aebc8bec07b2b3bbc.r2.cloudflarestorage.com/ollama/docker/registry/v2/blobs/sha256/60/60e05f2100071479f596b964f89f510f057ce397ea22f2833a0cfe029bfc2463/data?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=66040c77ac1b787c3af820529859349a%2F20250217%2Fauto%2Fs3%2Faws4_request&X-Amz-Date=20250217T060915Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=98405a7c3b0e19a257e70b59e79b48746eb5b2fa5f6cab77cdb0b6b588cf17ac": net/http: TLS handshake timeout
lbz@lbz-VMware-Virtual-Platform:/usr/share/ollama/.ollama$ ollama run qwen2.5-coder
pulling manifest 
pulling 60e05f210007... 100% ▕██████████████████████████▏ 4.7 GB                         
pulling 66b9ea09bd5b... 100% ▕██████████████████████████▏   68 B                         
pulling e94a8ecb9327... 100% ▕██████████████████████████▏ 1.6 KB                         
pulling 832dd9e00a68... 100% ▕██████████████████████████▏  11 KB                         
pulling d9bb33f27869... 100% ▕██████████████████████████▏  487 B                         
verifying sha256 digest 
writing manifest 
success 
复制代码

二、测试qwen2.5-coder和deepseek-r1:8b用同一个问题让它们回答:
第1个问题:

帮我用lazarus写个简单的读取天气的demo

1、用qwen2.5-coder给出的答案:

复制代码
lbz@lbz-VMware-Virtual-Platform:/usr/share/ollama/.ollama$ ollama run qwen2.5-coder
>>> 帮我用lazarus写个简单的读取天气的demo
当然可以!下面是一个使用Lazarus编写的一个简单示例程序,展示如何通过HTTP请求调用天气
API(例如OpenWeatherMap)来获取天气信息。

### 1. 创建一个新的Lazarus项目

1. 打开Lazarus IDE。
2. 选择 `File` -> `New Project`。
3. 选择 `Application` -> `Console Application`,然后点击 `OK`。

### 2. 添加HTTP客户端组件

1. 在项目中添加一个HTTP客户端组件。你可以在 `Object Inspector` 中右键点击窗体,选择 
`Insert` -> `Component` -> `Standard` -> `TIdHTTP`。
2. 将 `TIdHTTP` 组件命名为 `IdHTTP1`。

### 3. 编写代码

在主单元的源代码文件(通常是 `unit1.pas`)中,编写以下代码:

```pascal
program WeatherDemo;

{$mode objfpc}{$H+}

uses
  Classes, SysUtils, IdHTTP, Json;

type
  TWeatherResponse = class
  public
    Main: string;
    Description: string;
    Temperature: Double;
    Humidity: Integer;
    // Add more fields as needed based on the API response
  end;

function GetWeatherResponse(const City: string; const APIKey: string): 
TWeatherResponse;
var
  IdHTTP: TIdHTTP;
  ResponseText: string;
  JSONObj, MainObj: TJSONObject;
begin
  Result := TWeatherResponse.Create;
  try
    IdHTTP := TIdHTTP.Create(nil);
    try
      // Replace 'YOUR_API_KEY' with your actual OpenWeatherMap API key
      ResponseText := 
IdHTTP.Get('https://api.openweathermap.org/data/2.5/weather?q=' + City + '&appid=' + 
APIKey + '&units=metric');
      JSONObj := TJSONObject.ParseJSONValue(ResponseText) as TJSONObject;
      try
        Result.Main := JSONObj.GetValue<string>('weather.0.main');
        Result.Description := JSONObj.GetValue<string>('weather.0.description');
        MainObj := JSONObj.GetValue<TJSONObject>('main');
        try
          Result.Temperature := MainObj.GetValue<Double>('temp');
          Result.Humidity := MainObj.GetValue<Integer>('humidity');
        finally
          MainObj.Free;
        end;
      finally
        JSONObj.Free;
      end;
    except
      on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
    end;
  finally
    IdHTTP.Free;
  end;
end;

begin
  try
    if ParamCount = 0 then
    begin
      Writeln('Usage: WeatherDemo <City>');
      ExitCode := 1;
      Halt;
    end;

    var City := ParamStr(1);
    var APIKey := 'YOUR_API_KEY'; // Replace with your actual OpenWeatherMap API key
    var Response := GetWeatherResponse(City, APIKey);

    Writeln('Weather in ', City);
    Writeln('Main: ', Response.Main);
    Writeln('Description: ', Response.Description);
    Writeln('Temperature: ', Response.Temperature:0:2, '°C');
    Writeln('Humidity: ', Response.Humidity, '%');

    FreeAndNil(Response);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
```

### 4. 运行程序

1. 将城市名称作为命令行参数传递给程序。例如:
   ```sh
   ./WeatherDemo London
   ```
2. 程序将输出指定城市的天气信息。

### 注意事项

- 替换 `YOUR_API_KEY` 为你从OpenWeatherMap获取的实际API密钥。
- 根据OpenWeatherMap API的具体返回格式,可能需要调整代码中的JSON解析部分。
- 处理异常和错误情况,确保程序的健壮性。

希望这个示例对你有帮助!如果你有任何问题,请随时提问。
复制代码

2、以下是deepseek-r1:8b给出的答案:

复制代码
lbz@lbz-VMware-Virtual-Platform:/usr/share/ollama/.ollama$ ollama run deepseek-r1:8b
>>> 帮我用lazarus写个简单的读取天气的demo
<think>
嗯,我现在要在Lazarus中编写一个简单的天气预报应用。让我先想一想,应该从哪里开始。

首先,我需要一个GUI界面,这样用户可以输入所在城市或者搜索关键词。可能使用
Vcl.Controls来创建各种组件,比如Edit、Button和Label。那我得先设置好项目选项,让它用
VCL窗口应用程序生成。

接下来是获取天气数据。我知道天气API比如OpenWeatherMap,可以提供 JSON 数据。所以,我需
要用HTTPClient来发送请求,解析返回的结果。可能需要处理不同的错误情况,比如网络问题或者
JSON解析失败。

然后是数据展示部分。天气预报通常包括温度、天气状态、风速等信息。我可以在一个Memo中显示
这些数据,用Label和其他组件来布局它们的位置。可能需要一些格式化,例如将温度显示为带有
符号的数字。

另外,我还得考虑用户体验,比如输入框自动 Suggestions。这样,当用户输入的时候,会根据历
史或实时数据给出匹配的城市或关键词。我可以在Edit中设置一个OnChange事件,调用API搜索建
议,并填充到ComboBox里。

需要注意的一点是权限问题,如果使用远程服务,可能需要在代码中添加访问权限声明,比如
HTTPClient的使用。另外,处理JSON数据时,要确保正确导入JsonUtils库,以避免错误。

最后,我会编写一个主循环,让应用程序有响应,即使用户没有输入也能展示默认信息或者提示。
这样,用户一打开应用,就能看到天气预报,不需要先输入城市。

总结一下步骤:
1. 创建Lazarus项目,设置VCL窗口。
2. 添加GUI组件:Edit、Button和Memo。
3. 获取天气数据,使用HTTPClient和OpenWeatherMap API。
4. 解析JSON数据,展示在Memo中。
5. 实现自动建议功能,根据输入查询关键词或城市。
6. 格式化显示数据,比如温度带符号。
7. 处理错误情况和用户体验问题。

现在,我应该按照这些步骤一步步编写代码,同时测试每个部分是否正常运行,确保没有错误发生
。比如,当点击查找按钮时,Edit中的内容被发送到API,返回数据后填充到Memo中。如果有错误
,比如网络问题,要显示相应的提示信息。

还有,我需要注意代码的可读性和注释,这样以后维护起来更方便。另外,如果用户输入无效城市
或关键词,如何处理?可能需要添加额外的错误检查和用户反馈。

总之,这个项目分为几个部分:GUI设置、数据获取与解析、数据展示以及用户体验优化。我会按
照这个顺序来编写代码,同时不断测试每一步是否正确工作。
</think>

### 使用Lazarus编写天气预报应用的步骤指南

1. **创建项目并设置环境**
   - 打开Lazarus IDE,选择“File” -> “New Project”,填写项目名称(例如“
WeatherDemo”)和路径。
   - 在项目选项中,确保使用VCL窗口应用程序,并且启用相应的组件,如Vcl.Controls、
Vcl.Forms、Vcl.Dialogs。

2. **添加必要的组件**
   - 在主单元中,通过右键点击“Form”并选择“Add Component”,然后添加Edit(输入框)、
Button(按钮)和Memo(多行文本框)。
   - 在工具栏中添加Label用于显示提示信息。

3. **设置布局和样式**
   - 将组件排列成一个合理的布局,使用Align属性将它们放置在正确的位置。
   - 设置Edit的大小、位置以及其他组件的外观,使界面更用户友好。

4. **集成天气数据获取功能**
   - 添加HTTPClient组件,并设置其代理和重试机制,以确保能够处理网络请求。
   - 在Button上添加点击事件,调用HTTPClient进行GET或POST请求到OpenWeatherMap API(例如
,使用用户的位置或搜索关键词)。

5. **解析JSON数据**
   - 使用JsonUtils库来解析服务器返回的JSON响应。导入`Json.readFromStream()`方法,将
JSON数据转换为TStringList。
   - 确保处理好错误情况,比如网络错误或无效JSON格式。

6. **展示天气信息**
   - 将获取到的天气数据显示在Memo中,使用Label分别显示温度、状态和风速等信息。可以添加
条件判断来显示不同的符号(如°, ↑, ↓)。

7. **实现自动建议功能**
   - 在Edit的OnChange事件中,启用并发请求,根据输入关键词或城市名称进行搜索。
   - 使用CustomComboBox或普通ComboBox来显示搜索结果,并设置OnSelect事件,以便用户可以
选择最相关的匹配项。

8. **处理用户体验问题**
   - 添加输入验证,确保用户提供的是有效的城市名或关键词。
   - 提供默认值,如当位置未知时,显示当前城市天气预报。
   - 处理空白情况,避免Memo为空时显示不友好信息。

9. **编写主循环以保持应用响应**
   - 确保在主线程中执行长时间操作,如网络请求,以防止应用冻结。
   - 使用Indicator或其他进度条来通知用户正在处理数据。

10. **测试和调试**
    - 逐步测试每个功能,确保Edit、Button、Memo以及显示的天气信息无误。
    - 处理常见错误,如API键错误、无网络连接等,并给出友好提示。
    - 确保应用在不同的输入情况下都能正确运行,并提供有用的默认值。

11. **发布或部署**
    - 如果项目完成,可以将其编译成可执行文件,或者将源代码打包分享。
    - 提供安装说明和使用文档,以帮助用户更好地使用应用。

通过以上步骤,你可以在Lazarus中创建一个功能齐全的天气预报应用。这个应用不仅展示天气信
息,还能提供便捷的搜索功能,给用户带来良好的用户体验。
复制代码
第2个问题:
用lazarus写个字符串加密程序

1、qwen2.5-code给出答案:

复制代码
lbz@lbz-VMware-Virtual-Platform:/usr/share/ollama/.ollama$ ollama run qwen2.5-coder
>>>                                                                                      S用lazarus写个字符串加密程序 
 好的,下面是一个简单的Lazarus字符串加密程序示例。这个程序使用了基本的字符移位加密方法
。

首先,确保你已经安装了Lazarus IDE,并且创建了一个新的Lazarus项目。

1. 打开Lazarus IDE并创建一个新的 Lazarus 项目。
2. 在项目中添加一个按钮和两个编辑框(用于输入明文和密文)。
3. 双击按钮以生成按钮点击事件的处理代码。
4. 将以下代码粘贴到按钮点击事件处理程序中:

```pascal
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  InputText, OutputText: string;
  i: Integer;
begin
  InputText := Edit1.Text;
  OutputText := '';
  
  for i := 1 to Length(InputText) do
  begin
    OutputText := OutputText + Chr(Ord(InputText[i]) + 3);
  end;
  
  Edit2.Text := OutputText;
end;

end.
```

这个程序的工作原理如下:
- 用户在 `Edit1` 中输入明文。
- 点击按钮时,程序遍历每个字符,并将其ASCII码值增加3(即进行简单的字符移位加密)。
- 加密后的字符串显示在 `Edit2` 中。

你可以根据需要修改加密算法。这个示例只是一个基础的演示。
复制代码

以下是deepseek-r:8b给出的答案:

复制代码
lbz@lbz-VMware-Virtual-Platform:/usr/share/ollama/.ollama$ ollama run deepseek-r1:8b
>>> 用lazarus写个字符串加密程序
<think>
嗯,我现在想试着用Lazarus编写一个简单的字符串加密程序。虽然我对编程还不算很熟,但我会
尽力理解和实现。

首先,Lazarus是什么?听起来像是用于跨平台开发的IDE,对吧?那可能意味着我可以在
Windows、macOS和Linux上使用同一个项目文件。那太好了,这样以后升级系统就不用重新编译了
。

我的目标是写一个字符串加密程序。那么,加密通常指的是将明文变成密码,防止未授权的人读取
。这可能涉及到替换字母、数字或者使用某种算法,比如凯撒密码之类的。但用户提到了
Lazarus,我想应该是编写一个编译型应用。

那么,问题来了:我需要用哪种编程语言来实现呢?Lazarus支持很多语言,其中包括Python、
C++、Delphi。比如,使用Py Lazarus的话,可以直接编写Python代码,这样更容易处理字符串操
作。

那好吧,我可以选择Python。所以,我的计划是:

1. 创建一个新的Lazarus项目,用Py Lazarus(Python)。
2. 编写一个函数来^C

>>> 用lazarus写个字符串加密程序
<think>
好的,让我们一步步来思考如何使用Lazarus编写一个简单的字符串加密程序。假设用户对编程基
础有一定的了解,但可能不是特别熟悉。

首先,Lazarus是什么?它是一种跨平台应用开发工具,可以在Windows、macOS和Linux上使用。它
支持多种语言,如Python、C++和Delphi等。对于我们这种简单的字符串加密程序,使用Python可
能会更方便,因为它语法简单且与字符串操作非常友好。

接下来,我们需要明确一下什么是“字符串加密”。通常,字符串加密可以有两种方式:一种是将
明文转换成密码(加密),另一种是隐藏明文的存在。这里我们先假设是前者,即将明文转化为密
码。

为了实现这个目标,我们需要一个简单的算法,比如凯撒密码。在凯撒密码中,字母会按照一定的
位数进行平移。比如,每个字母向后移动3位,这样“A”变成“D”,“B”变成“E”等等。这是
一个比较容易实现的加密方法。

接下来,我们需要编写代码来实现这个功能。由于我们使用的是Py Lazarus,代码结构将遵循
Python语法。以下是几个关键步骤:

1. **读取输入**:获取用户想要加密的字符串。
2. **定义加密方式**:选择一个加密算法,比如凯撒密码,将每个字母移动指定的位数。
3. **执行加密操作**:遍历字符串中的每个字符,应用加密方法,并将结果保存下来。
4. **输出加密后的字符串**:让用户看到加密后的结果。

在编写代码之前,我需要确保自己了解Lazarus的项目创建和文件结构。通常,你会通过Lazarus 
IDE创建一个新的Py Lazarus项目,然后在源文件中添加你的Python代码。

下面是一个简单的示例代码:

```python
def CaesarEncrypt(plainText, shift):
    encryptedText = []
    for char in plainText:
        if 'a' <= char <= 'z':
            # 检查字母是否在范围内,处理大小写问题
            newChar = chr((ord(char) - ord('a') + shift) % 26 + ord('a'))
            encryptedText.append(newChar)
        elif 'A' <= char <= 'Z':
            newChar = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
            encryptedText.append(newChar)
        else:
            # 对非字母字符保持不变,或者可以选择进行处理
            encryptedText.append(char)
    return ''.join(encryptedText)

def main():
    plainText = input("请输入要加密的字符串:")
    shift = int(input("请输入移位数(0-25):"))
    print("加密后的字符串为:")
    print(CaesarEncrypt(plainText, shift))

if __name__ == "__main__":
    main()
```

以上代码是一个简单的凯撒密码实现,允许用户选择一个移位数来对明文进行加密。用户可以根据
需要调整移位数,以获得不同的加密效果。

在实际编写代码之前,我还需要注意以下几点:

1. **处理大小写**:通常,加密算法会区分大小写。在代码中,分别处理小写和大写字母。
2. **非字母字符处理**:决定如何处理数字、符号等非字母字符。一种选择是保持它们不变。
3. **移位数范围**:确保移位数在0到25之间,以避免字母超出范围的情况。

编写完代码后,我需要通过Lazarus的IDE将其保存并运行。首先,创建一个新的Py Lazarus项目,
然后添加上述代码到`main.py`文件中。在工具栏中选择“Build and Run”,程序将运行,并提示
用户输入明文和移位数。

为了测试程序是否正常工作,我可以尝试一些简单的例子:

1. **示例1**:
   明文:Hello, World!
   移位数:3
   加密后:Khoor, Zod!

2. **示例2**:
   明文:The quick brown fox jumps over the lazy dog
   移位数:13
   加密后:Uryyb, Jbeyq! Nyr, Cbbj! Oyxxo, Gebnq! Thb ji uryyb jbeyq!

通过这些测试,我可以确认程序是否正确工作。

在编写过程中,如果遇到问题,我需要回去检查代码,逐步调试。例如,如果发现加密后的字符串
与预期不符,可能是移位数选择错误或者字符处理逻辑有误。

总结一下,通过以上步骤,我可以使用Py Lazarus编写一个简单的字符串加密程序,实现凯撒密码
的加密功能。这不仅能满足用户的需求,还能帮助我理解Lazarus开发环境和Python编程的基本流
程。
</think>

以下是详细的步骤说明:

1. **安装Lazarus IDE**- 如果尚未安装,访问官方网站(https://www.lazarus.idesigned.net),下载并安装相应版
本的Lazarus。

2. **创建新项目**- 打开Lazarus IDE,选择“File” > “New” > “Project”。
   - 在新项目向导中,选择“Python”作为语言,然后点击下一步。
   - 给项目起名,并设置存储位置。完成后,点击“OK”创建项目。

3. **编写代码**- 打开项目的源文件(通常是main.py),粘贴以下代码:

```python
def CaesarEncrypt(plainText, shift):
    encryptedText = []
    for char in plainText:
        if 'a' <= char <= 'z':
            newChar = chr((ord(char) - ord('a') + shift) % 26 + ord('a'))
            encryptedText.append(newChar)
        elif 'A' <= char <= 'Z':
            newChar = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
            encryptedText.append(newChar)
        else:
            encryptedText.append(char)
    return ''.join(encryptedText)

def main():
    plainText = input("请输入要加密的字符串:")
    shift = int(input("请输入移位数(0-25):"))
    print("加密后的字符串为:" + CaesarEncrypt(plainText, shift))

if __name__ == "__main__":
    main()
```

4. **编译并运行程序**- 在Lazarus IDE中,点击“Build and Run”按钮。
   - 这会将代码编译并运行,启动一个终端窗口提示用户输入信息。

5. **使用程序**- 用户按照提示输入明文和移位数。
   - 加密后的字符串会被打印出来。

**示例1**- 明文:`Hello, World!`
- 移位数:3

加密后结果为:`Khoor, Zod!`

**示例2**- 明文:`The quick brown fox jumps over the lazy dog`
- 移位数:13

加密后结果为:`Uryyb, Jbeyq! Nyr, Cbbj! Oyxxo, Gebnq! Thb ji uryyb jbeyq!`

**注意事项**- **移位数范围**:确保移位数在0到25之间。超过这个范围的话,字母会循环回来,比如移位
26相当于不加密。
- **处理非字母字符**:代码目前将非字母字符保持不变。如果需要,可以修改以执行其他操作,
如替换或删除。

这样,你就可以通过Lazarus编写一个简单的字符串加密程序,使用凯撒密码进行加密。
复制代码

 
测试不全面,只是简单试用,感觉qwen2.5-coder更适合我使用。

posted on   秋·风  阅读(209)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-02-17 修复lazarus combobox的下拉列表在linux时没有高亮显示选中的item的问题
点击右上角即可分享
微信分享提示