问答题 7.  100个灯泡排成一排,第一轮将所有灯泡打开;第二轮每隔一个灯泡关掉一个,即排在偶数的灯泡被关掉,第三轮每隔两个灯泡,将开着的灯泡关掉,关掉的灯泡打开。依次类推,第100轮结束的时候,还有几盏灯泡亮着?
【正确答案】(1)对于每盏灯,当拉动的次数是奇数时,灯就是亮着的,当拉动的次数是偶数时,灯就是关着的。
   (2)每盏灯拉动的次数与它的编号所含约数的个数有关,它的编号有几个约数,这盏灯就被拉动几次。
   (3)1~100这100个数中有哪几个数,约数的个数是奇数?
   我们知道,一个数的约数都是成对出现的,只有完全平方数约数的个数才是奇数个。
   所以,这100盏灯中有10盏灯是亮着的,它们的编号分别是:1、4、9、16、25、36、49、64、81、100。
   下面是程序的实现:
   def factorIsOdd(a):
   total=0
   i=1
   while i<=a:
   if a%i==0:
   total+=1
   i+=1
   if total%2==1:
   return 1
   else:
   return 0
   def totalCount(num,n):
   count=0
   i=0
   while i<n:
   #∥判断因子数是否为奇数, 如果是奇数(灯亮), 那么加1
   if factorIsOdd(num[i])==1:
   print "亮着的灯的编号是:"+str(num[i])
   count+=1
   i+=1
   return count
   
   if __name__=="__main__":
   num=[None]*100
   i=0
   while i<100:
   num[i]=i+1
   i+=1
   count=totalCount(num,100)
   print "最后总共有"+str(count)+"盏灯亮着。"
   程序的运行结果为:
   亮着的灯的编号是:1
   亮着的灯的编号是:4
   亮着的灯的编号是:9
   亮着的灯的编号是:16
   亮着的灯的编号是:25
   亮着的灯的编号是:36
   亮着的灯的编号是:49
   亮着的灯的编号是:64
   亮着的灯的编号是:81
   亮着的灯的编号是:100
   最后总共有10盏灯亮着。
【答案解析】

[考点] 如何判断还有几盏灯泡亮着。