程序地址:http://www.cheemoedu.com/exercise/11
程序题目:0~9这10个数字可以组成多少不重复的3位数?
我的思路:使用三个for循环将所有的可能组成的数全部列出,然后去掉小于100的,去掉三位数中有重复数字的,最后输出不重复的三位数的个数和全部的数;
我的程序:
inter=[] for i in range(10): for j in range(10): for k in range(10): num=100*i+10*j+k if i!=j and j!=k and i!=k and num >=100: inter.append(num) print "there are %d non-repeat number" % len(inter) print "no repeat numbers are: ",inter
官方源码:
# a:1-9, b:0-9, c:0-9 l = range(10) count = 0 for a in l[1:]: for b in l: if a == b: continue #过滤a == b for c in l: if c != a and c != b: #过滤a == c, b == c print a, b, c count += 1 print ‘count:‘, count
源码分析:
根据提供的示例可以看出,它是直接定义一个包含0~9的列表,第一次循环时a的取值为1~9,直接就过滤了两位数,这个比较好,值得借鉴,不像我的代码那样每次都要判断是否大于100了,第二次循环时b的取值再是0~9,然后通过一个判断语句来过滤a=b的数,其实就是过滤如11X 22X...这样的数,如果满足第二次循环就再进行第三次循环,第三次循环是判断c不等于a和b的,如果满足这些要求就是不重复的三位数了;
总结:
- 判断列表中元素的元素可以使用len()函数;
- 关于continue和break
Python中的break语句可以结束当前循环然后跳转到下个语句,常用在当某个外部条件被触发(一般通过if语句检查)需要立即从循环中退出时,break语句可以用在while和for循环中;
当遇到continue语句时,程序会终止当前循环,并忽略剩余的语句,然后回到循环的顶端。在开始下一次迭代前,如果是条件循环,我们将验证条件表达式;如果是迭代循环,我们将验证是否还有元素可以迭代,只有在验证成功的情况下,才开始进行下一次迭代;
时间: 2024-09-30 19:51:00