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注重语法与格式的严谨相关。在学习时,可以多多体会。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/117419.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LPDDR4、DDR4

核心信息&#xff1a; 2400Mbps&#xff08;每秒传输2400*1百万bit&#xff09; 2400MT/s&#xff08;百万次/秒&#xff09; 信号

国际版阿里云/腾讯云:弹性高性能计算E-HPC入门概述

入门概述 本文介绍E-HPC的运用流程&#xff0c;帮助您快速上手运用弹性高性能核算。 下文以创立集群&#xff0c;在集群中安装GROMACS软件并运转水分子算例进行高性能核算为例&#xff0c;介绍弹性高性能核算的运用流程&#xff0c;帮助您快速上手运用弹性高性能核算。运用流程…

文件夹如何隐藏加密?文件夹加密隐藏软件有哪些?

文件夹加密和文件夹隐藏都是保护文件夹数据安全的方法&#xff0c;我们可以将这两者结合&#xff0c;以实现更好的保护。那么&#xff0c;文件夹如何隐藏加密呢&#xff1f; 如何隐藏加密文件夹&#xff1f; 想要隐藏加密文件夹&#xff0c;我们可以通过以下两种方式来实现&am…

React笔记(四)类组件(2)

一、类组件的props属性 组件中的数据&#xff0c;除了组件内部的状态使用state之外&#xff0c;状态也可以来自组件的外部&#xff0c;外部的状态使用类组件实例上另外一个属性来表示props 1、基本的使用 在components下创建UserInfo组件 import React, { Component } from…

详解 ElasticSearch Kibana 配置部署

默认安装部署所在机器允许外网 SSH工具 Putty 链接&#xff1a;https://pan.baidu.com/s/1b6gumtsjL_L64rEsOdhd4A 提取码&#xff1a;lxs9 Winscp 链接&#xff1a;https://pan.baidu.com/s/1tD8_2knvv0EJ5OYvXP6VTg 提取码&#xff1a;lxs9 WinSCP安装直接下一步到完成…

在Windows10上编译grpc工程,得到protoc.exe和grpc_cpp_plugin.exe

grpc是google于2015年发布的一款跨进程、跨语言、开源的RPC(远程过程调用)技术。使用C/S模式&#xff0c;在客户端、服务端共享一个protobuf二进制数据。在点对点通信、微服务、跨语言通信等领域应用很广&#xff0c;下面介绍grpc在windows10上编译&#xff0c;这里以编译grpc …

aac音频格式怎么转mp3?这种转换方法很简单

AAC格式和MP3格式都是数字音频格式&#xff0c;但它们使用不同的音频压缩算法。虽然AAC格式在音质和文件大小方面表现出色&#xff0c;但是不是所有的设备都支持该格式。相比之下&#xff0c;MP3格式的兼容性更好&#xff0c;可以在各种设备和操作系统上播放&#xff0c;因此转…

7.(Python数模)消防站的选址问题

Python解决消防站的选址问题 原文参考该博文 问题描述 源代码 import pulp # 导入 pulp 库# 主程序 def main():# 问题建模&#xff1a;"""决策变量&#xff1a;x(j) 0, 不选择第 j 个消防站x(j) 1, 选择第 j 个消防站, j1,8目标函数&#xff1a;min fx …

Linux 基础篇

很长时间&#xff0c;因为一些事情&#xff0c;没有更新我的文章这让我很惭愧&#xff0c;于是我将打算在今天更新下自己的文章&#xff0c;我发现一些事情&#xff0c;计算机并不是很难学到可以工作的水平&#xff0c;关键在于是否可以坚持下来&#xff0c;有很多时候我并不是…

人工智能论文通用创新点(一)——ACMIX 卷积与注意力融合、GCnet(全局特征融合)、Coordinate_attention、SPD(可替换下采样)

1.ACMIX 卷积与注意力融合 论文地址:https://arxiv.org/pdf/2111.14556.pdf 为了实现卷积与注意力的融合,我们让特征图经过两个路径,一个路径经过卷积,另外一个路径经过Transformer,但是,现在有一个问题,卷积路径比较快,Transformer比较慢。因此,我们让Q,K,V通过1*1的…

安装kali虚拟机镜像的坑

1.0 安装虚拟机镜像成功之后&#xff0c;只有光标&#xff0c;没有界面 在VMware上安装kali linux环境时&#xff0c;根据提示操作完成后&#xff0c;开启虚拟机&#xff0c;屏幕黑屏&#xff0c;左上角有一个光标在闪&#xff0c;一直开不了机。 出现问题的原因&#xff0c;…

说说TIME_WAIT和CLOSE_WAIT区别

分析&回答 TCP协议规定&#xff0c;对于已经建立的连接&#xff0c;网络双方要进行四次握手才能成功断开连接&#xff0c;如果缺少了其中某个步骤&#xff0c;将会使连接处于假死状态&#xff0c;连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接&#xf…

云备份——实用类工具实现

一&#xff0c;文件实用类设计实现 不管是客户端还是服务端&#xff0c;文件的传输备份都涉及到文件的读写&#xff0c;包括数据管理信息的持久化也是如此&#xff0c;因此首先设计封装文件操作类&#xff0c;这个类封装完毕之后&#xff0c;则在任意模块中对文件进行操作时都将…

【python爬虫案例】用python爬豆瓣音乐TOP250排行榜!

文章目录 一、爬虫对象-豆瓣音乐TOP250二、python爬虫代码讲解三、同步视频四、获取完整源码 一、爬虫对象-豆瓣音乐TOP250 您好&#xff0c;我是 马哥python说 &#xff0c;一名10年程序猿。 今天我们分享一期python爬虫案例讲解。爬取对象是&#xff0c;豆瓣音乐TOP250排行…

基于aarch64分析kernel源码 四:printk 内核打印

一、参考 Message logging with printk — The Linux Kernel documentation 如何获得正确的printk格式占位符 — The Linux Kernel documentation 使用printk记录消息 — The Linux Kernel documentation printk 内核打印 – 人人都懂物联网 (getiot.tech) 内核printk原理…

五金轴尺寸机器视觉测量软硬件方案--康耐德智能

检测内容&#xff1a; 五金轴尺寸机器视觉测量 检测要求&#xff1a; 精度0.015mm&#xff0c;速度180~240个/分钟 视觉可行性分析&#xff1a; 对样品进行了光学实验&#xff0c;并进行图像处理&#xff0c;原则上可以使用机器视觉系统进行测试测量。 结果&#xff1a; 对…

Python小知识 - 1. Python装饰器(decorator)

Python装饰器&#xff08;decorator&#xff09; Python装饰器是一个很有用的功能&#xff0c;它可以让我们在不修改原有代码的情况下&#xff0c;为已有的函数或类添加额外的功能。 常见的使用场景有&#xff1a; a. 函数缓存&#xff1a;对于一些计算量较大的函数&#xff0c…

Samba服务器

目录 一、什么是Samba&#xff1f; 二、Samba进程 三、Samba主要功能 四、Samba工作流程 五、Samba安全级别 六、Sam主配置文件/etc/samba/smb.conf 七、Samba服务配置案例 一、什么是Samba&#xff1f; Samba可以让linux计算机和windows计算机之间实现文件和打印机资源共享的一…

Homebrew下载安装及使用教程

Homebrew是什么&#xff1f; 简单来说&#xff0c;就是用命令行的形式去管理mac系统的包或软件。 安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"国内请使用镜像源进行下载 执行上述命令后会要求输入…

【设计模式】装饰者模式

5.3 装饰者模式 5.3.1 概述 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加配菜需要额外加钱&#xff0c;每个配菜的价钱通常不太一样&#xff0c;那么计算总价就会显得比较麻烦。 使用继承的…