04 流程控制(02)
5、比较for循环和while循环
计算乘阶:1x2x3x4x...xn,也就是n!;
# forfact.py n = int(input('Enter an integer >= 0: ')) fact = 1 for i in range(2,n + 1): fact = fact * i print(str(n) + ' factorial is ' + str(fact))
使用while循环实现如下:
# whilefact.py n = int(input('Enter an integer >= 0: ')) fact = 1 i = 2 while i <= n: fact = fact * i i = i + 1 print(str(n) + ' factorial is ' + str(fact))
因为Python对于整数没有限制,所以Python可以用来计算非常大的数据;
计算用户输入的数字总和:
# forsum.py n = int(input('How many numbers to sum? ')) total = 0 for i in range(n): s = input('Enter number ' + str(i + 1) + ': ') total = total + int(s) print('The sum is ' + str(total))
使用while循环编写这个代码:
# whilesum.py n = int(input('How many numbers to sum? ')) total = 0 i = 1 while i <= n: s = input('Enter number ' + str(i) + ' :') total = total + int(s) i = i + 1 print('The sum is ' + str(total))
计算未知个数的总合:
# donesum.py total = 0 s = input('Enter a number (or "done"): ') while s != 'done': num = int(s) total = total + num s = input('Enter a number (or "done"): ') print('The sum is ' + str(total))
在这个程序下,如果我们一直输入数字,就会一直处于循环中;
对于这个程序,我们需要注意以下四点:
1、我们必须在两个地方调用input:循环前面及循环体内。之所以必须这样做,是因为训话你条件判断输入是数字还是‘done’。
2、在循环体内,语句的排列顺序至关重要。如果循环条件为True,就说明s不是‘done’,所以假定它不是一个整数。因此,我们可以将它转换为整数,将与其综合相加,并让用户接着输入。
3、仅当确定输入字符串s不是字符串‘done’后,我们才把它转换为整数。则输入‘done’时程序将崩溃。
s = int(input('Enter a number (or "done"): '))
4、不再需要计数器变量!。在前面计算总合的程序中,i用于记录用户输入了多少个数字。一般而言,程序包含的变量越少,越容易记忆、理解、调试和拓展。
6、跳出循环和语句块
基于上面的程序,我们需要跳出循环,我们使用 break 语句;
# donesum_break.py total = 0 while True: s = input('Enter a number (or "done")) if s == 'done': break #jump out of the loop num = int(s) total = total + num print('The sum is ' + str(total))
【注意:一般使用break语句,是为了让程序更加容易理解】
与 break 相对应的,continue 语句,continue 语句可以跳出当前循环,进入循环语句的下一次迭代;它不如 break 使用那么常见,但是一般建议避免使用 continue 语句;
7、循环中的循环
嵌套循环在编程中非常常见。例如下面的九九乘法表:
# timetable.py for row in range(1,10): for col in range(1,10): prod = row * col if prod < 10: print(' ', end = '') print(row * col, ' ', end = '') print()