鱼C论坛

 找回密码
 立即注册
查看: 2432|回复: 15

【问】一个题目,求新解法!!!!!!各位鱼油,鱼神请出手!

[复制链接]
发表于 2016-11-11 08:48:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 rocyjp 于 2016-11-21 22:54 编辑

'''题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。
        有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。'''
下面的解法个人感觉好不好,!,跟大家求个新的解法
  1. for i in  range(ord('x'),ord('z')+1):
  2.     for j in range(ord('x'),ord('z')+1):
  3.         if i != j:
  4.             for k in range(ord('x'),ord('z')+1):
  5.                 if k != j and  i != k :
  6.                     if (i != ord('x')) and (k != ord('x')) and (k != ord('z')):
  7.                         print('The order is a --> %s,b ---> %s,c --> %s '%(str(chr(i)),str(chr(j)),str(chr(k))))
复制代码



各位鱼油,鱼神请出手!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-11 11:16:09 | 显示全部楼层
最简单的集合算法
  1. >>> c = {'x','y','z'}-{'x','z'}
  2. >>> a = {'x','y','z'}-{'x'}-c
  3. >>> b = {'x','y','z'}- c-a
  4. >>> print('a:%s,b:%s,c:%s'%(a,b,c))
  5. a:{'z'},b:{'x'},c:{'y'}
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 简明高效

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-11-11 09:37:13 | 显示全部楼层
  1. import itertools as it
  2. jia = ('a','b','c')
  3. yi = ('x','y','z')
  4. _yi = it.permutations(yi,3)
  5. for eachyi in _yi:
  6.         zu = zip(jia,eachyi)
  7.         if zu[0][1] != 'x' and zu[2][1] == 'y':
  8.                 print zu
复制代码

输出:
[('a','z'),('b','x'),('c','y')]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-11 09:53:29 | 显示全部楼层
上面那段是为了给你看清楚程序结构,理解了后,可以简化一下,其实是一样的:
  1. import itertools as it
  2. jia, yi = ('a','b','c'), ('x','y','z')
  3. for eachyi in it.permutations(yi,3):
  4.         if zip(jia,eachyi)[0][1] != 'x' and zip(jia,eachyi)[2][1] == 'y':
  5.                 print zip(jia,eachyi)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-11 09:54:29 | 显示全部楼层
感觉题目太简单,都没有必要编程。
既然编程就是用到循环了,为了提高效率,程序写的长了点。
  1. team1 = ['a', 'b', 'c']
  2. team2 = ['x', 'y', 'z']
  3. result =[]
  4. for i in team2:
  5.     if i != 'x' and i != 'z':
  6.         break
  7. team1.remove('c')
  8. team2.remove(i)
  9. result.append(('c', i))
  10. for i in team2:
  11.     if i != 'x':
  12.         break
  13. team1.remove('a')
  14. team2.remove(i)
  15. result.append(('a', i))
  16. result.append((team1[0], team2[0]))
  17. result.sort()
  18. print(result)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-11-11 10:30:11 | 显示全部楼层
jerryxjr1220 发表于 2016-11-11 09:53
上面那段是为了给你看清楚程序结构,理解了后,可以简化一下,其实是一样的:

python3的zip没下标
TypeError: 'zip' object is not subscriptable
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-11 11:33:23 | 显示全部楼层
冬雪雪冬 发表于 2016-11-11 09:54
感觉题目太简单,都没有必要编程。
既然编程就是用到循环了,为了提高效率,程序写的长了点。

恩,谢谢分享,看懂了
!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-11 11:46:10 | 显示全部楼层
本帖最后由 rocyjp 于 2016-11-11 11:47 编辑
jerryxjr1220 发表于 2016-11-11 09:37
输出:
[('a','z'),('b','x'),('c','y')]


对于permutations 这个函数的用法,没有搞太明白,
_yi = [('x','y','z'),('x','z','y'),('y','x','z'),('y','z','x'),('z','x','y'),('z','y','x')]
对吧?
eachyi =('x','y','z')时:zu =  [('a''x'),('b','y'),('c','z')]  对么?

另外   
  1. import itertools as it   
  2. yi = ('x','y','z')      
  3. b = it.permutations(yi,3)
  4. print(b)                 
复制代码

执行结果:<itertools.permutations object at 0x101084888>   这是什么原因呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-11 14:31:10 | 显示全部楼层
SixPy 发表于 2016-11-11 11:16
最简单的集合算法

集合  我还没学啊,还不知道怎么用,看着 好简单的哦!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-11 14:45:26 | 显示全部楼层
rocyjp 发表于 2016-11-11 14:31
集合  我还没学啊,还不知道怎么用,看着 好简单的哦!

很简单,也很直观。
  1. c = {'x','y','z'}-{'x','z'} # c说他不和x,z比
  2. a = {'x','y','z'}-{'x'}-c # a说他不和x比 ,并把已经确定的c的对手排除掉
  3. b = {'x','y','z'}- c-a # 把已经确定的a 和 c的对手排除掉,剩下的就是 b 的对手。
  4. print('a:%s\nb:%s\nc:%s'%(a,b,c))
  5. a:{'z'}
  6. b:{'x'}
  7. c:{'y'}
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-11 15:39:18 | 显示全部楼层
rocyjp 发表于 2016-11-11 11:46
对于permutations 这个函数的用法,没有搞太明白,
_yi = [('x','y','z'),('x','z','y'),( ...

permutations函数返回的结果是个生成器,所以直接打印是显示它是个permutations对象,要调用里面的内容才能显示出来。
zip()函数是配对,把2个元组或列表依次组合
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-11 15:40:22 | 显示全部楼层
SixPy 发表于 2016-11-11 10:30
python3的zip没下标
TypeError: 'zip' object is not subscriptable

哦,我用的是python 2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-11 16:58:56 | 显示全部楼层
jerryxjr1220 发表于 2016-11-11 09:53
上面那段是为了给你看清楚程序结构,理解了后,可以简化一下,其实是一样的:

我执行了 怎么是报错的呢?
if zip(jia,eachyi)[0][1] != 'x' and zip(jia,eachyi)[2][1] == 'y':
TypeError: 'zip' object is not subscriptable
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-11 18:09:57 | 显示全部楼层
jerryxjr1220 发表于 2016-11-11 09:37
输出:
[('a','z'),('b','x'),('c','y')]

代码报错了:

  if zu[0][1] != 'x' and zu[2][1] == 'y':
TypeError: 'zip' object is not subscriptable
  
这是怎么了?求解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-11 18:18:53 | 显示全部楼层
rocyjp 发表于 2016-11-11 18:09
代码报错了:

  if zu[0][1] != 'x' and zu[2][1] == 'y':

我用的是python2
看版主大大的回帖
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-11 22:03:52 | 显示全部楼层
jerryxjr1220 发表于 2016-11-11 18:18
我用的是python2
看版主大大的回帖

哦 ,晓得了  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-23 20:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表