while循环
在给定的判断条件为 true 时执行循环体,否则退出循环体。基本语法:
while bool表达式: 循环体【else: 语句块】
【例】实现1-100的求和计算
i=1sum=0while i<=100: sum+=i i+=1print("1-100的和为:%d"%sum)
程序执行结果如下:
C:\Users\zemuerqi\PycharmProjects\Python2020\venv\Scripts\python.exe C:/Users/zemuerqi/PycharmProjects/Python2020/test.py1-100的和为:5050Process finished with exit code 0
for循环
基本语法:
for 变量名 in 可迭代对象: 循环体【else: 语句块】
【例】使用for循环完成1-100的求和计算
sum=0for i in range(1,101): sum+=iprint(sum)
思考
Q:如何使用上述两种循环完成1-100之间的奇数和以及偶数和的计算
R:参考答案:
sum_odd = 0; sum_even = 0for i in range(1, 101): if i % 2 != 0: #奇数 sum_odd += i #奇数和 else: #偶数 sum_even += i #偶数和print("1~100中所有奇数的和:", sum_odd)print("1~100中所有偶数的和:", sum_even)
程序执行结果如下:
C:\Users\zemuerqi\PycharmProjects\Python2020\venv\Scripts\python.exe C:/Users/zemuerqi/PycharmProjects/Python2020/test.py1~100中所有奇数的和: 25001~100中所有偶数的和: 2550Process finished with exit code 0
循环嵌套
在一个循环体内又包含另一个完整的循环结构,称为循环的嵌套【例】利用嵌套循环打印运行效果如图下图所示的九九乘法表(nest_for.py)
for i in range(1, 10): #外循环 s = "" for j in range(1, 10): #内循环 s += str.format("{0:1}*{1:1}={2:<2} ", i, j, i * j)
上述代码输出结果如下图:
思考
请修改上述程序,分别打印如图所示的2个九九乘法表:
break语句
- 用于退出for、while循环,即提前结束循环,接着执行循环语句的后继语句
- 当多个for、while语句彼此嵌套时,break语句只应用于最里层的语句,即break语句只能跳出最近的一层循环
【例】使用break语句终止循环(break.py)
while True: s = input('请输入字符串(按Q或者q结束):') if s.upper() == 'Q': break print('字符串的长度为:', len(s)
程序执行结果如下:
C:\Users\zemuerqi\PycharmProjects\Python2020\venv\Scripts\python.exe C:/Users/zemuerqi/PycharmProjects/Python2020/test.py请输入字符串(按Q或者q结束):wuzemu字符串的长度为:6请输入字符串(按Q或者q结束):您好!木头编程字符串的长度为:7请输入字符串(按Q或者q结束):QProcess finished with exit code 0
思考
Q:编程(prime1.py和prime2.py)判断所输入的任意一个正整数是否为素数(使用for和while两种循环方式)
R:参考答案:
方法一(利用for循环和break语句):import mathm = int(input("请输入一个整数(>1):"))k = int(math.sqrt(m))for i in range(2, k + 2): if m % i == 0: break #可以整除,肯定不是素数,结束循环if i == k+1 : print(m, "是素数!")else: print(m, "是合数!")方法二(利用while循环和bool变量):import mathm = int(input("请输入一个整数(>1):"))k = int(math.sqrt(m))flag = True #先假设所输整数为素数i = 2while (i <= k and flag == True): if (m % i == 0): flag = False #可整除,肯定非素数,结束循环 else: i += 1if (flag == True): print(m, "是素数!")else: print(m, "是合数!")
continue语句
- 结束本次循环,即跳过循环体内自continue下面尚未执行的语句,返回到循环的起始处,并根据循环条件判断是否执行下一次循环
- continue语句与break语句的区别:
continue语句仅结束本次循环,并返回到循环的起始处,循环条件满足的话就开始执行下一次循环;而break语句则是结束循环,跳转到循环的后继语句执行
【例】使用continue语句跳过循环。要求输入若干学生成绩(按Q或q结束),如果成绩<0,则重新输入。统计学生人数和平均成绩
num = 0scores = 0 #初始化学生人数和成绩和while True: s = input('请输入学生成绩(按Q或q结束):') if s.upper() == 'Q': break if float(s) < 0: #成绩必须>=0 continue num += 1 #统计学生人数 scores += float(s) #计算成绩之和print("学生人数:%d,平均分:%d"%(num,scores/num))
程序输出结果是:
C:\Users\zemuerqi\PycharmProjects\Python2020\venv\Scripts\python.exe C:/Users/zemuerqi/PycharmProjects/Python2020/test.py请输入学生成绩(按Q或q结束):89请输入学生成绩(按Q或q结束):90请输入学生成绩(按Q或q结束):60请输入学生成绩(按Q或q结束):q学生人数:3,平均分:79Process finished with exit code 0
死循环
- 如果while循环结构中循环控制条件一直为真,则循环将无限继续,程序将一直运行下去,从而形成死循环程序死循环时,会造成程序没有任何响应;或者造成不断输出(例如控制台输出,文件写入,打印输出等)在程序的循环体中,插入调试输出语句print,可以判断程序是否为死循环。注意,有的程序算法十分复杂,可能需要运行很长时间,但并不是死循环可以使用快捷键+终止当前程序的运行
【例】死循环示例(infinite.py)
while True: #循环条件一直为真 num = float(input("请输入一个正数:")) print("该数是:%f"%num)print("Good bye!")
else子句
- 【例】使用for语句的else子句(for_else.py)
hobbies = ""for i in range(1, 3 + 1): s = input('请输入爱好之一(最多三个,按Q或q结束):') if s.upper() == 'Q': break hobbies += s + ' 'else: print('您输入了三个爱好。')print('您的爱好为:', hobbies)
程序执行结果如下:
C:\Users\zemuerqi\PycharmProjects\Python2020\venv\Scripts\python.exe C:/Users/zemuerqi/PycharmProjects/Python2020/test.py请输入爱好之一(最多三个,按Q或q结束):唱歌请输入爱好之一(最多三个,按Q或q结束):跳舞请输入爱好之一(最多三个,按Q或q结束):冲浪您输入了三个爱好。您的爱好为:唱歌 跳舞 冲浪Process finished with exit code 0
课后练习
1.for i in [1, 0]:
print(i+1)
以上代码输出结果为?
A、2 1
B、[2, 1]
C、2
D、0
2.Python 中,for 和 while 可以有 else 语句?
A、只有 for 才有 else 语句。
B、只有 while 才有 else 语句。
C、for 和 while 都可以有 else 语句。
D、for 和 while 都没有 else 语句。
3.
i = sum = 0
while i <= 4:
sum += i
i = i+1
print(sum)
以上代码输出的结果是?
A、0
B、10
C、4
D、以上结果都不对。
4. while 4 == 4:
print('4')
以上代码输出的结果是?
A、输出一次 4。
B、输出四次 4。
C、无限次输出 4,直到程序关闭。
D、语法错误。
5. 迭代输出序列时(如:列表)使用 for 比 while 更好?
A、错误,while 比 for 更好。
B、正确
C、错误,while 不能用于迭代系列。
D、错误,for 和 while 都不能用于迭代系列。
6. 以下哪个描述是正确的?
A、break 语句用于终止当前循环。
B、continue 语句用于跳过当前剩余要执行的代码,执行下一次循环。
C、break 和 continue 语句通常与 if, if...else 和 if...elif...else 语句一起使用。
D、以上说法都是正确的。
7. for char in 'PYTHON STRING':
if char == ' ':
break
print(char, end='')
if char == 'O':
continue
以上代码输出的结果是?
A、PYTHON
B、PYTHONSTRING
C、PYTHN
D、STRING