-
一、前言随着物联网(IoT)技术的快速发展,智能家居成为现代生活的一大亮点。通过将智能设备接入云平台,用户可以实现对设备的远程控制和管理,提高生活质量。而华为云作为领先的云服务平台,提供了功能强大的IoT设备接入与管理服务——IoTDA(IoT Device Access),为开发者和企业提供了便捷的物联网解决方案。本教程将带领大家手把手体验华为云的IoTDA服务,介绍如何通过华为云IoT平台完成智能家居设备的接入与管理。整个过程不需要真实的硬件设备,将通过MQTT客户端软件模拟设备,帮助初学者快速理解设备接入的流程。将一步步演示如何注册产品、创建设备、实现设备的接入、数据上传以及云端属性修改等操作,让你在最短的时间内掌握IoT平台的基本使用方法。无论你是物联网开发的新手,还是希望快速上手华为云IoT平台的用户,这篇教程都将为你提供清晰易懂的步骤和操作指南,让你轻松实现智能家居设备的上云。二、MQTT客户端软件整个过程需要用到的软件工具只有一个MQTT客户端。 这个软件将在本文章的附件里上传,方便大家下载。 二、上手实操华为云官网: cid:link_15打开官网,搜索物联网,就能快速找到 设备接入IoTDA。 3.1 物联网平台介绍华为云物联网平台(IoT 设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助我们快速构筑物联网解决方案。使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台、业务应用和设备。物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户构建各种物联网解决方案。设备可以通过固网、2G/3G/WIIF/5G、NB-IoT、Wifi等多种网络接入物联网平台,并使用LWM2M/CoAP、MQTT、HTTPS协议将业务数据上报到平台,平台也可以将控制命令下发给设备。业务应用通过调用物联网平台提供的API,实现设备数据采集、命令下发、设备管理等业务场景。 3.2 开通物联网服务地址: cid:link_12 开通免费单元。 点击 立即创建。 正在创建标准版实例,需要等待片刻。 创建完成之后,点击详情。 可以看到标准版实例的设备接入端口和地址。下面框起来的就是`端口号`和`域名` 点击实例名称,可以查看当前免费单元的配置情况。 开通之后,点击`接入信息`,也能查看接入信息。 我们当前设备准备采用MQTT协议接入华为云平台,这里可以看到MQTT协议的地址和端口号等信息。 总结:端口号: MQTT (1883)| MQTTS (8883) 接入地址: dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com根据域名地址得到IP地址信息:打开Windows电脑的命令行控制台终端,使用ping 命令。ping一下即可。Microsoft Windows [版本 10.0.19045.5011](c) Microsoft Corporation。保留所有权利。C:\Users\Lenovo>ping dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com正在 Ping dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com [117.78.5.125] 具有 32 字节的数据:来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44117.78.5.125 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位): 最短 = 37ms,最长 = 37ms,平均 = 37msC:\Users\Lenovo>MQTT协议接入端口号有两个,1883是非加密端口,8883是证书加密端口,单片机无法加载证书,所以使用1883端口合适。 3.3 创建产品链接:cid:link_0(1)创建产品 (2)填写产品信息根据自己产品名字填写,下面的设备类型选择自定义类型。 (3)产品创建成功 创建完成之后点击查看详情。 (4)添加自定义模型产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。模型简单来说: 就是存放设备上传到云平台的数据。当前设备需要与云平台交互的属性如下: 接下来就按照下面的属性创建 华为云平台的模型。上传到华为云服务器的属性:LED1 卧室灯 布尔类型LED2 客厅灯 布尔类型BH1750 环境光检测 浮点数SW1 风扇开关 布尔类型SW2 空调开关 布尔类型SW3 窗帘开关 布尔类型SW4 电视开关 布尔类型SHT30_T 环境温度 浮点数SHT30_H 环境湿度 浮点数 MQ2 烟雾检测 浮点数BEEP 蜂鸣器 布尔类型FLAME 火焰监测 布尔类型 先点击自定义模型。 【1】创建服务ID名字设置为: stm32然后点击新增属性。【2】LED1 卧室灯 布尔类型 【3】LED2 客厅灯 布尔类型【4】BH1750 环境光检测 浮点数 【5】SW1 风扇开关 布尔类型 【6】SW2 空调开关 布尔类型 【7】SW3 窗帘开关 布尔类型 【8】SW4 电视开关 布尔类型 【9】SHT30_T 环境温度 浮点数 【10】SHT30_H 环境湿度 浮点数 【11】MQ2 烟雾检测 浮点数 【12】BEEP 蜂鸣器 布尔类型 【13】FLAME 火焰监测 布尔类型 (5)创建完成 3.4 添加设备产品是属于上层的抽象模型,接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起,完成数据交互。(1)注册设备 (2)根据自己的设备填写 (3)保存设备信息创建完毕之后,点击保存并关闭,得到创建的设备密匙信息。该信息在后续生成MQTT三元组的时候需要使用。 内容信息。{ "device_id": "674b1361ef99673c8ad15dee_dev1", "secret": "12345678"} (4)设备创建完成 (5)设备详情点击详情。 下面是详情说明: 3.5 MQTT协议主题订阅与发布(1)MQTT协议介绍当前的设备是采用MQTT协议与华为云平台进行通信。MQTT是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议。MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化,使得其能适应各种物联网应用场景。目前MQTT拥有各种平台和设备上的客户端,已经形成了初步的生态系统。MQTT是一种消息队列协议,使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合,相对于其他协议,开发更简单;MQTT协议是工作在TCP/IP协议上;由TCP/IP协议提供稳定的网络连接;所以,只要具备TCP协议栈的网络设备都可以使用MQTT协议。 本次设备采用的ESP8266就具备TCP协议栈,能够建立TCP连接,所以,配合STM32代码里封装的MQTT协议,就可以与华为云平台完成通信。 华为云的MQTT协议接入帮助文档在这里: cid:link_10 业务流程:(2)华为云平台MQTT协议使用限制描述限制支持的MQTT协议版本3.1.1与标准MQTT协议的区别支持Qos 0和Qos 1支持Topic自定义不支持QoS2不支持will、retain msgMQTTS支持的安全等级采用TCP通道基础 + TLS协议(最高TLSv1.3版本)单帐号每秒最大MQTT连接请求数无限制单个设备每分钟支持的最大MQTT连接数1单个MQTT连接每秒的吞吐量,即带宽,包含直连设备和网关3KB/sMQTT单个发布消息最大长度,超过此大小的发布请求将被直接拒绝1MBMQTT连接心跳时间建议值心跳时间限定为30至1200秒,推荐设置为120秒产品是否支持自定义Topic支持消息发布与订阅设备只能对自己的Topic进行消息发布与订阅每个订阅请求的最大订阅数无限制 (3)主题订阅格式帮助文档地址:cid:link_10对于设备而言,一般会订阅平台下发消息给设备 这个主题。设备想接收平台下发的消息,就需要订阅平台下发消息给设备 的主题,订阅后,平台下发消息给设备,设备就会收到消息。如果设备想要知道平台下发的消息,需要订阅上面图片里标注的主题。以当前设备为例,最终订阅主题的格式如下:$oc/devices/{device_id}/sys/messages/down 最终的格式:$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/messages/down (4)主题发布格式对于设备来说,主题发布表示向云平台上传数据,将最新的传感器数据,设备状态上传到云平台。这个操作称为:属性上报。帮助文档地址:cid:link_6 根据帮助文档的介绍, 当前设备发布主题,上报属性的格式总结如下:发布的主题格式:$oc/devices/{device_id}/sys/properties/report 最终的格式:$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/properties/report发布主题时,需要上传数据,这个数据格式是JSON格式。上传的JSON数据格式如下:{ "services": [ { "service_id": <填服务ID>, "properties": { "<填属性名称1>": <填属性值>, "<填属性名称2>": <填属性值>, .......... } } ]}根据JSON格式,一次可以上传多个属性字段。 这个JSON格式里的,服务ID,属性字段名称,属性值类型,在前面创建产品的时候就已经介绍了,不记得可以翻到前面去查看。比如:根据这个格式,组合一次上传的属性数据:{"services": [{"service_id": "stm32","properties":{"LED1":0,"LED2":0,"BH1750":24.5,"SW1":0,"SW2":0,"SW3":0,"SW4":0,"SHT30_T":30.2,"SHT30_H":24.5,"MQ2":10.1,"BEEP":0,"FLAME":0}}]} 3.6 MQTT三元组MQTT协议登录需要填用户ID,设备ID,设备密码等信息,就像我们平时登录QQ,微信一样要输入账号密码才能登录。MQTT协议登录的这3个参数,一般称为MQTT三元组。 接下来介绍,华为云平台的MQTT三元组参数如何得到。 (1)MQTT服务器地址要登录MQTT服务器,首先记得先知道服务器的地址是多少,端口是多少。帮助文档地址:cid:link_1 MQTT协议的端口支持1883和8883,它们的区别是:8883 是加密端口更加安全。但是单片机上使用比较困难,所以当前的设备是采用1883端口进连接的。根据上面的域名和端口号,得到下面的IP地址和端口号信息: 如果设备支持填写域名可以直接填域名,不支持就直接填写IP地址。 (IP地址就是域名解析得到的)华为云的MQTT服务器地址:117.78.5.125华为云的MQTT端口号:1883 如何得到IP地址?如何域名转IP? 打开Windows的命令行输入以下命令。ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com (2)生成MQTT三元组华为云提供了一个在线工具,用来生成MQTT鉴权三元组: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com打开这个工具,填入设备的信息(也就是刚才创建完设备之后保存的信息),点击生成,就可以得到MQTT的登录信息了。下面是打开的页面: 填入设备的信息: (上面两行就是设备创建完成之后保存得到的)直接得到三元组信息。 得到三元组之后,设备端通过MQTT协议登录鉴权的时候,填入参数即可。ClientId 674b1361ef99673c8ad15dee_dev1_0_0_2024113013Username 674b1361ef99673c8ad15dee_dev1Password 8e22b61b0e6bf9f3911782b0e1e1cdcea2ab0952b7af6b34aa0d707732ec2f7a 3.7 模拟设备登录测试经过上面的步骤介绍,已经创建了产品,设备,数据模型,得到MQTT登录信息。 接下来就用MQTT客户端软件模拟真实的设备来登录平台。测试与服务器通信是否正常。 (1)填入登录信息打开MQTT客户端软件,对号填入相关信息(就是上面的文本介绍)。然后,点击登录,订阅主题,发布主题。 点击之后的效果: (2)打开网页查看完成上面的操作之后,打开华为云网页后台,可以看到设备已经在线了。 点击详情页面,可以看到上传的数据: 到此,云平台的部署已经完成,设备已经可以正常上传数据了。 (3)MQTT登录测试参数总结MQTT服务器: 117.78.5.125MQTT端口号: 1883//物联网服务器的设备信息#define MQTT_ClientID "674b1361ef99673c8ad15dee_dev1_0_0_2024113013"#define MQTT_UserName "674b1361ef99673c8ad15dee_dev1"#define MQTT_PassWord "8e22b61b0e6bf9f3911782b0e1e1cdcea2ab0952b7af6b34aa0d707732ec2f7a"//订阅与发布的主题#define SET_TOPIC "$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/messages/down" //订阅#define POST_TOPIC "$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/properties/report" //发布发布的数据:{"services": [{"service_id": "stm32","properties":{"LED1":0,"LED2":0,"BH1750":24.5,"SW1":0,"SW2":0,"SW3":0,"SW4":0,"SHT30_T":30.2,"SHT30_H":24.5,"MQ2":10.1,"BEEP":0,"FLAME":0}}]} 3.8 项目凭证接下来开发上位机,需要使用云平台的API接口,这些接口都需要token进行鉴权,需要使用项目凭证 这个参数。【1】获取项目凭证 点击左上角用户名,选择下拉菜单里的我的凭证项目凭证:ff981a50957a403cb68d906e0d424eed 3.9 创建IAM账户创建一个IAM账户,因为接下来开发上位机,需要使用云平台的API接口,这些接口都需要token进行鉴权。简单来说,就是身份的认证。 调用接口获取Token时,就需要填写IAM账号信息。所以,接下来演示一下过程。地址: cid:link_5 鼠标放在左上角头像上,在下拉菜单里选择统一身份认证。 点击右上角创建用户。 填写用户名和密码信息: 继续点击下一步: 然后点击创建用户。 创建成功: 创建完成 用户信息如下:主用户名 xiao_ping_pingIAM用户 ds_abc密码 DS12345678 3.10 获取影子数据帮助文档:cid:link_7设备影子介绍:设备影子是一个用于存储和检索设备当前状态信息的JSON文档。每个设备有且只有一个设备影子,由设备ID唯一标识设备影子仅保存最近一次设备的上报数据和预期数据无论该设备是否在线,都可以通过该影子获取和设置设备的属性简单来说:设备影子就是保存,设备最新上传的一次数据。我们设计的软件里,如果想要获取设备的最新状态信息,就采用设备影子接口。 如果对接口不熟悉,可以先进行在线调试:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow 在线调试接口,可以请求影子接口,了解请求,与返回的数据格式。 调试完成看右下角的响应体,就是返回的影子数据。 这里的工程ID要选择正确: 点击调试之后: 设备影子接口返回的数据如下:{ "device_id": "674b1361ef99673c8ad15dee_dev1", "shadow": [ { "service_id": "stm32", "desired": { "properties": null, "event_time": null }, "reported": { "properties": { "LED1": 18.1, "LED2": 16.2, "BH1750": 34.5, "SW1": 1, "SW2": 1, "SW3": 1, "SW4": 1, "SHT30_T": 20.2, "SHT30_H": 34.5, "MQ2": 10.1, "BEEP": 1, "FLAME": 1 }, "event_time": "20241130T134755Z" }, "version": 7 } ]} 调试成功之后,可以得到访问影子数据的真实链接,接下来的代码开发中,就采用Qt写代码访问此链接,获取影子数据,完成上位机开发。 链接如下:https://5a00dd0860.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/ff981a50957a403cb68d906e0d424eed/devices/674b1361ef99673c8ad15dee_dev1/shadow 3.11 修改设备属性地址: cid:link_8接口说明设备的产品模型中定义了物联网平台可向设备下发的属性,应用服务器可调用此接口向指定设备下发属性。平台负责将属性以同步方式发送给设备,并将设备执行属性结果同步返回。修改设备属性的接口,可以让服务器给设备下发指令,如果需要控制设备。在线调试地址:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=UpdateProperties 修改设备属性是属于同步命令,需要设备在线才可以进行调试,先使用MQTT客户端登录服务器,模拟设备上线。然后进行调试,测试数据远程下发给设备。 【1】利用MQTT客户端先登录设备 (这是同步命令,必须在线才能调试) 【2】点击调试 填入的测试数据:{"services":{"SW1":1}} 点击调试之后。 【4】可以看到,MQTT客户端软件上已经收到了服务器下发的消息 调试成功之后,可以得到修改设备属性的真实链接,接下来的代码开发中,就采用Qt写代码访问此链接,向设备发送控制命令,完成上位机开发。 https://5a00dd0860.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/ff981a50957a403cb68d906e0d424eed/devices/674b1361ef99673c8ad15dee_dev1/properties 由于是同步命令,服务器必须要收到设备的响应才能顺利完成一个流程(当然,设备不回应也没影响),设备响应了服务器才能确定数据下发成功。MQTT设备端如何响应呢?设备响应格式说明:cid:link_9 三、视频教程也可以看视频学习华为云IOT平台的使用过程:华为云物联网平台视频1:cid:link_13华为云物联网平台视频2:cid:link_14 我正在参加【案例共创】第1期 书写云产品应用构建开发最佳实践/评测,共创官方文档:cid:link_4
-
本次课程项目通过对埃拉托斯特尼筛法的原理分析,将其与MPI并行运算结合,大大降低了运算时间和时间复杂度。埃拉托斯特尼筛法(sieve of Eratosthenes),简称埃氏筛,也称素数筛,是简单且历史悠久的筛法,用来找出一定范围内所有素数。在寻找整数N以内的素数时,古希腊数学家埃拉托斯特尼采用了一种与众不同的方法:先将2-N的各数写在纸上:在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数是5,将它画圈,并划去5的其他倍数…… 依此类推,一直到所有小于或等于N的各数都画了圈或划去为止。这时,画了圈的以及未划去的那些数正好就是小于N的素数。以25为例,详细列出算法如下:列出2以后所有数: 2, 3 ,4 ,5, 6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19, 20 ,21 ,22, 23, 24 ,25标记第一个质数2标记2的倍数如果最大数不大于最后一个标出的素数的平方,那么剩下的所有的数都是质数,否则回到第二步本例中,25大于2的平方,返回第二步;2之后第一个质数是3,标记3的倍数;得到的质数是2、3,25仍大于3的平方,再次返回第二步;3之后第一个质数是5,标记5的倍数;得到的质数是2、3、5,25是5的平方,筛选完毕。去掉标记的数,25以内的质数是$$ 2\text{,}3\text{,}5\text{,}7\text{,}11\text{,}13\text{,}17\text{,}19\text{,}23 $$给出其C语言串行实现:int prime[100005]; bool is_prime[1000005]; int eratosthenes(int n) { int p = 0; for (int i = 0; i <= n; i++) { is_prime[i] = true; } is_prime[0] = is_prime[1] = 0; for (int i = 2; i <= n; i++) { if (is_prime[i]) { prime[p++] = i; if (1ll * i * i <= n) { for (int j = i * i; j <= n; j += i) { is_prime[j] = 0; } } } } return p; }下面使用并行计算加快这一筛法将数组分为p个连续的块,每个块大小基本相等。平衡负载要给每个进程分配$ \lfloor \frac{n}{p} \rfloor $或$ \lceil \frac{n}{p} \rceil $ 个元素,我们考虑下面这种不同的实现方法:进程i控制的第一个元素是$ \lfloor in/p \rfloor $,最后一个元素是 $ \lfloor \left( i+1 \right) n/p \rfloor -1 $,对于特定元素j,控制他的进程是$ \lfloor \left( p\left( j+1 \right) -1 \right) /n \rfloor $。我们将数组2,3,……n 分配给p个进程,令$$ low_value=2+\lfloor id*\left( n-1 \right) /p \rfloor $$ $$ high_value=1+\lfloor \left( id+1 \right) *\left( n-1 \right) /p \rfloor $$我们用进程0来储存步骤中用于筛选的k(即2到$\sqrt{n}$的质数),所以程序运行的前提必须要求$$ 2+proc0_size>=(int)sqrt((doubt)n) $$ 对每一个进程都要提供一个marked[size]这样的数组,prime保存当前用于筛选的质数,first表示进程id中第一个要被筛掉的数对应的marked数组的下标。index用于步骤中找到比prime大的未被标记的数中最小的那个数,index为0进程专属。核心部分的程序为:if(!id) index=0;//0进程专属 prime=2;//最开始用2去筛选 do{ //找到第一个被prime筛掉的数 if(prime*prime>low_value) first=prime*prime-low_value; else if(!(low_value%prime)) first=0; else first=prime-(low_value%prime); //筛数,筛掉的数对应marked数组相应位置赋值为1,做标记 for(i=first;i<size;i+=prime) marked[i]=1; //在0进程中找到比prime大的未被标记的数中最小的那个数,用这个质数做新的prime去筛选。 if(!id){ while(marked[++index]); prime=index+2;//marked[0]对应自然数2 } //把0进程找到的新的prime更新其他进程的prime的值 MPI_Bcast(&prime,1,MPI_INT,0,MPI_COMM_WORLD); }while(prime*prime<=n);结合MPI并行运算分析可能的几种并行化改造方案:特定线程剔除特定数:优点:直观;缺点:2的倍数最多,3的倍数次多,前几个 进程几乎决定了总的运算时间,成为瓶颈。按照可用进程数分段: 将待筛选的数字分为不同的段,每个段包含连续的一部分数字。 首先,每个进程独立地筛选其分配到的段中的素数。 接下来,进程间进行通信,共享各个进程的筛选结果,以便确定进一步筛选的范围。重复上述步骤,直到完成筛选过程。在此基础上,我们又将时间复杂度具体化,分析了各部分对于时间复杂度的影响,由此提出了删除偶数和消除广播两种降低时间复杂度的方法,在1E5、1E7、1E9、1E10四个量级的数据上基本都能降低一半的运行时间。根据最终运行时间图像可以发现,在一定规模的数据量下,随着进程数量的增加,运行时间是逐渐减小的,同时在1E9和1E10规模的图像中发现,去除偶数的算法耗费的时间略高于优化通信的时间,说明任务在线程中通信花费的时间较多,在1E5规模下时间随进程增大也能说明这一结论。
-
各位亲爱的版主们,大家好!经过大家一个月的努力角逐,8月外部版主激励评比结果已出炉,数据公示如下,请查看!(在新标签页打开图片可查看清晰大图/见附件)·外部版主激励规则:点击了解更多转正礼/基础任务/额外任务(在线时长15小时+,主题帖15+,回帖30+,技术长文5+/原创技术干货1+,合集1+,有效回复问题求助帖10+,话题互动1+,完成这4项指标可获对应价值的代金券/实物礼品)请完成任务获得激励的版主,点击填写激励发放意愿统计问卷反馈截止时间:2023年9月10日,以便小编进行相应的激励发放。注:在线时长数据达标后,才会再去考察达标版主的三项任务完成情况;主题数+回帖数达标后,才会再去考察达标版主的技术长文数量情况。
-
如题,寻找一名设计师
-
【创造Huawei Cloud Toolkit体验活动】遇见Toolkit,解决开发运维痛点使开发者部署效率提速6倍。与华为云其他产品无缝集成围绕其产品能力向开发者桌面上的延伸打通华为云到开发者的最后一公里。华为云Toolkit致力于为开发者提供更稳定、快速、安全的编程体验。快速、高效集成华为云API深度融合支持用户检索API、查看API文档、调试API。编程过程中支持SDK代码片段补全加速用户集成华为云应用支持快速部署,一键部署到ECS、CCI提供业界规范检查支持一键格式化和代码自动修复。Huawei Cloud Toolkit除了提供以上产品能力以外,还支持包括微服务工程搭建等在内的诸多能力。为了感谢所有为Huawei Cloud Toolkit迭代做出贡献的开发者,Huawei Cloud Toolkit推出【创造Huawei Cloud Toolkit体验活动】,欢迎提出您的反馈建议,我们将记录每一份贡献,从而共同定义一款真正好用的华为云开发者生态工具。产品建议有礼:即日起至【6月18日】登录华为云账号访问Toolkit产品页面,并在【云声】上提交Toolkit的产品改进建议提出关于Toolkit产品新特性需求,提出产品改进建议和用户体验,或者上报bug,并被采纳可以获得建议好礼(活动详情请戳)~3.推广插件,包括发朋友圈、发表文章、推荐给朋友等。截图并联系我们,可免费获取华为云技术领域干货电子书,同时问题被采纳可参与华为云周边礼包抽奖!
-
其他部门每天都会新建一个新的excel表格上传,名字后会有“月日”,在选择数据上传是如何做到选择今天的excel来上传
yd_232243532 发表于2023-02-21 15:26:14 2023-02-21 15:26:14 最后回复 This is WeAutomate 2023-02-25 08:29:42
59 4 -
猫很高冷很可爱wo'hen'
-
蓝色眼睛,金色头发,jiao'qiao
-
华为开发者大赛中国区·南部赛区线下技术沙龙,免费入场券30张!(最新改期)共建新生态,共创新价值!在这场技术沙龙,你将会学到云上最前沿的技术!你能和华为云专家面对面交流!还有各大代表企业现场切磋,机会难得!大会时间:9月27日 14:00-17:30 (因疫情原因,原定8月31日的活动延期到9月27日)大会地点:广州市天河区正佳广场万豪酒店大宴会厅A(场地有可能临时变动,请注意留意帖子更新)领取方式:微信扫码,添加小助手,领取入场券(限前30名)注:限完成【HCSD实训营——零代码云上开发体验季】活动报名用户参加,先到先得,限前30名,领完即止!>>>>>>>>点击报名【HCSD实训营——零代码云上开发体验季】<<<<<<<<<<
-
当前有以下需求: 实现一个用于计算(包括加减乘除)的小程序: 接受用户输入的计算式(如:3*4+1.1); 计算值; 将计算过程中涉及到的符号存储在元组中; 将计算中涉及到的值去重后存在列表里面(由大到小排列); 最后将计算过程存在字典里面(如 {"3*4+1.1":13.1} ) 本小白的代码是:numbers_count = input("请输入计算式:")print("您的结果为:", eval(numbers_count))symbol = {"+", "-", "*", "/", "%", "//", "**"}symbol_count = set({})for i in numbers_count: if i in symbol: symbol_count.add(i)symbol_tuple = tuple(symbol_count)print(symbol_tuple)numbers_all = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}numbers = set({})for i in numbers_count: if i in numbers_all: numbers.add(i)numbers_list = list(numbers)numbers_list.sort(reverse=True)print(numbers_list)numbers_dic = {numbers_count : eval(numbers_count)}print(numbers_dic)输入:5*3+3/4-3-4-5输出结果:请输入计算式:5*3+3/4-3-4-5您的结果为: 3.75('/', '*', '+', '-')['5', '4', '3']{'5*3+3/4-3-4-5': 3.75}本小白的思路是:1.为达成接受用户输入的计算式,需使用input函数2.为计算用户输入值,需使用eval 函数3.为计算过程中涉及到的符号存储在元组中,先创建一个包含所有符号的集合和一个空的集合。通过for和if,遍历用户输入的计算式的每个元素,并判断其是否在包含所有符号的集合中4.为计算中涉及到的值去重后存在列表里面(由大到小排列),与上面的方法类似。但是需额外使用numbers_list.sort(reverse=True),对数字进行排序&为了实现去重,可以将出现的数字放入集合中,最后再将集合转为列表。5为计算过程存在字典里面,需创建字典。作者使用的是x = {'a':'A','b':"B",'c':3}方法,除此之外课上还教了X = dict(a='A',b="B", c=3)和x = dict([("a", "A"),("b", "B"),("c",3)])方法。代码说明:numbers_count = input("请输入计算式:")#获得用户输入值print("您的结果为:", eval(numbers_count))#通过eval函数直接算出结果symbol = {"+", "-", "*", "/", "%", "//", "**"}#创建包含所有符号的集合symbol_count = set({})for i in numbers_count: if i in symbol: symbol_count.add(i)#以上为遍历+判断symbol_tuple = tuple(symbol_count)#转为元组类型print(symbol_tuple)numbers_all = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0"}numbers = set({})for i in numbers_count: if i in numbers_all: numbers.add(i)numbers_list = list(numbers)numbers_list.sort(reverse=True)#使用sort函数进行排序print(numbers_list)numbers_dic = {numbers_count : eval(numbers_count)}print(numbers_dic)写在最后,作者本科商科,从未碰过代码。因,研究生专业为区块链技术,不得已开始自学编程。以上帖子仅为作者对该任务的一些粗浅认识,如果其中文字或者代码有误,希望各位大神/大佬/前辈不吝赐教,谢谢!!!
上滑加载中
推荐直播
-
DeepSeek行业运用方案
2025/02/25 周二 16:30-17:30
阿肯-华为云生态技术讲师
本期课程将带您揭秘DeepSeek在多行业的创新方案,手把手演示如何通过ModelArts在华为云上构建方案。
回顾中 -
华为云 x DeepSeek:AI驱动云上应用创新
2025/02/26 周三 16:00-18:00
华为云 AI专家大咖团
在 AI 技术飞速发展之际,DeepSeek 备受关注。它凭借哪些技术与理念脱颖而出?华为云与 DeepSeek 合作,将如何重塑产品与应用模式,助力企业数字化转型?在华为开发者空间,怎样高效部署 DeepSeek,搭建专属服务器?基于华为云平台,又该如何挖掘 DeepSeek 潜力,实现智能化升级?本期直播围绕DeepSeek在云上的应用案例,与DTSE布道师们一起探讨如何利用AI 驱动云上应用创新。
去报名
热门标签