当前位置: 首页 > news >正文

Linux centos7 bash编程(循环与条件判断)

在编程训练中,循环结构与条件判断十分重要。

根据条件为真为假确定是否执行循环。

有时,根据条件的真假结果,决定执行哪些语句,这就是分支语句。

为了训练分支语句与循环语句,我们设计一个案例:

求一组数字:两数平方和为另一数平方

符合条件时,有三个数:i和j,其平方和与k的平方相等。

        i*i+j*j==k*k

或写作:

       i^{2}+j^2= k^2

如果满足条件,我们将会有一组共三个数字,如果有多组数字符合条件,将遇到一个棘手问题:如何同时存放相关三几个数字,如何存放多组这类数字。这是各类语言要解决的重要课题。

为了存储各类数据,python中设置了基本数据类型及组合数据类型。对于相关的多数据存储问题,首先要考虑的是列表(list)、元组(tuple)、集合(set)和字典(dict)。

对于我们要解决的问题,可以考虑用元组(i,j,k),也可以用列表(k,(i,j)),更可以用字典{k:(i,j)}。

而对于bash中解决这类问题,就不方便了。为了训练运用数组a((i0,j0,k0),(i1,j1,k1),…)

下面结合代码,具体讨论数据的存储。

一、python循环与条件判断

由于符合条件的三个数比较多,我们仅求一定数据范围内的符合条件的一组数字。

1.列表存储结果

ls=[]

for i in range(50,100):

    for j in range(50,100):

            for k in range(50,100):

                 if i**2 + j**2 == k**2:

                     ls.append((k,j,i))

for i in range(len(ls)):

    print(ls[i])

2.嵌套列表存储结果

ls=[]

for i in range(50,100):

    for j in range(50,100):

            for k in range(50,100):

                 if i**2 + j**2 == k**2:

                     ls.append((k,(j,i)))

for i in range(len(ls)):

    print(ls[i])

3.字典存储结果

dict={}

for i in range(40,99):

        for j in range(40,99):

                for k in range(40,99):

                        if i**2+j**2 == k**2:

                                dict[k]=(i,j)

for key,value in dict.items():

        print(key,value)

打印输出时,按k值输出,不存在重复问题。

 二、bash循环与条件判断

求一组数,这是一个循环问题:

用什么循环结构,for?while?

循环初始条件、结束条件及循环方式

具备什么条件,完成什么事情;具体什么条件,不做什么事情。

循环离不开条件判断!

不同的条件,将产生不同的处理结果,这就是分支语句。

具体什么条件,不做什么事情。可用continue语句,这是一类中断处理方式。

下面的分析,以for循环为主。

1.选择循环结构

设计i,j,k为循环变量,取值范围1-50,用for循环表示,可以这样写(以i为例):

        for i in $(seq 50)

也可以:

        for i in {1..50}

或用C语言风格这样写:

        for((i=1;i<=50;i++)

下面是循环执行的代码,用do标记开始,用done标记结束。最好各自占用一行,其内的代码要缩进,或按一次Tab键,或按4次空格键

PS:同一脚本文件中,要统一使用缩进格式:用Tab,就一直用;用4个空格,就一直用。不能混用两种格式。有缩进的地方一定要缩进,否则会报错。

2.条件判断与循环

主要代码是

        k*k == i*i+j*j

bash支持**和但不支持^。可用i*i或i**

从表达式可以看到:

如果表达式成立,交换一下i j也成立。

如何保证仅有一个K值,而不是两个K值呢?

两种手段:

a.在代码中处理,第一组K值打印输出,第二组相同K值的不输出

b.全部结果打印输出后,去掉重复的K值

为了训练代码处理问题的手段,我们重点讨论输出后处理。

a.输出时处理

不输出第二次出现的K值,就需要对K值计数:

第一次,打印输出;

第二次,不输出

设置计数可用变量count,也可以简写为cnt

如何设计不打印输出呢?

用echo,会多出空行。

用echo打印输出其他内容,又显多余。

如何处理?

这就用到continue语句!

当第二次出现k值时,什么都不做,continue继续下一次循环!

b.输出后处理

用sort进行排序,加-u去掉重复的K值

3.输出格式

在表达式成立时,如何输出ijk值,以什么格式输出?

单独输出i j k,不合适,结果变成一系列数字

把三个数字同时输出在一行?可以,但仍感觉有什么不妥。

比较合适的格式是:

K: (i,j)

k后加不加:都可以;i j谁在前在后,都可以

分析完毕,写一份代码,供参考。

源代码

输出后处理重复K

for((i=1;i<=50;i++))

do

    for((j=1;j<=50;j++))

    do

        for((k=1;k<=50;k++))

        do

            if [ $((i*i+j*j)) == $((k*k)) ]

            then

               echo "$k: ($i $j)" >>k.txt

           fi

       done

    done

done

不去重效果

与python去重一样,可用sort -u -t: -k1,1.2nr

cat k.txt |sort -u -t: -k1,1.2nr

小结

对于多数据的存储,python方法较多,这与现代高级语言更注重数据处理有关。而bash注重语法与格式的严谨相关。在学习时,可以多多体会。

相关文章:

Linux centos7 bash编程(循环与条件判断)

在编程训练中&#xff0c;循环结构与条件判断十分重要。 根据条件为真为假确定是否执行循环。 有时&#xff0c;根据条件的真假结果&#xff0c;决定执行哪些语句&#xff0c;这就是分支语句。 为了训练分支语句与循环语句&#xff0c;我们设计一个案例&#xff1a; 求一组…...

设计模式-6--装饰者模式(Decorator Pattern)

一、什么是装饰者模式&#xff08;Decorator Pattern&#xff09; 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你在不修改现有对象的情况下&#xff0c;动态地将新功能附加到对象上。这种模式通过创建一个包装类&#xff0c;…...

质量属性案例-架构真题(二十一)

试题一 某电子商务公司升级会员与促销管理系统&#xff0c;向用户提交个性化服务&#xff0c;提高用户粘性。在项目建立之初&#xff0c;公司领导人一致认为目标是提升会员管理方式的灵活性&#xff0c;由于当前用户规模不大&#xff0c;用户简单&#xff0c;系统方面不需要做…...

nacos Error to process server push response

nacos2.0.3报错&#xff1a; Error to process server push response 解决办法&#xff1a; 排查项目当中有没有直接或间接依赖reflections&#xff1a; <dependency><groupId>org.reflections</groupId><artifactId>reflections</artifactId>…...

神经网络NLP基础 循环神经网络 LSTM

用的时候&#xff0c;只关心token的输入&#xff0c;以及hidden state就好了 sequence的length是多少&#xff0c;lstm的cell的数量就是多少 LSTM BI-LSTM stacked lstm GRU 实现...

Oracle数据传输加密方法

服务器端“dbhome_1\NETWORK\ADMIN\”sqlnet.ora文件中添加 SQLNET.ENCRYPTION_SERVER requested SQLNET.ENCRYPTION_TYPES_SERVER (RC4_256) 添加后新的链接即刻生效&#xff0c;服务器无需重新启动。 也可以通过Net manager管理工具添加 各个参数含义如下&#xff1a; 是…...

Android列表片段

下面创建第二个片段WorkoutFragment&#xff0c;它包含不同训练项目构成的一个列表&#xff0c;用户可以从这个列表中选择训练项目。 列表视图是只包含一个列表的片段 列表片段是一种专门处理列表的片段&#xff0c;它会自动绑定到一个列表视图&#xff0c;所以不需要另外创建…...

【元宇宙】智能手机万岁

凭借出色的新设备&#xff0c;我们很快就能进人元字宙&#xff0c;想象这样的情景是很趣的。但是&#xff0c;至少到21世纪20年代&#xff0c;元宇宙时代的大多数设备很可能是我们已经在使用的设备。 AR 和 VR 设备不仅面临重大的技术、财务和体验障碍&#xff0c;而且它们在上…...

华为mate60的发布代表着什么?有什么意义?

华为Mate60的发布代表着华为在技术领域的持续突破和创新。该产品预计将引入更强大的处理器、更高分辨率的屏幕、更强大的摄像头等前沿技术&#xff0c;进一步巩固华为在技术领域的领先地位。 此外&#xff0c;华为Mate60的发布还具有重塑品牌形象的意义。在美国制裁下&#xff…...

huggingface下载模型文件(基础入门版)

huggingface是一个网站&#xff0c;类似于github&#xff0c;上面拥有众多开源的模型、数据集等资料&#xff0c;人工智能爱好者可以很方便的上面获取需要的数据&#xff0c;也可以上传训练好的模型&#xff0c;制作的数据集等。本文只介绍下载模型的方法&#xff0c;适合新手入…...

在JS中tramsform与translate区别

在JavaScript中&#xff0c;"transform"和"translate"是用于处理HTML元素的样式属性&#xff0c;它们有以下区别&#xff1a; transform属性&#xff1a; transform属性是一个通用的属性&#xff0c;用于应用一系列的变换效果&#xff0c;包括平移、旋转、…...

ebay测评,物理环境与IP环境:解决平台风控问题的关键

近期eBay平台出现了大量风控问题&#xff0c;导致许多买家账号受到影响。实际上&#xff0c;这主要是由于环境搭建方面存在主要问题。时至2023年&#xff0c;许多人的技术方案仍停留在几年前&#xff0c;要么使用一键新机工具配合国外IP&#xff0c;要么使用指纹浏览器配合国外…...

05-Redis

1、Redis为什么快&#xff1f; 1、纯内存操作 2、单线程可以省去多线程时CPU上下文会切换的时间 3、渐进式ReHash、缓存时间戳 数组需要扩容的时候&#xff0c;他会维护两张hash表&#xff0c;比如第一张的数组长度为6&#xff0c;另一张的数组长度为12&#xff0c;在set和g…...

MSST-NET:用于高光谱和多光谱图像融合的多尺度空间-光谱Transfomer网络

1.网络结构 主要贡献&#xff1a; 提出了一种多尺度空间光谱Transformer网络光谱多头注意力旨在提取光谱特征引入多尺度波段/补丁嵌入来提取多尺度特征自监督训练 痛点&#xff1a;卷积核的感受野有限&#xff0c;基于卷积神经网络CNN的融合方法无法利用特征图中的全局关系…...

代码随想录笔记--二叉树篇

1--递归遍历 1-1--前序遍历 前序遍历&#xff1a;根→左→右&#xff1b; #include <iostream> #include <vector>struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), le…...

JavaScript中包含对象的数组去重

一.数组遍历 function Uniarray(array) {// 接收去重后的数组let resArr [];// 遍历数组for (let i 0; i < array.length; i) {let isFind false;// 检查当前元素是否已存在于结果数组中for (let j 0; j < resArr.length; j) {// 使用严格相等运算符&#xff08;&am…...

gRPC-GateWay Swagger 实战

上一次我们分享了关于 gRPC-Gateway 快速实战 &#xff0c;可以查看地址来进行回顾 : 也可以查看关于 gRPC 的历史文章&#xff1a; gRPC介绍 gRPC 客户端调用服务端需要连接池吗&#xff1f; gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I 今天主要是分享关于 gRPC-G…...

【webpack】HMR热更新原理

本文&#xff1a;参考文章 一、HMR是什么&#xff0c;为什么出现 1、出现的原因 之前&#xff0c;应用的加载、更新都是一个页面级别的操作&#xff0c;即使单个代码文件更新&#xff0c;整个页面都要刷新&#xff0c;才能拿到最新的代码同步到浏览器&#xff0c;导致会丢失…...

Ceph构件及组件分析

Ceph存储架构 Ceph 存储集群由几个不同的daemon组成&#xff0c;每个daemon负责Ceph 的一个独特功能并。每个守护进程是彼此独立的。 下面将简要介绍每个Ceph组件的功能&#xff1a; RADOS&#xff08;Reliable Autonomic Distributed Object Store, RADOS&#xff09; RADOS…...

第六章:中华民族的抗日战争

1.日本发动灭亡中国的侵略斗争 关键字&#xff1a; 中国抗日战争的起点与全民族抗战阶段 2.中国人民奋起抗击日本侵略者 关键字&#xff1a; 1 国共第二次统一战线初步建立的标志&#xff1a;国民党五届三中全会 2 扭转时局的枢纽&#xff0c;国内和平初步实现&#xff1a;…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项

一、条形码识别改名使用教程 打开软件并选择处理模式&#xff1a;打开软件后&#xff0c;根据要处理的文件类型&#xff0c;选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件&#xff0c;就选择 “PDF 识别模式”&#xff1b;若是处理图片文件&…...

21-Oracle 23 ai-Automatic SQL Plan Management(SPM)

小伙伴们&#xff0c;有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL&#xff0c; 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始&#xff0c;OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…...