循环结构-while循环

for循环遍历指定的可迭代对象,该对象的长度即对象中元素的个数是确定的,所以循环的次数是确定的。还有一种情况,就是一直循环,直到满足指定的条件为止,此时循环次数是不确定的,事先未知。这种循环用while循环来实现。[大谦MATLAB,dqmatlab点com]

简单while循环

【MATLAB】

while循环以不定的次数来求一组命令的值。while循环的一般形式如下所示:

code.matlab
while 表达式
  执行语句…;
end

只要表达式的值为真,就一直执行while和end语句之间的语句。

【Python】

简单while循环结构首先计算条件表达式,如果结果为真,执行循环体中的语句,否则不执行。

code.python
while 判断条件:
  执行语句…

Python中没有MATLAB中Do…Loop结构的第2种形式。

下面用简单while循环求两个自然数的最大公约数和最小公倍数。求两个自然数最大公约数的算法是:

给定两个自然数m和n, m>n;

m除以n得余数r;

如果r=0,则n是最大公约数,算法结束;否则执行步骤4;

将n值赋给m,r值赋给n,重复执行步骤2。

得到两个自然数的最大公约数后,它们的乘积除以它们的最大公约数就得到它们的最小公倍数。

【MATLAB】

在命令窗口输入下面的代码。

code.matlab
>> m=100;
>> n=15;
>> m0=100;
>> n0=15;
>> if m>=n
  r=mod(m,n);
  while r~=0
    m=n;
    n=r;
    r=mod(m,n);
  end
  b=m0*n0/n;
  n
  b
end

回车,显示:

code.matlab
n =
     5
b =
   300

所以,100和15的最大公约数为5,最小公倍数为300。

【Python】

在Python IDLE Shell窗口输入:

code.python
>>> m=100
>>> n=15  #给定两个自然数m和n,m>n
>>> m0=100
>>> n0=15
>>> if m>=n:
       r=m%n  #求模
       while r!=0:  #如果余数不等于0,执行算法第4步
           m=n
           n=r
           r=m%n
       b=m0*n0/n  #n为最大公约数,b为最小公倍数
       print('最大公约数为'+str(n))
       print('最小公倍数为'+str(b))

连续回车,显示:

code.python
最大公约数为5
最小公倍数为300.0

Python中有分支的while循环

Python提供了一种有分支的while循环,该结构中有else关键字,语法格式为:

code.matlab
while 判断条件:
  执行语句…
else:
  执行语句…

当判断条件满足时,执行第1个冒号后面的语句块;不满足时执行第2个冒号后的语句块。

下面用有分支的while循环对1至10累加求和。当迭代变量的取值大于10时给出提示。在Python IDLE Shell窗口输入:

code.python
>>> sum=0
>>> n=0
>>> while(n<=10):  #实现累加求和
        sum+=n
        n+=1
else:  #n的值大于10时给出提示
        print('数字超出0-10的范围,计算终止。')
print(sum)

连续回车,显示:

数字超出0-10的范围,计算终止。

code.python
55

while循环嵌套

下面用嵌套的while循环生成九九乘法表。

【MATLAB】

在命令窗口输入下面的代码。

code.matlab
>> i=0;
>> while i<9
  j=0;
  i=i+1;
  while j<i
    j=j+1;
    fprintf('%d*%d=%d ',j,i,i*j);
  end
  fprintf('\n');
end

回车,生成九九乘法表。

【Python】

在Python IDLE Shell窗口输入:

code.python
>>> i=0
>>> while i<9:  #外层循环
        j=0
        i+=1
        s=''
        while j<i:  #内层循环
            j+=1
            s+=str.format('{0}*{1}={2} ',j,i,i*j)  #每行求和等式
        print(s)

连续回车,生成九九乘法表。