码迷,mamicode.com
首页 > 编程语言 > 详细

Python:每日一题001

时间:2018-09-12 00:00:11      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:思路   and   pre   条件判断   lis   python   div   多少   列表   

Python:每日一题001

 

题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

**程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

 

个人解题思路

利用排列组合知识算出总共有4X3X2= 24个数,构造每个数加入列表中,打印输出。

  import random
  li = ["1","2","3","4"]
  all_sum_num = 4*4*4
  new_sum_list = []
  for i in range(all_sum_num):
      choose_li =  random.sample(li,3)
      new_num_str = "".join(choose_li)
      new_sum_list.append(new_num_str)
  num_set = set(new_sum_list)
  num_str_list =  list(num_set)
  print(num_str_list)
  print(len(num_str_list))

  

分析:这种写法有个漏洞,就是随机取出的3个数并不能完全取完所有可能的数,造成结果不唯一,每次运行程序可能结果都不一致。

 

参考解答方法:

  li = []
  for i in range(1,5):
      for j in range(1,5):
          for k in range(1,5):
              if i != k and i != j and j != k:
                  num = i*100 + j*10 + k
                  li.append(num)
  ?
  print(li)
  print(len(li))

  

分析:用3个for循环,加上if条件判断,将产生的数加入列表即可

上述代码可以继续精简

  
  li1 = [1,2,3,4]
  li2  = [a*100 + b*10 +c for a in li1 for b in li1 for c in li1 if a != b and a != c and b != c]
  print(li2)
  print(len(li2))

  

分析:采用列表生成式,分别对百位、十位、个位的数字进行生成并合成列表的元素。

 

 

 

 

(本文编号001,首发于2018年9月11日)

Python:每日一题001

标签:思路   and   pre   条件判断   lis   python   div   多少   列表   

原文地址:https://www.cnblogs.com/Nicholas0707/p/9630924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!