零基础 学 python开发 (Genius套餐A)六

版权声明:Genius https://blog.csdn.net/weixin_41987706/article/details/89951259

夜光序言:

 

 

 

只有夺走你所拥有的一切,你才能摆脱世间之一切浮躁与诱惑,经受千锤百炼,心如止水,透悟天地。

 

 

 

 

 

正文:

2.3 while 循环语句 
 
2.3.1 学习目标 


程序设计中经常使用循环执行的过程,例如循环输出 100 之内的偶数,循环语句是程序设计的第三种类型的语句。教学目标就是来认识这种循环语句的使用方法,例如通过它计算学生的平均成绩等。



2.3.2 while 循环语句 


while 循环的语法:
while condition: 
 body 
while 循环包含三个部分,一是循环变量的初始化,二是循环条件,三是循环体,其中
循环体中一顶要包含循环变量的变化,循环体 boty 的语句向右边缩进,例如:
i=0 #循环变量初始化
while i<4: 
 print(i) #循环体
 i=i+1 #循环变量变化

其中 i<4 是循环条件,这个循环的循环体只有两条语句,其中 i=i+1 是循环变量变化语句。但是一般 while 循环体可以包含很多语句。

while 循环的规则是循环条件成立时,就一直执行循环体,如果条件不成立就结束循环,也称退出循环。循环退出后就执行与 while 并列的下一条语句。

其中条件是一个逻辑表达式,它的值为真或假,语句可以是一个单一的语句,也可以是一个复合语句。该循环的执行规则是先判断条件是否成立,之后才决定是否执行循环语句,如条件不成立则结束循环,如条件成立则再次执行循环语句,只要条件成立则一直执行循环语句,程序流程如图 2-3-1 所示。


图 2-3-1
如果 while 循环的条件一开始就不成立,那么 while 循环不执行。
例 2-3-1:有限次数的循环 

n=0
while n<3:
print(n)
n=n+1
print(“Last”,n)


该循环执行 3 次,每次执行后 n 的值加 1,执行过程是:
第一步:n=0,输出 0,之后 n 变为 1;
第二步:n=1,n<3 成立,输出 1,之后 n 变为 2;
第三步:n=2,n<3 成立,输出 2,之后 n 变为 3;
第四步:n=3,n<3 不成立,结束循环,执行 print(“Last”,n)语句输出 Last 3;
 



例 2-3-2:死循环 
如循环条件一直为真,永远不会变为假,则该循环会循环无限次,出现死循环。程序如出现死循环,计算机将永远执行循环语句,别的语句将得不到执行,程序得不到正常结束,这是应用中要避免的。

while 循环一定要在循环体中自己控制循环变量的变化,不然可能出现死循环,例如:

i=0
while i<4:
 print(i)


这个循环中 i 永远为 0 不变化,i<4 永成立,不停打印出 0,成为永远不停止的死循环。



例 2-3-3:计算 s=1+2+3+......+n 的和,其中 n 由键盘输入。 
观察计算式中的变化可以看到值从 1 变到 n,这是一个循环过程,先设计变量 s 为 0,
再设计一个循环变量 m,它循环 n 次,每次把 m 的值加 1,并累计到变量 s 中去,就可以计算出结果,程序如下:

n=input()
n=int(n)
s=0
m=1
while m<=n:
 s=s+m
 m=m+1
print(s)


例 2-3-4:输入 5 个同学的成绩,计算平均成绩。 
设计一个 5 次的循环,每次输入一个同学的成绩 m,把成绩累计在一个总成绩变量 s 中,
最后计算平均成绩输出,程序如下:
 

s=0
i=0
while i<5:
 m=input("第"+str(i)+"个成绩: ")
 m=float(m)
 s=s+m
 i=i+1
print("平均成绩:",s/5)


例 2-3-5:输入一个正整数,按相反的数字顺序输出另一个数,例如输入 3221,输出6123。 

设输入的正整数为 n,把它除 10 后的余数就是个位数,输出此数,之后 n 缩小 10 倍,即 n=n//10;再把缩小 10 倍后的数除 10,得的余数为十位数,┅┅,如此下去,直到 n 的值变为 0 为止,编写程序如下:

n=input("n=")
n=int(n)
s=""
while n!=0:
 m=n%10
 s=s+str(m)
 n=n//10
print(s)

 



2.3.3 【案例】有理数除法的精确计算 


1、案例描述 
输入正整数 p,q,n,计算 p/q 的值,精确到小数位 n 位,控制 n 使得 p/q 的值可以达到任意精度。

2、案例分析 
我们知道计算机在计算 p/q 时如果不能整除,会得到一个近式小数,例如 3/7=0.42857142857142855,精度是有限的,但是我们可以设计程序让它计算精确到小数后任意的 n 位。

实际上计算并不难,p//q 得到整数部分,余数 r=q%q,在除法中我们把 r 放大 10 倍,即 r=10*r,再计算 r//q 得到第一位小数位,再次得到余数 r=r%q,再 r=10*r,那么 r//q 是第二位小数位,余数 r=r%q 再进行,......, 计算的结果不能存储在一个数值变量中,因为该实数是有精度限制的,我们把结果变成一个字符串来显示。

3、案例代码 
 

#输入 p
p=0
while p<=0:
 p=input("Enter p:")
 p=int(p)
#输入 q
q=0
while q<=0:
 q=input("Enter q:")
 q=int(q)
#输入 n
n=0
while n<=0:
 n=input("Enter n:")
 n=int(n)
#p/q
s=str(p//q)
r=p%q
if r!=0:
 s=s+"."
i=0
while r!=0 and i<n:
 r=10*r
 s=s+str(r//q)
 r=r%q
 i=i+1
print("%d/%d=%f" % (p,q,p/q))
print("%d/%d=%s" %(p,q,s))

结果:
Enter p:6
Enter q:7
Enter n:30
6/7=0.857143
6/7=0.857142857142857142857142857142
因为 p/q 时一个有理数,一定会出现循环,我们看到 6/7 的循环节是 851742。

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/89951259