for循坏练习

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

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

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

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

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

1.3 循环的作用
重复执行代码,尤其是统一的,相同的,批量的操作。
提高代码的重复利用率。
提高人工的效率,减少人工干预。
简化程序的逻辑,降低代码出错的可能性。
1.4 几种循环方式
for循环:使用场景,一般用于已知循环次数的场景。

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

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

二、for循环
2.1 for循环的几种格式
2.1.1 格式1

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

例:

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

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

vim l1.sh
for user in $(cat /opt/passwd.txt)
do
 useradd $user
 echo 123456 | passwd --stdin $user
done

sh 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}
do
 sum=$(($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 ]
then
 sum1=$(($sum1+$i))
else
 sum2=$(($sum2+$i))
fi
done
echo "偶数和"$sum1 
echo "奇数和"$sum2 

sh l3.sh 
偶数和2550
奇数和2500
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 ]
then
 echo "猜大了"
elif [ $num -lt $ran ]
then
 echo "猜小了"
elif [ $num -eq $ran ]
then
 echo "猜中了,猜了$count次"
 break
fi
done

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

2.2 练习
购物例题:

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

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

vim shopping.sh

sum=0
for ((;;))
do
echo "1、衣服:500元"
echo "2、裤子:400元"
echo "3、鞋子:300元"
echo "4、帽子:150元"
echo "5、袜子:50元"

read -p "请选择想买的的商品:" a
case $a in
1)
echo "您已购买了衣服500元"
let sum+=500
;;
2)
echo "您已购买了裤子400元"
let sum+=400
;;
3)
echo "您已购买了鞋子300元"
let sum+=300
;;
4)
echo "您已购买了帽子150元"
let sum+=150
;;
5)
echo "您已购买了裤子50元"
let sum+=50
;;
*)
echo "欢迎下次光临,您本次消费共计$sum元"
break
esac

read -p "您选择继续购物还是结算购物车?(y/n)" b
if [ $b = y ] ; then
continue
elif [ $b = n ] ; then
echo "欢迎下次光临,您本次购物共计费$sum元"
break
else
echo "请您正确输入"
fi
done
[root@localhost ~]# chmod +x shopping.sh
[root@localhost ~]# vim shopping.sh
[root@localhost ~]# sh shopping.sh
1、衣服:500元
2、裤子:400元
3、鞋子:300元
4、帽子:150元
5、袜子:50元
请选择想买的的商品:1
您已购买了衣服500元
您选择继续购物还是结算购物车?(y/n)y
1、衣服:500元
2、裤子:400元
3、鞋子:300元
4、帽子:150元
5、袜子:50元
请选择想买的的商品:2
您已购买了裤子400元
您选择继续购物还是结算购物车?(y/n)y
1、衣服:500元
2、裤子:400元
3、鞋子:300元
4、帽子:150元
5、袜子:50元
请选择想买的的商品:3
您已购买了鞋子300元
您选择继续购物还是结算购物车?(y/n)y
1、衣服:500元
2、裤子:400元
3、鞋子:300元
4、帽子:150元
5、袜子:50元
请选择想买的的商品:4
您已购买了帽子150元
您选择继续购物还是结算购物车?(y/n)y
1、衣服:500元
2、裤子:400元
3、鞋子:300元
4、帽子:150元
5、袜子:50元
请选择想买的的商品:5
您已购买了裤子50元
您选择继续购物还是结算购物车?(y/n)n
欢迎下次光临,您本次购物共计费1400元

某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。
依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,
请问这只猴子在第一天总共摘了多少根香蕉?

vim monkey.sh

sum=1
for ((i=1;i<10;i++))
do
sum=$[(sum+1)*2]
done
echo $sum
[root@localhost ~]# vim monkey.sh
[root@localhost ~]# sh monkey.sh
1534
[root@localhost ~]# bash -x monkey.sh
+ sum=1
+ (( i=1 ))
+ (( i<10 ))
+ sum=4
+ (( i++ ))
+ (( i<10 ))
+ sum=10
+ (( i++ ))
+ (( i<10 ))
+ sum=22
+ (( i++ ))
+ (( i<10 ))
+ sum=46
+ (( i++ ))
+ (( i<10 ))
+ sum=94
+ (( i++ ))
+ (( i<10 ))
+ sum=190
+ (( i++ ))
+ (( i<10 ))
+ sum=382
+ (( i++ ))
+ (( i<10 ))
+ sum=766
+ (( i++ ))
+ (( i<10 ))
+ sum=1534
+ (( i++ ))
+ (( i<10 ))
+ echo 1534
1534

所以猴子第一天总共摘了1534根香蕉。

Python的for循环练习题如下所示: ```python 1. a, n = eval(input("请输入两个整数,用逗号分隔")) 2. sum = a 3. count = 0 4. for i in range(0, n): 5. count = count + sum 6. sum = sum * 10 + a 7. print(count) ``` 这段代码是一个简单的循环练习题,它首先要求用户输入两个整数,然后使用for循环计算这两个整数的加和。在每次循环中,将当前的和与第一个输入的整数相加,并将结果赋值给和。然后,将和乘以10并加上第一个输入的整数,以便在下一次循环中使用。最后,打印出计算得到的结果。这个练习题的目的是帮助学习者熟悉for循环的使用,并加深对变量赋值的理解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python 技能树练习题 《现代集成开发环境(IDE)》源码](https://download.csdn.net/download/wenrui7868/88275289)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python练习—循环](https://blog.csdn.net/weixin_30898109/article/details/99566675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值