首页 > 代码库 > 计算机科学及编程导论(3)迭代程序的设计与实现、遍历、元组

计算机科学及编程导论(3)迭代程序的设计与实现、遍历、元组

1. 迭代程序的设计:基础元素

迭代程序的实现,通常包括下了以下五个部分:

  • 计数器(Count):用于标记循环的次数
  • 初始化(Initiate):在循环外部进行初始化
  • 正确的结束测试(Right End Test):在什么情况下结束通常与计数器(Count)密切相关
  • 循环部分的代码块:该部分代码块通常包含了对计数器的改变
  • 结束后程序应该做什么

2. 迭代程序的设计:流程图

在使用具体的代码实现之前,可以用流程图来组织程序。

举一个简单的例子,已经一个正整数的平方为X,要求这个正整数,可以设这个正整数为ans

 

具体的代码实现如下:

# Find the square root of a perfect square 1.0
x = 16
ans = 0
while ans*ans < x:
    ans = ans + 1
print(ans)

当然,上述代码仍然具有很大的改进空间,可以稍微进行修改,增加对x的判断

# Find the square root of a perfect square 2.0
x = 16
ans = 0
if x>=0:
    while ans*ans <x:
        ans = ans + 1
        print(ans =,ans)
    if ans*ans != x:
        print(x,is not a perfect square)
    else:
        print(ans)
else:
    print(x, is a negative number)

在改进的代码中,我们对于x的不输入值,进行了不同的判断,这种设计程序的方式叫做防卫性程序设计

防卫性程序设计:确保用户的所有输入都能对应不同的代码路径

3. 循环的一般模式:遍历

之前我们所考虑的循环主要是增量式的循环,实际上,可以扩展到更一般的情况,即依次访问集合中的每一个元素,我们将此称之为遍历

for 元素 in 集合

  代码块  

下面来求能被1到10之间(不包括10)有哪几个数能被10整除,先考虑增量式的方法

 

#求1到10之间能被10整除的数(不包括10)
x = 10
count = 1
while(count<x):
    if(x%count==0):
        print(divisor,count)
    count+=1 #python不支持count++的写法

 

再考虑遍历集合元素的方法

 

# 运用集合遍历来求1到10之间能被10整除的数
x = 10
#range函数产生1到10之间的整数,不包括10
for i in range(1,x):
    if x%i == 0:
        print(divisor,i)

 

通过比较,可以发现利用for循环进行遍历有如下的好处

  1. 不用担心变量是否进行初始化
  2. 可读性更强
  3. 不用手动添加递增操作
  4. 遍历的是集合的元素,不需要考虑顺序,所以范围更加广泛

 

 4. 元组

继续考虑除数的例子,现在要做的是把那些显示的除数聚集起来,从而可以进行另外一些操作,这时候,可以考虑采用元组

元组是一系列有序的元素,而且是不可变

元素的创建与显示非常简单,用小括号即可

# 元组的创建与显示
test = (1, 3, 5, 4, 2)
test[0]  #=>1
test[2] #=>5
test[-1] #=>2
test[-6] #=>1
test[-7] #=>wrong
test[5] #=>wrong
test[1:3] #=>(3, 5)
test[2:] #=>(5, 4, 2)
test[:3] #=>(1, 3, 5)

接下来可以将符合要求的除数放在同一个元组里面了

# 将1-100之间能被100整除的数字储存在同一个元组中
x = 100
divisors = ()
for i in range(1,x):
    if x%i == 0:
        divisors = divisors + (i,)  #如果i后面不加逗号,python就会将其当做整型处理,从而显示错误