Linux centos7 bash编程(循环与条件判断)
在编程训练中,循环结构与条件判断十分重要。
根据条件为真为假确定是否执行循环。
有时,根据条件的真假结果,决定执行哪些语句,这就是分支语句。
为了训练分支语句与循环语句,我们设计一个案例:
求一组数字:两数平方和为另一数平方
符合条件时,有三个数:i和j,其平方和与k的平方相等。
i*i+j*j==k*k
或写作:
如果满足条件,我们将会有一组共三个数字,如果有多组数字符合条件,将遇到一个棘手问题:如何同时存放相关三几个数字,如何存放多组这类数字。这是各类语言要解决的重要课题。
为了存储各类数据,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编程(循环与条件判断)
在编程训练中,循环结构与条件判断十分重要。 根据条件为真为假确定是否执行循环。 有时,根据条件的真假结果,决定执行哪些语句,这就是分支语句。 为了训练分支语句与循环语句,我们设计一个案例: 求一组…...
设计模式-6--装饰者模式(Decorator Pattern)
一、什么是装饰者模式(Decorator Pattern) 装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不修改现有对象的情况下,动态地将新功能附加到对象上。这种模式通过创建一个包装类,…...
质量属性案例-架构真题(二十一)
试题一 某电子商务公司升级会员与促销管理系统,向用户提交个性化服务,提高用户粘性。在项目建立之初,公司领导人一致认为目标是提升会员管理方式的灵活性,由于当前用户规模不大,用户简单,系统方面不需要做…...
nacos Error to process server push response
nacos2.0.3报错: Error to process server push response 解决办法: 排查项目当中有没有直接或间接依赖reflections: <dependency><groupId>org.reflections</groupId><artifactId>reflections</artifactId>…...
神经网络NLP基础 循环神经网络 LSTM
用的时候,只关心token的输入,以及hidden state就好了 sequence的length是多少,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) 添加后新的链接即刻生效,服务器无需重新启动。 也可以通过Net manager管理工具添加 各个参数含义如下: 是…...
Android列表片段
下面创建第二个片段WorkoutFragment,它包含不同训练项目构成的一个列表,用户可以从这个列表中选择训练项目。 列表视图是只包含一个列表的片段 列表片段是一种专门处理列表的片段,它会自动绑定到一个列表视图,所以不需要另外创建…...
【元宇宙】智能手机万岁
凭借出色的新设备,我们很快就能进人元字宙,想象这样的情景是很趣的。但是,至少到21世纪20年代,元宇宙时代的大多数设备很可能是我们已经在使用的设备。 AR 和 VR 设备不仅面临重大的技术、财务和体验障碍,而且它们在上…...
华为mate60的发布代表着什么?有什么意义?
华为Mate60的发布代表着华为在技术领域的持续突破和创新。该产品预计将引入更强大的处理器、更高分辨率的屏幕、更强大的摄像头等前沿技术,进一步巩固华为在技术领域的领先地位。 此外,华为Mate60的发布还具有重塑品牌形象的意义。在美国制裁下ÿ…...
huggingface下载模型文件(基础入门版)
huggingface是一个网站,类似于github,上面拥有众多开源的模型、数据集等资料,人工智能爱好者可以很方便的上面获取需要的数据,也可以上传训练好的模型,制作的数据集等。本文只介绍下载模型的方法,适合新手入…...
在JS中tramsform与translate区别
在JavaScript中,"transform"和"translate"是用于处理HTML元素的样式属性,它们有以下区别: transform属性: transform属性是一个通用的属性,用于应用一系列的变换效果,包括平移、旋转、…...
ebay测评,物理环境与IP环境:解决平台风控问题的关键
近期eBay平台出现了大量风控问题,导致许多买家账号受到影响。实际上,这主要是由于环境搭建方面存在主要问题。时至2023年,许多人的技术方案仍停留在几年前,要么使用一键新机工具配合国外IP,要么使用指纹浏览器配合国外…...
05-Redis
1、Redis为什么快? 1、纯内存操作 2、单线程可以省去多线程时CPU上下文会切换的时间 3、渐进式ReHash、缓存时间戳 数组需要扩容的时候,他会维护两张hash表,比如第一张的数组长度为6,另一张的数组长度为12,在set和g…...
MSST-NET:用于高光谱和多光谱图像融合的多尺度空间-光谱Transfomer网络
1.网络结构 主要贡献: 提出了一种多尺度空间光谱Transformer网络光谱多头注意力旨在提取光谱特征引入多尺度波段/补丁嵌入来提取多尺度特征自监督训练 痛点:卷积核的感受野有限,基于卷积神经网络CNN的融合方法无法利用特征图中的全局关系…...
代码随想录笔记--二叉树篇
1--递归遍历 1-1--前序遍历 前序遍历:根→左→右; #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) {// 使用严格相等运算符(&am…...
gRPC-GateWay Swagger 实战
上一次我们分享了关于 gRPC-Gateway 快速实战 ,可以查看地址来进行回顾 : 也可以查看关于 gRPC 的历史文章: gRPC介绍 gRPC 客户端调用服务端需要连接池吗? gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I 今天主要是分享关于 gRPC-G…...
【webpack】HMR热更新原理
本文:参考文章 一、HMR是什么,为什么出现 1、出现的原因 之前,应用的加载、更新都是一个页面级别的操作,即使单个代码文件更新,整个页面都要刷新,才能拿到最新的代码同步到浏览器,导致会丢失…...
Ceph构件及组件分析
Ceph存储架构 Ceph 存储集群由几个不同的daemon组成,每个daemon负责Ceph 的一个独特功能并。每个守护进程是彼此独立的。 下面将简要介绍每个Ceph组件的功能: RADOS(Reliable Autonomic Distributed Object Store, RADOS) RADOS…...
第六章:中华民族的抗日战争
1.日本发动灭亡中国的侵略斗争 关键字: 中国抗日战争的起点与全民族抗战阶段 2.中国人民奋起抗击日本侵略者 关键字: 1 国共第二次统一战线初步建立的标志:国民党五届三中全会 2 扭转时局的枢纽,国内和平初步实现:…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
