鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

[技术交流] 小练习:分发扑克牌(补加要求4)

[复制链接]
发表于 2016-1-15 14:42:02 | 显示全部楼层
不错不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-15 16:27:48 | 显示全部楼层
本帖最后由 a1104201 于 2016-1-15 16:30 编辑

你这个题目什么时候能公布下答案  我们学习下
排序上不知道咋排
#-*- coding:UTF-8 -*-;
import random as r;
t_type = ['黑桃','红桃','梅花','方块']
pai = {
    '黑桃':['A','2','3','4','5','6','7','8','9','10','J','Q','K'],
    '红桃':['A','2','3','4','5','6','7','8','9','10','J','Q','K'],
    '梅花':['A','2','3','4','5','6','7','8','9','10','J','Q','K'],
    '方块':['A','2','3','4','5','6','7','8','9','10','J','Q','K']
}
game = [
    {},
    {},
    {},
    {}
]
shu = 1;
def getHuase(t_type):
    h_len = len(t_type);
    h = h_len-1;
    h1 = r.randint(0,h);
    huase = t_type[h1];
    h1_len = len(pai[huase]);
    if h1_len==0:
        del pai[huase];
        del t_type[h1];
        huase,h1_len = getHuase(t_type);
        h1_len = len(pai[huase]);
    return (huase,h1_len);

def paixu(a):
    for i in a:
        print(ord(i));
while shu<=52:
    for i in range(4):
        huase,h1_len = getHuase(t_type);
        h2 = r.randint(0,h1_len-1);
        p = pai[huase][h2];
        game.setdefault(huase,[]).append(p);
        del pai[huase][h2];
        shu += 1;
num = 1;


for i in game:
    print("第%s位玩家的牌面为:" % num);
    for a in i:
        #print(sorted(i[a]));
        p = reversed(sorted(i[a]));
        print(a," ".join(p));
    num += 1;

希望能得到指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2016-1-20 08:34:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-20 23:27:39 | 显示全部楼层
zooo 发表于 2016-1-10 00:37
思路:
cardList存52张牌(也可以用循环代替手打。。)
实现

random用的真好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-20 23:51:48 | 显示全部楼层

python太强大,所以才有了这个取巧的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-21 16:00:20 | 显示全部楼层
楼主能给出个好的答案参考学习不
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-21 18:22:51 | 显示全部楼层
herdboy 发表于 2016-1-21 16:00
楼主能给出个好的答案参考学习不

呵呵,我也写了一个,算不上好的答案,共同学习吧。
  1. import random
  2. card = list(range(52))
  3. random.shuffle(card)
  4. def t(a):
  5.     list1 = ['A','K','Q','J','10','9','8','7','6','5','4','3','2','1']
  6.     return(list1[a])
  7. play = [[],[],[],[]]
  8. for i in range(4):
  9.     play[i] = card[i * 13:13 + i * 13]
  10.     play[i].sort(reverse = True)
  11.     #print(play[i])
  12.     s = []
  13.     h = []
  14.     d = []
  15.     c = []
  16.     for j in range(13):
  17.         if play[i][j] > 38:
  18.             s.insert(0, t(play[i][j]-39))
  19.         elif play[i][j] > 25:
  20.             h.insert(0, t(play[i][j]-26))
  21.         elif play[i][j] > 12:
  22.             d.insert(0, t(play[i][j]-13))
  23.         else:
  24.             c.insert(0, t(play[i][j]))
  25.     print('玩家%s手中纸牌:'%(i+1))
  26.     print('黑桃:','%s '*len(s)%tuple(s))
  27.     print('红心:','%s '*len(h)%tuple(h))
  28.     print('方块:','%s '*len(d)%tuple(d))
  29.     print('草花:','%s '*len(c)%tuple(c), '\n')



  30.    
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-22 10:23:18 | 显示全部楼层
冬雪雪冬 发表于 2016-1-21 18:22
呵呵,我也写了一个,算不上好的答案,共同学习吧。

楼主,看了你的程序有一个地方不是很理解。你的那个输出 print('黑桃:','%s '*len(s)%tuple(s)) 是不是对输出的数据排序了? 怎么看的我云里雾里的,能解释一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-22 11:38:26 | 显示全部楼层
herdboy 发表于 2016-1-22 10:23
楼主,看了你的程序有一个地方不是很理解。你的那个输出 print('黑桃:','%s '*len(s)%tuple(s) ...

这是将列表输出成字符串格式。
简单的说:
如果 s=[1, 2, 3]
则print('%s '*len(s)%tuple(s))
相当于print('%s %s %s '%(1, 2, 3))
输出:1 2 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-22 13:37:33 | 显示全部楼层
冬雪雪冬 发表于 2016-1-22 11:38
这是将列表输出成字符串格式。
简单的说:
如果 s=[1, 2, 3]

原来是酱紫啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-24 00:32:49 | 显示全部楼层
  1. def printinfo(listinfo,count):
  2.     方块 = []
  3.     黑桃 = []
  4.     红心 = []
  5.     草花 = []
  6.     for i in listinfo:
  7.         if '方块' in i:
  8.             方块.append(i[2:])
  9.         elif '黑桃' in i:
  10.             黑桃.append(i[2:])
  11.         elif '草花' in i:
  12.             草花.append(i[2:])
  13.         else:
  14.             红心.append(i[2:])
  15.     黑桃 = sorted(黑桃, key=lambda x:num.index(x), reverse=True)
  16.     草花 = sorted(草花, key=lambda x:num.index(x), reverse=True)
  17.     方块 = sorted(方块, key=lambda x:num.index(x), reverse=True)
  18.     红心 = sorted(红心, key=lambda x:num.index(x), reverse=True)

  19.     msg = '''
  20.         玩家%s的牌
  21.         黑桃:%s
  22.         红心:%s
  23.         方块:%s
  24.         草花:%s
  25.     ''' %(count,黑桃,红心,方块,草花)
  26.     print(msg,end='------------')

  27. count = 1
  28. for i in [玩家1,玩家2,玩家3,玩家4]:
  29.     printinfo(i, count)
  30.     count += 1
复制代码


不是很懂这段代码中的(方块.append(i[2:])和 key=lambda x:num.index(x))
比如:方块.append(i[2:])  中 i 指代的是什么?
           key=lambda x:num.index(x)  中传入x的参数又是什么?

有哪位大神可以告诉我一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-20 20:48:21 | 显示全部楼层
没有思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-2 12:01:08 | 显示全部楼层
  1. import random
  2. print('下面开始发牌')
  3. card=['黑桃A','黑桃K','黑桃Q','黑桃J','黑桃10','黑桃9','黑桃8','黑桃7','黑桃6','黑桃5','黑桃4','黑桃3','黑桃2','梅花A','梅花K','梅花Q','梅花J','梅花10','梅花9','梅花8','梅花7','梅花6','梅花5','梅花4','梅花3','梅花2','方块A','方块K','方块Q','方块J','方块10','方块9','方块8','方块7','方块6','方块5','方块4','方块3','方块2','红桃A','红桃K','红桃Q','红桃J','红桃10','红桃9','红桃8','红桃7','红桃6','红桃5','红桃4','红桃3','红桃2']
  4. card2=card[:]
  5. cardnum=1
  6. i=1
  7. heitao=[]
  8. hongtao=[]
  9. meihua=[]
  10. fangkuai=[]
  11. playcard=[]
  12. while cardnum!=0:
  13.         cardnum=len(card)
  14.         if len(playcard)<13:
  15.                 playcard.append(card.pop(random.randint(0,cardnum-1)))
  16.         else:
  17.                 player='play'+str(i)
  18.                 player=playcard[:]
  19.                 print()
  20.                 print('玩家%s手中纸牌:' % i)
  21.                 for each in card2:
  22.                         if each in player:
  23.                                 if '黑桃' in each:
  24.                                         heitao.append(each)       
  25.                                 if '红桃' in each:
  26.                                         hongtao.append(each)
  27.                                 if '梅花' in each:
  28.                                         meihua.append(each)
  29.                                 if '方块' in each:
  30.                                         fangkuai.append(each)
  31.                 print('黑桃:',end=' ')
  32.                 for a in heitao:
  33.                         print(a,end=' ')
  34.                 print()
  35.                 print('红桃:',end=' ')
  36.                 for a in hongtao:
  37.                         print(a,end=' ')
  38.                 print()
  39.                 print('梅花:',end=' ')
  40.                 for a in meihua:
  41.                         print(a,end=' ')
  42.                 print()
  43.                 print('方块:',end=' ')
  44.                 for a in fangkuai:
  45.                         print(a,end=' ')
  46.                 print()
  47.                 heitao=[]
  48.                 hongtao=[]
  49.                 meihua=[]
  50.                 fangkuai=[]       
  51.                 playcard=[]
  52.                 i+=1

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-27 08:49:02 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 21:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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