while循环 经典案例整理(九九乘法表打印加边框、金字塔)

流程控制之while循环语法

# 一、while语句结构:条件为真时,执行循环体代码
while 条件
do
	循环体
done

# 二、until语法结构:条件为假时,一直执行循环体代码,直到条件变为真
until 条件
do
	循环体
done

求1-100以内2和3的公倍数,until实现

until判断条件为假时,一直执行循环体代码,直到条件变为真

#!/bin/bash

num=100

until (( $num <= 0 ))			# until 条件<=0(条件为假) ; 条件>0
do
        num1=`echo "$num % 2" | bc`				# %取余,取不到余数就是能被整数
        num2=`echo "$num % 3" | bc`				# %取余
        if [ $num1 -eq 0 ] && [ $num2 -eq 0 ];then
                echo "$num为2和3的公倍数"               
        fi
        let num--
done

打印九九乘法表

python写法

a = 1
while a < 10:
    b = 1
    while b <= a:
        print("%s*%s=%s\t" % (a, b, a * b), end="")		# end=""取消换行符,\t相当于tab键
        b += 1
    print("")
    a += 1
print("")

shell写法

写法一、while循环写法

#!/usr/bin/env bash

a=1
while (( $a < 10 )); do
  b=1
  while (( $b <= $a )) ; do
      echo -en "$b*$a=$(( $a*$b ))\t"		# (echo -e \t)相当于tab键, (echo -n)取消换行符 
      let b++
  done
   let a++
        echo "" 
done

写法二、until循环写法(until跟while循环条件相反,while循环条件取真进入循环,until循环条件取反进入循环)

#!/usr/bin/env bash

a=1
until (( $a >= 10 )); do
  b=1
  until (( $b > $a )) ; do
      echo -en "$b*$a=$(( $a*$b ))\t"		# (echo -e \t)相当于tab键, (echo -n)取消换行符 
      let b++
  done
   let a++
        echo "" 
done

写法三、字符串拼接

[root@m01 ~]# a=""
[root@m01 ~]# a=$a"1+1=$(echo 1+1|bc)"
[root@m01 ~]# echo $a
1+1=2
#!/bin/bash

a=1
while (( a <= 9 ))
do
    str=""
    b=1
    while (( $b <= $a ))
    do
        str=$str"$b*$a=$(echo $a*$b|bc ) "
        let b++
        done
    let a++
    echo "$str"
done

写法四、for循环写法

#!/bin/bash

for i in {1..9}; do
    for a in {1..9}; do
        if (( $a <= $i ));then
            echo -en "$a*$i=$(($a*$i))\t"		# (echo -e \t)相当于tab键, (echo -n)取消换行符 
        let a++
        fi
    done
    echo ''
    let i++
done

给九九乘法表加上边框

[root@m01 ~]# bash num.sh 
1*1=1 														
1*2=2 2*2=4 
1*3=3 2*3=6  3*3=9 
1*4=4 2*4=8  3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

案例分析:
第1行打印1个横线		2个竖线					
第2行打印2个横线		3个竖线		
第3行打印3个横线		4个竖线
第4行打印4个横线		5个竖线
...
横线的个数=行数
竖线的个数=行数+1

方法一:

#!/bin/bash

a=1
x=" --------"
y="|"

while (( $a<=9 ));do
    z=$a
    while (( $z>0  ));do
        echo -n "$x"
        let z--
    done
    echo ""
    b=1
    while (( $b<=$a ));do
        echo -n "$y $b*$a=$(($a*$b)) "
        let b++
    done
    echo "$y"
    let a++
done

while (( $a > 1 ));do
    echo -n "$x"
    let a--
done
echo ""

方法二:

#!/bin/bash

a=1
x="---------"
y="|"

while (( a <= 9 ))
do
    b=1
    str=""
    c=$a
    while (( $c > 0 ))    
    do
        echo -n "$x"
        let c--
    done
    echo ""     
    while (( $b <= $a ))
    do
        str=$str"$b*$a=$(echo $a*$b|bc) $y "
        let b++
        done
    let a++
    echo $y" "$str      
done

while (( $a > 1 ))
do
    echo -n "$x"
    let a--
done
echo ""

打印金字塔

金字塔规律
       *                  a = 1个*号             打印5个空格1个*号   		 6-1 = 5空格
      ***                 a = 2 + 1个*号         打印4个空格3个*号  	 	 5-1 = 4空格
     *****                a = 2 + 3个*号         打印3个空格5个*号  		 4-1 = 3空格
    *******               a = 2 + 5个*号         打印2个空格7个*号  		 3-1 = 2空格
   *********              a = 2 + 7个*号         打印1个空格9个*号  		 2-1 = 1空格
  ***********             a = 2 + 9个*号         打印11个*号0个空格  	 	 1-1 = 0空格

# 注意点:
# print打印结束自动换行

代码实现:
n = 5			       # n定义的是空格的个数,层数等于n+1
a = 1

while True:
    if n < 0:
        break
    else:
        print(n * " ", a * "*")
        n -= 1
        a += 2
=======================================================================================================================
代码升级:
n = int(input("输入金字塔的层数:"))
a = 1

while True:
    if n - 1 < 0:
        break
    else:
        print((n - 1) * " ", a * "*")
        n -= 1
        a += 2
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值