for循环学习(1)

一、循环和遍历

1.1 循环

循环是一种重复执行一段代码的结构,只要满足循环的条件,会一直执行这个代码。

循环条件:在一定范围之内,按照指定的次数来执行循环。

循环体:在循环中执行的命令序列,只要条件满足,循环体会被一直执行。

1.2 遍历

遍历指的就是对数据结构中每个元素进行一次访问的过程。通常和循环一起使用。访问的目的就是为了执行特定的操作。

粗略地理解:循环就是操作,遍历就是输出。

1.3 循环的作用

  1. 重复执行代码,尤其是统一的,相同的,批量的操作。
  2. 提高代码的重复利用率。
  3. 提高人工的效率,减少人工干预。
  4. 简化程序的逻辑,降低代码出错的可能性。

1.4 几种循环方式

  • for循环:使用场景,一般用于已知循环次数的场景。

  • while循环:和for循环可以互相替换,常用于死循环。

  • until循环:until条件不满足才执行循环,条件满足,不执行。

二、for循环

2.1 for循环的几种格式

2.1.1 格式1
for 变量名称(不需要$) in 范围 {}
do命令序列
done

例:

for i in {1..10}
doecho $i
done
# 执行该文件会打印 1 到 10

例:
创建一个文件/opt/passwd.txt
在文件中创建三行:test1,test2,test3
使用循环创建这三个用户,统一设定密码为123456

vim l1.sh
for user in $(cat /opt/passwd.txt)
douseradd $userecho 123456 | passwd --stdin $user
donesh l1.sh 
Changing password for user test1.
passwd: all authentication tokens updated successfully.
Changing password for user test2.
passwd: all authentication tokens updated successfully.
Changing password for user test3.
passwd: all authentication tokens updated successfully.
2.1.2 格式2

类C语言格式:

for ((表达式1;表达式2;表达式3))
do命令序列
done

例:

for ((i=0;i<5;i++))

表达式1:定义变量并赋予初始值,i=0;

表达式2:循环的范围

表达式3:循环的方式,变量每次自增1

例:1到100,求和
vim l2.sh
sum=0
for i in {1..100}
dosum=$(($sum+i))
done
echo $sum [root@test1 lesson2]# sh l2.sh 
5050
例:分别求1到100的奇数和,偶数和
vim l3.sh
sum1=0
sum2=0
for i in {1..100}
do
if [ $(($i%2)) -eq 0 ]
thensum1=$(($sum1+$i))
elsesum2=$(($sum2+$i))
fi
done
echo "偶数和"$sum1 
echo "奇数和"$sum2 sh l3.sh 
偶数和2550
奇数和2500
例:自定义输入一个数,然后求从1到该数字的累加和
vim l4.sh
read -p "输入一个数.范围1-100:" num
sum=0
for ((i=1;i<=$num;i++))
dosum=$(($sum+$i))
done
echo $sum
sh l4.sh 
输入一个数.范围1-100:10
sh l4.sh 
输入一个数.范围1-100:100
5050
2.1.3 格式3

死循环:会一直循环

for ((;;))
do命令序列
done

break

在循环内部,执行到break命令时,会立即跳出当前循环,并终止

continue

在循环内部,当执行到continue,跳出当前循环,如果后续条件依然满足,会继续进行

死循环的应用
例:猜数字,输入一个1-100的随机数,这个随机数由系统生成,每次猜提示猜大了还是猜小了,猜中则提示猜中了,并统计一共猜了多少次。
用死循环,一直到用户猜中为止,猜中了循环才会终止

随机数生成用变量$RANDOM,随机数范围0-32767

需要取0-99的随机数,只要用$RANDOM%100除以100的余数再加1即可实现。

vim l5.sh
ran=$((RANDOM%100+1))
count=0
for ((;;))
do
read -p "请输入数字,1-100:" num
let count++
if [ $num -gt $ran ]
thenecho "猜大了"
elif [ $num -lt $ran ]
thenecho "猜小了"
elif [ $num -eq $ran ]
thenecho "猜中了,猜了$count次"break
fi
done

解释: let t++,即让变量count每次循环自增一。

2.2 练习

  1. 购物例题:

    逛淘宝选购商品,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,

    如果不再继续逛的话进行购物车结算总额。

    vim shopping.sh

    sum=0
    for ((;;))
    do
    echo "欢迎光临本店!本店商品价格:"
    echo "衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元"read -p "输入要买的商品{1.衣服|2.裤子|3.鞋子|4.帽子|5.袜子|6.不想要了}" itemcase $item in"1")cost=500;;"2")cost=400;;"3")cost=350;;"4")cost=150;;"5")cost=50;;"6")cost=0;;*)cost=0echo "输入错误,请重试"esacsum=$(($sum+$cost))read -p "是否要继续购买?1.继续|2.离开:" s1if [ $s1 -eq 1 ]thencontinueelif [ $s1 -eq 2 ]thenread -p "是否继续逛下一家商店?1.继续|2.离开:" s2if [[ $s2 -eq 1 ]]thencontinueelif [[ $s2 -eq 2 ]]thenecho "当前购物车总额:${sum}元"break  else                                                                                              echo "输入错误,请重试" fielseecho "输入错误,请重试" fi 
    done
    
    sh shopping.sh 
    欢迎光临本店!本店商品价格:
    衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元
    输入要买的商品{1.衣服|2.裤子|3.鞋子|4.帽子|5.袜子|6.不想要了}1
    是否要继续购买?1.继续|2.离开:1
    欢迎光临本店!本店商品价格:
    衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元
    输入要买的商品{1.衣服|2.裤子|3.鞋子|4.帽子|5.袜子|6.不想要了}5
    是否要继续购买?1.继续|2.离开:2
    是否继续逛下一家商店?1.继续|2.离开:2
    当前购物车总额:550 元
  2. 某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。
    依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,
    请问这只猴子在第一天总共摘了多少根香蕉?

    vim monkey.sh

    sum=1
    for ((i=9;i>=1;i--))
    do
    sum=$((($sum+1)*2))
    echo "第${i}天开始时有${sum}根香蕉"
    done
    
    sh monkey.sh 
    第9天开始时有4根香蕉
    第8天开始时有10根香蕉
    第7天开始时有22根香蕉
    第6天开始时有46根香蕉
    第5天开始时有94根香蕉
    第4天开始时有190根香蕉
    第3天开始时有382根香蕉
    第2天开始时有766根香蕉
    第1天开始时有1534根香蕉
    

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

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

相关文章

vite工程化搭建vue项目之自动按需导入

背景 当我们在使用vue3组合式开发的时候&#xff0c;大多数情况下我们的代码可能是这样的 <script setup lang"ts"> import { ref, reactive, toRefs, onMounted, computed } from vue; defineProps({}); </script><template><div></di…

共模信号与差模信号

差模信号又称串模信号&#xff0c;指的是两根线之间的信号差值&#xff1b;而共模信号又称对地信号&#xff0c;指的是两根线分别对地的信号。 差模信号&#xff1a;大小相等&#xff0c;方向相反的信号。共模信号&#xff1a;大小相等&#xff0c;方向相同的信号。 对于两输…

python的np.array()函数

1、创建数组 2、 与矩阵相关的函数 3、与排序相关的函数 4、 一元计算函数 5、 多元计算函数 6、 与文件读写相关的函数 7、与数组形状、属性相关的函数 8、 常用计算函数 9、 数组选取:切片和索引 10、np.random相关函数 Numpy常用的20个函数 一…

京准电钟 | 对比GPS,北斗卫星授时的场景有哪些?

京准电钟 | 对比GPS&#xff0c;北斗卫星授时的场景有哪些&#xff1f; 京准电钟 | 对比GPS&#xff0c;北斗卫星授时的场景有哪些&#xff1f; 对比国外的GPS&#xff0c;我国北斗卫星授时由于其高精度和稳定性&#xff0c;在各个领域都有广泛的应用场景。 以下是一些单北斗卫…

为什么需要负样本

假如我们只有正样本&#xff0c;模型在最开始训练的时候都是错误的&#xff0c;随着模型的迭代&#xff0c;准确率逐渐从0到1&#xff0c;最终将所有的样本都判别成正样本&#xff0c;也就是都在线的上方。 但真实的场景中有正有负&#xff0c;例如我们要做一个猫狗分类器&…

MySQL8.0默认TCP端口介绍

1、本文内容 选择题TCP/IPMySQL 8.0 的默认TCP端口show variables查看总结 2、选择题 A、3306 B、33060 C、33062 D、33063 3、TCP/IP TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff09;是指能够在多个不同…

WINUI——CommunityToolkit.Mvvm Messenger接收消息时报错:Cannot access a disposed object.

背景 WINUI开发时使用CommunityToolkit.Mvvm的Messemger让UI展示一些信息时出现错误&#xff1a; System.ObjectDisposedException:“Cannot access a disposed object. ObjectDisposed_ObjectName_Name” 详细见下述截图&#xff1a; 开发环境 WIN11 WINUI&#xff13; …

如何在3天内开发一个鸿蒙app

华为鸿蒙操作系统&#xff08;HarmonyOS&#xff09;自2.0版本正式上线以来&#xff0c;在短时间内就部署超过了2亿台设备&#xff0c;纵观全球操作系统的发展史&#xff0c;也是十分罕见的。与其他手机操作系统不同&#xff0c;HarmonyOS自诞生之日起&#xff0c;就是一款面向…

【C++取经之路】继承

目录 继承的概念及定义 单继承的格式 继承方式和访问限定符 继承后子类访问基类成员的权限 基类和派生类对象赋值转换 切片 继承中的作用域 引申&#xff1a;重载和隐藏的区别 派生类的默认成员函数 继承与友元 继承与静态成员 如何实现一个不能被继承的类 复杂的…

【Java】解决Java报错:IllegalStateException during HTTP Request

文章目录 引言一、IllegalStateException的定义与概述1. 什么是IllegalStateException&#xff1f;2. IllegalStateException在HTTP请求中的常见触发场景3. 示例代码 二、解决方案1. 确保响应只被提交一次2. 正确管理Servlet的生命周期3. 避免重复访问输入流和输出流4. 使用框架…

Spring Security 与 JWT、OAuth 2.0 整合详解:构建安全可靠的认证与授权机制

Spring Security 与 OAuth 2.0 整合详解&#xff1a;构建安全可靠的认证与授权机制 将 JWT&#xff08;JSON Web Token&#xff09;与 OAuth 2.0 整合到 Spring Security 中可以为应用程序提供强大的认证和授权功能。以下是详细的整合步骤和代码示例。 1. 引入依赖 首先&…

HTML静态网页成品作业(HTML+CSS)—— 名人霍金介绍网页(6个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有6个页面。 二、作品演示 三、代…

vscode切换Python解释器

在vscode上切换解析器解决方案&#xff1a; 1、确认自己已经安装了python环境 2、command shift p ,在这里切换即可&#xff0c;见下图&#xff1a; 3、如果状态栏也就是右下角不现实切换操作的话&#xff0c;打开设置&#xff1a;

云时代的Java:在云环境中实施Java的最佳实践

引言 云计算已经成为现代软件开发不可或缺的一部分&#xff0c;它提供了灵活性、可扩展性和成本效益。对于Java开发者来说&#xff0c;掌握在云环境中部署和管理Java应用的最佳实践是至关重要的。本文将探讨一些关键策略&#xff0c;帮助你最大化Java在云平台上的性能和效率。…

阿里云aliyun cli的作用以及安装步骤

阿里云CLI&#xff08;Command Line Interface&#xff09;是一个命令行工具&#xff0c;它允许你使用命令行来管理和控制阿里云的服务。通过阿里云CLI&#xff0c;你可以创建和管理实例、存储、数据库等资源&#xff0c;而不需要通过阿里云的网页控制台。 以下是在Linux系统上…

【六】Linux安装部署Nginx web服务器--及编写服务器启动脚本

一、部署安装nginx 1、查看nginx是否安装依赖包 [rootlocalhost ~]# rpm -q zlib-devel pcre-devel package zlib-devel is not installed package pcre-devel is not installed 2、若没有则安装nginx 依赖包 [rootlocalhost ~]# yum -y install zlib-devel* pcre-dev…

2024.6.13 刷题总结

2024.6.13 **每日一题** 2813.子序列最大优雅度&#xff0c;本题利用了贪心的思想&#xff0c;首先将items按照profit从大到小进行排序&#xff0c;当子序列为前k个项目时&#xff0c;子序列的利润总和最大&#xff0c;但是总优雅度不一定最大&#xff0c;所以此时我们向后遍历…

01 Pytorch 基础

paddle不需要放数据到gpu&#xff01; 区别&#xff1a;1.batch_norlization 不同 2. 1.数据处理 1.取一个数据&#xff0c;以及计算大小 &#xff08;剩下的工作&#xff0c;取batch&#xff0c;pytorch会自动做好了&#xff09; 2.模型相关 如何得到结果 3.模型训练/模型…

6月13日 Qtday1

#include "mywidget.h" //腾讯会议的登录界面 MyWidget::MyWidget(QWidget *parent): QMainWindow(parent) {this->setFixedSize(468,830);//主窗口大小this->setStyleSheet("background-color:rgb(255,255,255)");//主窗口背景this->setWindowTi…

Oxlint 会取代 Eslint 吗?

最近&#xff0c;一个基于 Rust 的代码检查工具 Oxlint 在国外前端社区引起了热议&#xff0c;许多专家对其给予了高度评价。那么&#xff0c;相比于它的大哥 Eslint&#xff0c;Oxlint 有哪些优势&#xff1f;它会在未来取代 Eslint 吗&#xff1f;本文将讨论这个话题。 Oxc 和…