Python程序控制结构(二)

1 循环语句

循环语句用于重复执行某段程序代码,直到满足特定条件为止。在Python语言中,循环语句有以下两种形式。

  • while 循环语句
  • for 循环语句

1.1 while 循环语句

while 循环语句是用一个表达式来控制循环的语句,它的一般形式为:

while 表达式:
	语句块

当表达式的返回值为真时,执行语句块(或称为“循环体”),然后重新判断表达式的返回值,直到表达式的返回值为假时,退出循环,具体流程图如下图所示。
while循环语句流程图
【例1-1】用while循环语句实现计算1~99的整数和。

n = 1
sum = 0
while(n <= 99):
    sum += n
    n += 1
print("1-99的整数和是:",sum)

运行结果如下:

1-99的整数和是: 4950

【例1-2】设计一个小游戏,让玩家输入一个数字,程序判断是奇数还是偶数。

prompt = '输入一个数字,我将告诉你,它是奇数,还是偶数'
prompt += '\n输入“结束游戏”,将退出本程序:'
exit = '结束游戏'    #退出指令
content = ''    #输入内容
while content != exit:
    content = input(prompt)
    if content.isdigit():    #isdigit()函数用于检测字符串是否只由数字组成
        number = int(content)
        if(number % 2 == 0):
            print('该数是偶数')
        else:
            print('该数是奇数')
    elif content != exit:
        print('输入的必须是数字')

代码运行示例:

输入一个数字,我将告诉你,它是奇数,还是偶数
输入“结束游戏”,将退出本程序:7
该数是奇数
输入一个数字,我将告诉你,它是奇数,还是偶数
输入“结束游戏”,将退出本程序:8
该数是偶数
输入一个数字,我将告诉你,它是奇数,还是偶数
输入“结束游戏”,将退出本程序:结束游戏

在编写while 循环语句时,一定要保证程序正常结束,否则会造成“死循环”(或“无限循环”)。例如,在下面的代码中,i的值永远小于100,运行后程序将不停地输出0.

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

1.2 for 循环语句

for 循环语句是最常用的循环语句,一般用在循环次数已知的情况下,它的一般形式为:

for 迭代变量 in 对象:
	语句块

其中,迭代变量用于保存读取出的值;对象为要遍历或迭代的对象,该对象可以是任何有序的序列对象,如字符串、列表和元组等;被执行的语句块也称为“循环体”。具体流程图如下图所示。
for循环语句流程图
【例1-3】用for循环语句实现计算1~99的整数和。

sum = 0
for n in range(1,100):    #range(1,100)用于生成1到100(不包括100)的整数
    sum += n
print("1到99的整数和是:",sum)

代码运行结果如下:

199的整数和是: 4950

【例1-3】中用到了range()函数,该函数的具体用法如下:

  • range(stop):生成从0开始到stop结束(不包含stop)的一系列值。比如,range(3)生成的数值是0、1、2。
  • range(start, stop):生成从start开始到stop结束(不包含stop)的一系列数值。比如,range(2, 5)生成的数值是2、3、4。
  • range(start, stop, step):生成从start开始到stop结束(不包含stop)、步长为step的一系列数值。比如,range(2,10,2)生成的数值是2、4、6、8,range(10,1,2)生成的数值是10、8、6、4、2。
    【例1-4】输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为153=13+53+33
for i in range(100,1000):
    a = i % 10    #个位数
    b = i // 10 % 10    #十位数
    c = i // 100    #百位数
    if(i == a ** 3 + b ** 3 + c ** 3):
        print(i)

代码运行结果如下:

153
370
371
407

【例1-5】判断一个数是不是素数。判断一个数是不是素数的算法:让m被2到 m \sqrt[]{m} m 除,如果m能被2到 m \sqrt[]{m} m 的任何一个整数整除,则可以判断m不是素数;如果m不能被2到 m \sqrt[]{m} m 的任何一个整数整除,则可以判断m是素数。

# 由于程序中要用到求平方根的函数sqrt(),因此需要导入math模块
import math
m = int(input("请输入一个数m:"))
n = int(math.sqrt(m))    # math.sqrt(m)返回m的平方根
prime = 1
for i in range(2,n+1):
    if m % i == 0:
        prime = 0
if(prime == 1):
    print(m,"是素数")
else:
    print(m,"不是素数")

代码运行示例:

请输入一个数m:11
11 是素数
请输入一个数m:6
6 不是素数

1.3 循环嵌套

循环嵌套就是一个循环体包含另一个完整的循环结构,而在这个完整的循环体内还可以嵌套其他的循环结构。循环嵌套很复杂,在for循环语句、while循环语句中都可以嵌套,并且在它们之间也可以相互嵌套。
在while 循环中嵌套while循环的格式如下:

while 表达式1while 表达式2:
		语句块2
	语句块1

在for 循环中嵌套for循环的格式如下:

for 迭代变量1 in 对象1for 迭代变量2 in 对象2:
		语句块2
	语句块1

在while 循环中嵌套for循环的格式如下:

while 表达式:
	for 迭代变量 in 对象:
		语句块2
	语句块1

在for 循环中嵌套while循环的格式如下:

for 迭代变量 in 对象:
	while 表达式:
		语句块2
	语句块1

【例1-6】分别输入两个学生的3门成绩,并分别计算平均成绩。
使用while循环嵌套实现,具体代码如下:

j = 1    # 定义外部循环计数器初始值
while j <= 2:    # 定义外部循环执行2次
    sum = 0    # 定义成绩初始值
    i = 1    # 定义内部循环计数器初始值
    name = input("请输入学生姓名:")    # 接收用户输入的学生姓名,赋值给name变量
    while i <= 3:    # 定义内部循环执行3次,就是接收3门课程的成绩
        print("请输入第%d门的考试成绩:" % i)    # 提示用户输入成绩
        sum = sum + int(input())    # 接收用户输入的成绩,赋值给sum变量
        i += 1    # i变量自增1,i变为2,继续执行循环,直到i等于4时,跳出循环
    avg = sum / (i-1)    # 计算学生的平均成绩,赋值给avg变量
    print(name,"的平均成绩是%d\n" % avg)    # 输出学生成绩平均值
    j = j + 1    # 内部循环执行完毕后,外部循环计数器j自增1,变为2,再进行外部循环
print("学生成绩输入完成!")

代码运行示例:

请输入学生姓名:张三
请输入第1门的考试成绩:
89
请输入第2门的考试成绩:
90
请输入第3门的考试成绩:
91
张三 的平均成绩是90

请输入学生姓名:李四
请输入第1门的考试成绩:
78
请输入第2门的考试成绩:
85
请输入第3门的考试成绩:
96
李四 的平均成绩是86

学生成绩输入完成!

【例1-7】用for循环嵌套完成输出所有的“水仙花数”。

for a in range(10):    # 个位数的范围是0-9
    for b in range(10):    #十位数的范围是0-9
        for c in range(1,10):    # 百位数的范围是1-9
            number = a + 10 * b + 100 * c
            if(number == a ** 3 + b ** 3 + c ** 3):
                print(number)

代码运行结果如下:

370
371
153
407

【例1-8】打印九九乘法表。

for i in range(1,10):
    for j in range(1,i+1):
        print('{}x{}={}\t'.format(j,i,i*j),end='')
    print()

代码运行结果如下:

1x1=1	
1x2=2	2x2=4	
1x3=3	2x3=6	3x3=9	
1x4=4	2x4=8	3x4=12	4x4=16	
1x5=5	2x5=10	3x5=15	4x5=20	5x5=25	
1x6=6	2x6=12	3x6=18	4x6=24	5x6=30	6x6=36	
1x7=7	2x7=14	3x7=21	4x7=28	5x7=35	6x7=42	7x7=49	
1x8=8	2x8=16	3x8=24	4x8=32	5x8=40	6x8=48	7x8=56	8x8=64	
1x9=9	2x9=18	3x9=27	4x9=36	5x9=45	6x9=54	7x9=63	8x9=72	9x9=81	

【例1-9】输入一个行数(必须是奇数),输出如下图形:
在这里插入图片描述
输出上述图形的代码如下:

rows = int(input('输入行数(奇数):'))
if rows % 2 != 0:
    for i  in range(0, rows // 2 +1):    # 控制打印行数
        for j in range(rows - i , 0 , -1):    # 控制空格个数
            print(" ",end='')    # 打印空格,不换行
        for k in range(0,2*i+1):    # 控制星号个数
            print("*",end='')    # 打印星号,不换行
        print("")    # 换行
    for i in range(rows//2,0,-1):    # 控制打印行数
        for j in range(rows-i+1,0,-1):    # 控制空格个数
            print(" ",end='')    # 打印空格,不换行
        for k in range(2*i-1,0,-1):    # 控制星号个数
            print("*",end='')    # 打印星号,不换行
        print("")    # 换行

参考书籍:
Python程序设计基础教程(微课版) 林子雨 赵江声 陶继平编著

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值