鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 169

[复制链接]
发表于 2018-3-23 18:30:45 | 显示全部楼层
本帖最后由 luokaoge 于 2018-3-23 19:04 编辑

import random
time = random. randint(3,10)
def dice():
         print('掷骰子游戏,请掷' + str(time) + '轮骰子,每人掷三次骰子。')
         list_1 = []
         print('开始' + '\n' + '.'+ '\n' + '..' + '\n' + '...')
         for i in range(1,time+1):
             list_2 = []
             for i in range(0,3):
                 a = random. randint(1,6)
                 list_2.append(a)
             list_1.append(tuple(list_2))
         print('掷的骰子为:' + str(list_1))
         b = []
         d = []
         f = []
         for i in range(0,time):
             a = []
             com = list_1
             if com[0] == com[1] == com[2]:
                 a.append(com[0])
                 a.append(i)
             else:
                 a.append(0)
                 a.append(i)
             b.append(tuple(a))
         for i in range(0,time):
             c = []
             com = list_1
             if com[0] == com[1] and com[1] != com[2]:
                 c.append(com[0])
                 c.append(i)
             elif com[1] == com[2] and com[2] != com[0]:
                  c.append(com[1])
                  c.append(i)
             elif com[2] == com[0] and com[0] != com[1]:
                  c.append(com[2])
                  c.append(i)
             else:
                  c.append(0)
                  c.append(i)
             d.append(tuple(c))
         for i in range(0,time):
             e = []
             com = list_1
             if com[0] != com[1] and com[1] != com[2] and com[0] != com[2]:
                 e.append(com[0] + com[1] + com[2])
                 e.append(i)
             else:
                 e.append(0)
                 e.append(i)
             f.append(tuple(e))
         b.sort(key=lambda x:x[0])
         d.sort(key=lambda x:x[0])
         f.sort(key=lambda x:x[0])
         b = list(reversed(b))
         d = list(reversed(d))
         f = list(reversed(f))
         list_r = []
         for i in range(0,time):
             com1 = list(b)
             if com1[0] != 0:
                 list_r.append(list_1[com1[1]])
         for i in range(0,time):
             com1 = list(d)
             if com1[0] != 0:
                 list_r.append(list_1[com1[1]])
         for i in range(0,time):
             com1 = list(f)
             if com1[0] != 0:
                 list_r.append(list_1[com1[1]])
         print('大小顺序为' + str(list_r))
dice()


打印结果

打印结果

点评

测试运行报错  发表于 2018-3-24 21:21
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-23 19:38:38 | 显示全部楼层
def shu_sum(x,y,z):
    if (x==y) and (x==z):
        p=(x+y+z)*100
    elif ((x==y) and (x!=z)) or ((x==z) and (y!=z)) or ((y==z) and (x!= y)):
        p=(x+y+z)*10
    else:
        p=x+y+z
    return p
b=[]
c=[]
d=[]
a=[(4, 1, 1), (2, 2, 2), (5, 6, 1), (4, 3, 6), (2, 4, 3), (1, 1, 1), (4, 3, 6), (6, 3, 3), (1, 3, 6), (4, 4, 3), (6, 2, 2), (1, 5, 2), (5, 6, 6), (1, 4, 6), (2, 1, 6), (1, 3, 3), (6, 6, 5)]
num_long=len(a)
for i in range(num_long):
    m=a[i][0]
    n=a[i][1]
    l=a[i][2]
    b.append(shu_sum(m,n,l))
    c.append(shu_sum(m,n,l))
print(b)
c.sort()
c.reverse()
for i in range(num_long):
    j=0
    var = 1
    while var==1:
        if c[i]==b[j]:
            d.append(a[j])
            var=2
        j+=1
print("********** 排序的列表 **********")
print(d)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-23 21:00:52 | 显示全部楼层
s=[(4, 1, 1), (2, 2, 2), (5, 6, 1), (4, 3, 6), (2, 4, 3), (1, 1, 1), (4, 3, 6), (6, 3, 3), (1, 3, 6), (4, 4, 3), (6, 2, 2), (1, 5, 2), (5, 6, 6), (1, 4, 6), (2, 1, 6), (1, 3, 3), (6, 6, 5)]
num=len(s)
a=0;b=0;c=0
A=[()]*2;B=[()]*8;C=[()]*7

#获取三种不同的元组的个数并分别存储在A、B、C列表中
for i in range(0,num):
    n=();n=s[i]
    if n[0] == n[1] == n[2]:
        a +=1
        A[a-1]=n
    elif n[0] != n[1] and n[1] != n[2] and n[0] != n[2]:
        b +=1
        B[b-1]=n
    else:
        c +=1
        C[c-1]=n
        
#对每个元组进行求和
def total(t):
    tn=len(t)
    ts=0
    i=0
    while i <= tn-1:
        ts +=t[i]
        i +=1
   
    return ts


#定义对A和B排序的函数list_fuc(N)  
def list_fuc(N):
    sub=[()]
    for j in range(0,len(N)):
        for i in range(j+1,len(N)):
            if total(N[j]) < total(N[i]):
               sub=N[j]
               N[j]=N[i]
               N[i]=sub
    return N
   
           
#定义函数double_num(M),将重复的数字放在第一位,不重复的数字放在第二位
def double_num(M):
    m=[]*2
    if M[0]==M[1]:
        m=[M[0],M[2]]
    elif M[0]==M[2]:
        m=[M[0],M[1]]
    else:
        m=[M[1],M[0]]
    return m
   
   
#对C进行排序  
suc=[()]            
for i in range(0,c):
    for j in range(i+1,c):
        if double_num(C[i])[0] < double_num(C[j])[0] or (double_num(C[i])[0] == double_num(C[j])[0] and double_num(C[i])[1] < double_num(C[j])[1]) :
            suc=C[i]
            C[i]=C[j]
            C[j]=suc
            
#将结果打印出来
print list_fuc(A)+C+list_fuc(B)  

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-23 22:45:08 | 显示全部楼层
  1. import random
  2. tri = {}
  3. dou = {}
  4. sin = {}
  5. list1 = []
  6. times = (int)(input('请输入掷骰子次数:'))
  7. for num in range(0, times):
  8.     a = random.randint(1, 6)
  9.     b = random.randint(1, 6)
  10.     c = random.randint(1, 6)
  11.     if (a == b) and (b == c):
  12.         tri[(a, b, c)] = a
  13.     elif (a == b) or (b == c) or (a == c):
  14.         if a == b:
  15.             dou[(a, b, c)] = a
  16.         elif b == c:
  17.             dou[(b, c, a)] = b
  18.         elif a == c:
  19.             dou[(c, a, b)] = c
  20.     else:
  21.         sin[(a, b, c)] = a + b + c
  22. list_tri = sorted(tri.items(), key = lambda item : item[1], reverse = True)
  23. list_dou = sorted(dou.items(), key = lambda item : item[1], reverse = True)
  24. list_sin = sorted(sin.items(), key = lambda item : item[1], reverse = True)
  25. for i in range(0, len(list_tri)):
  26.     list1.append(list_tri[i][0])
  27. for i in range(0, len(list_dou)):
  28.     list1.append(list_dou[i][0])
  29. for i in range(0, len(list_sin)):
  30.     list1.append(list_sin[i][0])
  31. print(list1)
复制代码

差一个功能:两个一样的,若两个一样的点数相同,如何比较第三个的点数。。。小白求教

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1 参考一下他人的答案

查看全部评分

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

使用道具 举报

发表于 2018-3-23 23:15:27 | 显示全部楼层
本帖最后由 8306最硬 于 2018-3-23 23:35 编辑

排序一直是弱项啊
  1. def fun(lst):
  2.     def fun1(x):
  3.         if x[0] == x[1] == x[2]: return -7
  4.         if x[0] == x[1]: return -x[0]
  5.         if x[1] == x[2]: return -x[2]      
  6.         return 0

  7.     lst = sorted(lst, key = sum, reverse = True)
  8.     lst = sorted(lst, key = fun1)

  9.     return lst
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-23 23:32:17 | 显示全部楼层
  1. '''
  2. 这回我们来掷骰子,每轮掷3个骰子,多轮掷后,将骰子的点数记为一个列表,例如:
  3. [(4, 1, 1), (2, 2, 2), (5, 6, 1), (4, 3, 6), (2, 4, 3), (1, 1, 1), (4, 3, 6),
  4. (6, 3, 3), (1, 3, 6), (4, 4, 3), (6, 2, 2), (1, 5, 2), (5, 6, 6), (1, 4, 6),
  5. (2, 1, 6), (1, 3, 3), (6, 6, 5)]
  6. 现在要将每轮的掷骰子的情况由大到小排序,
  7. 规则是,三个一样的最大,两个一样的次之,然后是都不一样的。
  8. 三个一样的最大再以点数排序,两个一样的,先比较两个一样的点数,
  9. 如果还相同,再比较第三个的点数,都不一样的按点数之后。
  10. 例如:(6,6,6)>(1,1,1)>(5,5,2)>(4,4,6)>(6,5,4)>(3,2,1)
  11. 最后给出按此规则排序的列表。
  12. 注:点数相同的排序次序不限,如(6,3,1)和(5,4,1)谁排在前面都行。
  13. '''
  14. #定义一个函数,参数为元组,返回一个数字
  15. #各个位数表达分别为:点数相同个数、点位相同的数值、各点数之和(占两位)
  16. def mysort(t):
  17.     s=t[0]+t[1]+t[2]
  18.     num=0
  19.     if t[0]==t[1]:
  20.         if t[0]==t[2]:
  21.             num=3000+t[0]*100+s
  22.         else:
  23.             num=2000+t[0]*100+s
  24.     elif t[0]==t[2]:
  25.         num=2000+t[0]*100+s
  26.     elif t[1]==t[2]:
  27.         num=2000+t[1]*100+s
  28.     else:
  29.         num=1000+s
  30.     return num

  31. myl=[(4, 1, 1), (2, 2, 2), (5, 6, 1), (4, 3, 6), (2, 4, 3), (1, 1, 1), (4, 3, 6),
  32. (6, 3, 3), (1, 3, 6), (4, 4, 3), (6, 2, 2), (1, 5, 2), (5, 6, 6), (1, 4, 6),
  33. (2, 1, 6), (1, 3, 3), (6, 6, 5)]
  34. print(sorted(myl,key=mysort,reverse=True))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-24 00:58:48 | 显示全部楼层
本帖最后由 冰封雪舞 于 2018-3-24 01:11 编辑

import random
tt=[]
w=int(input('请输入你想要扔骰子的次数'))

for i in range(0,w):
    a = random.randint(1,6)
    b = random.randint(1,6)
    c = random.randint(1,6)
    tt.append([a,b,c])
print('3个骰子扔%d次是'%w,tt)
a1=[]
b20=[]
b=[]
c3=[]
for i in tt:
    if i[0]==i[1]==i[2]:
        a1.append(i)
    elif i[0]==i[1]:
        b20.append([i[0],i[2],tt.index(i)])
    elif i[1]==i[2]:
        b20.append([i[1],i[0],tt.index(i)])
    elif i[0]==i[2]:
        b20.append([i[2],i[1],tt.index(i)])        
    else:
        c3.append(i)
a=sorted(a1,key=lambda x:x[0],reverse=True)
b0=sorted(b20,key=lambda x:x[1],reverse=True)
b0=sorted(b0,key=lambda x:x[0],reverse=True)

for bb in b0:
    b.append(tt[bb[2]])

c=sorted(c3,key=lambda x:x[0]+x[1]+x[2],reverse=True)
a.extend(b)
a.extend(c)
print('按规则排序后是',a)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-24 08:19:34 From FishC Mobile | 显示全部楼层
  1. #!/usr/bin/python
  2. a = [(4, 1, 1), (2, 2, 2), (5, 6, 1), (4, 3, 6), (2, 4, 3), (1, 1, 1), (4, 3, 6), (6, 3, 3), (1, 3, 6), (4, 4, 3), (6, 2, 2), (1, 5, 2), (5, 6, 6), (1, 4, 6), (2, 1, 6), (1, 3, 3), (6, 6, 5)]
  3. def sortA(a):
  4.         allSame = sorted([i for i in a if len(set(i)) == 1], key = lambda x: x[0], reverse = True)
  5.         twoSame = [i for i in a if len(set(i)) == 2]
  6.         noSame = sorted([i for i in a if len(set(i)) == 3], key = lambda x: sum(x), reverse = True)
  7.         def f(lst):
  8.                 a,b = sorted([i for i in set(lst)], key = lambda x: lst.count(x), reverse = True)
  9.                 return a,b
  10.         twoSame = sorted(twoSame, key = f, reverse = True)
  11.         allSame.extend(twoSame)
  12.         allSame.extend(noSame)
  13.         return allSame

  14. print(sortA(a))

  15. ##  结果:
  16. ##  [(2, 2, 2), (1, 1, 1), (5, 6, 6), (6, 6, 5), (4, 4, 3), (6, 3, 3), (1, 3, 3), (6, 2, 2), (4, 1, 1), (4, 3, 6), (4, 3, 6), (5, 6, 1), (1, 4, 6), (1, 3, 6), (2, 4, 3), (2, 1, 6), (1, 5, 2)]
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-24 09:23:20 | 显示全部楼层
本帖最后由 victor.xu 于 2018-3-24 10:17 编辑
  1. def f(lis):
  2.     lis1 = []
  3.     lis3 = []
  4.     for i in lis:
  5.         lis2 = []
  6.         if len(set(i)) == 1:
  7.             n = 3
  8.         elif len(set(i)) == 2:
  9.             n = 2
  10.         else:
  11.             n = 0
  12.         lis2.append(n)
  13.         j = list(i)
  14.         for k in j:
  15.             if j.count(k) == 2:
  16.                 j.remove(k)
  17.                 j.remove(k)
  18.                 j.insert(0, k)
  19.                 j.insert(0, k)
  20.                 i = tuple(j)
  21.         lis2.append(i)
  22.         lis1.append(lis2)
  23.     lis1.sort(reverse = True)
  24.     for m in lis1:
  25.         lis3.append(m[1])
  26.     return lis3
  27. lis = [(4, 1, 1), (2, 2, 2), (5, 6, 1), (4, 3, 6), (2, 4, 3), (1, 1, 1), (4, 3, 6), (6, 3, 3), (1, 3, 6), (4, 4, 3), (6, 2, 2), (1, 5, 2), (5, 6, 6), (1, 4, 6), (2, 1, 6), (1, 3, 3), (6, 6, 5)]
  28. result = f(lis)
  29. print(result)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-24 09:36:19 | 显示全部楼层
本帖最后由 yjsx86 于 2018-3-24 10:10 编辑
  1. import random
  2. def rankPoint(times):
  3.     while times:
  4.         points = [(1,1,1)]+[tuple([random.randint(1,6) for y in range(3)]) for x in range(15)]+[(5,5,5)]
  5.         print('排序前:%s' % points)
  6.         print('排序后:%s' % sorted(points,key=lambda x:(len(set(x)),[-i for i in x if x.count(i) == 2],-sum(x))))
  7.         print()
  8.         times -= 1
  9. if __name__ == '__main__':
  10.     rankPoint(5)
复制代码
  1. 排序前:[(1, 1, 1), (2, 5, 4), (6, 3, 2), (4, 4, 3), (5, 2, 6), (3, 5, 6), (1, 2, 4), (1, 2, 4), (5, 1, 6), (1, 4, 4), (4, 4, 4), (3, 1, 3), (6, 2, 4), (3, 3, 3), (4, 1, 5), (1, 3, 4), (5, 5,5)]
  2. 排序后:[(5, 5, 5), (4, 4, 4), (3, 3, 3), (1, 1, 1), (4, 4, 3), (1, 4, 4), (3, 1, 3), (3, 5, 6), (5, 2, 6), (5, 1, 6), (6, 2, 4), (2, 5, 4), (6, 3, 2), (4, 1, 5), (1, 3, 4), (1, 2, 4), (1, 2,4)]

  3. 排序前:[(1, 1, 1), (1, 6, 5), (1, 3, 3), (1, 5, 5), (6, 2, 4), (3, 2, 3), (1, 3, 5), (2, 6, 4), (1, 4, 4), (5, 1, 5), (3, 3, 6), (5, 4, 2), (4, 4, 1), (5, 6, 3), (2, 1, 5), (1, 6, 3), (5, 5,5)]
  4. 排序后:[(5, 5, 5), (1, 1, 1), (1, 5, 5), (5, 1, 5), (1, 4, 4), (4, 4, 1), (3, 3, 6), (3, 2, 3), (1, 3, 3), (5, 6, 3), (1, 6, 5), (6, 2, 4), (2, 6, 4), (5, 4, 2), (1, 6, 3), (1, 3, 5), (2, 1,5)]

  5. 排序前:[(1, 1, 1), (5, 5, 4), (3, 1, 6), (2, 3, 5), (6, 1, 4), (3, 6, 6), (5, 3, 3), (2, 6, 6), (6, 2, 3), (6, 6, 2), (5, 3, 1), (2, 5, 3), (6, 5, 2), (5, 5, 2), (3, 6, 6), (6, 1, 3), (5, 5,5)]
  6. 排序后:[(5, 5, 5), (1, 1, 1), (3, 6, 6), (3, 6, 6), (2, 6, 6), (6, 6, 2), (5, 5, 4), (5, 5, 2), (5, 3, 3), (6, 5, 2), (6, 1, 4), (6, 2, 3), (3, 1, 6), (2, 3, 5), (2, 5, 3), (6, 1, 3), (5, 3,1)]

  7. 排序前:[(1, 1, 1), (6, 5, 5), (2, 1, 4), (6, 4, 3), (2, 6, 4), (5, 1, 5), (3, 4, 2), (6, 1, 2), (3, 6, 3), (4, 1, 1), (4, 2, 2), (2, 5, 6), (3, 2, 3), (6, 2, 2), (5, 3, 2), (6, 5, 3), (5, 5,5)]
  8. 排序后:[(5, 5, 5), (1, 1, 1), (6, 5, 5), (5, 1, 5), (3, 6, 3), (3, 2, 3), (6, 2, 2), (4, 2, 2), (4, 1, 1), (6, 5, 3), (6, 4, 3), (2, 5, 6), (2, 6, 4), (5, 3, 2), (3, 4, 2), (6, 1, 2), (2, 1,4)]

  9. 排序前:[(1, 1, 1), (1, 4, 1), (5, 4, 1), (4, 2, 5), (5, 6, 5), (3, 3, 4), (1, 2, 6), (3, 6, 5), (3, 5, 2), (6, 2, 3), (4, 6, 2), (4, 5, 6), (2, 6, 4), (4, 6, 3), (5, 2, 5), (2, 5, 5), (5, 5,5)]
  10. 排序后:[(5, 5, 5), (1, 1, 1), (5, 6, 5), (5, 2, 5), (2, 5, 5), (3, 3, 4), (1, 4, 1), (4, 5, 6), (3, 6, 5), (4, 6, 3), (4, 6, 2), (2, 6, 4), (4, 2, 5), (6, 2, 3), (5, 4, 1), (3, 5, 2), (1, 2,6)]
复制代码

评分

参与人数 2荣誉 +8 鱼币 +8 贡献 +3 收起 理由
8306最硬 + 5 + 5 + 3 天秀
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-24 09:57:29 | 显示全部楼层
写的脑瓜子老大,总算写出来了
  1. import random
  2. number = []
  3. list1 = [1, 6]
  4. three = []
  5. two =[]
  6. one = []
  7. two_dict = {}
  8. def dice_number():
  9.     number = []
  10.     for a in range(3):
  11.         number.append(random.randint(list1[0],list1[1]))
  12.     return list(number)

  13. def people_number(num):
  14.     count = 0
  15.     for i in range(num):
  16.         number.append(dice_number())
  17.         yield sorted(number[count],reverse=True)
  18.         count += 1

  19. def input_num():
  20.     count = 0
  21.     temp = int(input('请输入几个人玩游戏:'))

  22.     for i in people_number(temp):
  23.         count += 1
  24.         input('第%d个人是%s'%(count,i))

  25. def change_num():
  26.     count = -1
  27.     for a in number:
  28.         count += 1
  29.         for b in range(len(a)):
  30.             if a[count] == a[count+1] == a[count+2]:
  31.                 three.append(sorted(a,reverse=True))
  32.                 count = -1
  33.                 break
  34.             if a[count] == a[count+1] or a[count] == a[count+2] or a[count+1] ==a[count+2]:
  35.                 two.append(sorted(a,reverse=True))
  36.                 count = -1
  37.                 break
  38.             else:
  39.                 one.append(sorted(a,reverse=True))
  40.                 count = -1
  41.                 break

  42. def main():
  43.     input_num()
  44.     change_num()
  45.     thr = sorted(three,reverse=True)
  46.     for a in thr:
  47.         print(tuple(a),end='>')

  48.     for b in two:
  49.         for c in range(1):
  50.                 if b[0] == b[1]:
  51.                     if (b[0],b[1]) in two_dict.keys():
  52.                         two_dict[b[0],b[1]] += str(b[2])
  53.                     else:
  54.                         two_dict[b[0], b[1]] = str(b[2])
  55.                 elif b[0] == b[2]:
  56.                     if (b[0],b[2]) in two_dict.keys():
  57.                         two_dict[b[0],b[2]] += str(b[1])
  58.                     else:
  59.                         two_dict[b[0], b[2]] = str(b[1])
  60.                 elif b[1] == b[2]:
  61.                     if (b[1],b[2]) in two_dict.keys():
  62.                         two_dict[b[1],b[2]] += str(b[0])
  63.                     else:
  64.                         two_dict[b[1], b[2]] = str(b[0])
  65.     two_dict1 = dict(sorted(two_dict.items(), key=lambda e: e[0], reverse=True))
  66.     cc = 0
  67.     for aa in two_dict1.values():
  68.         for bb in aa :
  69.             cc += 1
  70.     try:
  71.         for d,e in two_dict1.items():
  72.             for f in sorted(e,reverse=True):
  73.                 cc -= 1
  74.                 if cc or one != []:
  75.                     print('(',d[0],',',d[1],',',f,')',end='>')
  76.                 else:
  77.                     print('(',d[0],',',d[1],',',f,')',end='')
  78.     except IndexError:
  79.         pass
  80.     one_dict1 = dict()

  81.     one_list1 = []
  82.     dd = 0

  83.     for g in one:
  84.         for k in range(1):
  85.             one_list1.append(g[0]+g[1]+g[2])

  86.     for m in one:
  87.         for l in range(1):
  88.             if (m[0],m[1],m[2]) in one_dict1.keys():
  89.                 dd += 1
  90.                 one_dict1[((m[0],m[1],m[2])),dd] = m[0]+m[1]+m[2]
  91.             else:
  92.                 one_dict1[(m[0], m[1], m[2])] = m[0] + m[1] + m[2]
  93.     one_dict2 = dict(sorted(one_dict1.items(), key=lambda eee: eee[1], reverse=True))
  94.     con = len(one_dict2.values())
  95.     for kkk in one_dict2.keys():
  96.         con -= 1
  97.         if len(kkk) == 3 and con != 0:
  98.             print(kkk,end='>')
  99.         elif len(kkk) == 3 and con == 0:
  100.             print(kkk,end='')
  101.         if len(kkk) !=3 and con !=0:
  102.             print(kkk[0],end='>')
  103.         elif len(kkk) !=3 and con ==0:
  104.             print(kkk[0],end='')

  105. main()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 程序没问题,不过点数相同的也用大于号了

查看全部评分

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

使用道具 举报

发表于 2018-3-24 11:55:35 | 显示全部楼层
本帖最后由 the0503 于 2018-3-24 23:05 编辑

  1. import random
  2. def rev(lst):  #添加标识符并内部排序
  3.         lst2=sorted(list(lst))
  4.         lst2.reverse()
  5.         lst1=[]
  6.         x,y,z = lst2
  7.         if x == y and y == z:
  8.             lst1 = [3,tuple(lst2)]
  9.             return lst1
  10.         elif x == y or y ==z :
  11.             lst1 = [2,tuple(lst2)]
  12.             return lst1
  13.         else:
  14.             lst1 = [1,tuple(lst2)]
  15.             return lst1

  16. def zhi():  #生成数组
  17.         a1=random.randint(1,6)
  18.         a2=random.randint(1,6)
  19.         a3=random.randint(1,6)
  20.         return (a1,a2,a3)

  21. def comp(lst1,lst2):
  22.         if lst1[0]== 2 and lst2[0] ==2: #比较标识符
  23.                 if lst1[1][1]>lst2[1][1]: #特例是有一对时,比较第二位即可
  24.                         return True
  25.                 elif lst1[1][1] == lst2[1][1]:
  26.                     return sum(lst1[1]) > sum(lst2[1])
  27.                 else:
  28.                         return False
  29.         elif lst1[0]== 1 and lst2[0] ==1:
  30.             return sum(lst1[1]) > sum(lst2[1])
  31.         else:
  32.                 return lst1>lst2

  33. def sortlst(lst):
  34.     c = len(lst)
  35.     for i in range(c-1):
  36.         for l in range(c-1-i):
  37.             if comp(lst[l],lst[l+1])==False:
  38.                 lst[l],lst[l+1] = lst[l+1],lst[l]
  39.     return lst
  40.             
  41. lst = []
  42. lst1 = []
  43. lst3 = []
  44. num = int(input('骰子掷几次:'))
  45. for i in range(num):  #生成骰子数组
  46.         temp = zhi()
  47.         lst.append(temp)
  48. for l in lst:   #添加对比符号
  49.     l = rev(l)
  50.     lst1.append(l)
  51. lst2=sortlst(lst1)

  52. for m in lst2:
  53.     lst3.append(m[1])
  54. print(lst3)

复制代码


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

使用道具 举报

 楼主| 发表于 2018-3-24 21:32:51 | 显示全部楼层

测试有问题
  1. 骰子掷几次:30
  2. [(1, 1, 1), (6, 6, 3), (6, 6, 3), (6, 5, 3), (6, 5, 3), (6, 5, 3), (5, 5, 4), (5, 5, 2), (5, 5, 1), (5, 5, 1), (5, 5, 1), (6, 4, 4), (5, 3, 3), (6, 4, 2), (3, 3, 2), (6, 2, 2), (6, 4, 2), (6, 4, 1), (6, 4, 1), (6, 4, 1), (6, 3, 2), (5, 4, 3), (5, 2, 2), (3, 2, 2), (2, 2, 1), (5, 4, 3), (5, 1, 1), (5, 2, 1), (4, 3, 2), (4, 3, 1)]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-24 21:33:07 | 显示全部楼层
评分截至标记
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 22:10:53 | 显示全部楼层

大佬们的思路总是让人耳目一新,一些常见的BIF也能玩出花样~~看来想要进阶,得认真看看help()了~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 22:15:29 | 显示全部楼层
Chase_Kas 发表于 2018-3-24 22:10
大佬们的思路总是让人耳目一新,一些常见的BIF也能玩出花样~~看来想要进阶,得认真看看help()了~~

不是大佬,3个月前我是C语言都不懂的人,想跳槽才开始接触python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 22:26:24 | 显示全部楼层
本帖最后由 Chase_Kas 于 2018-3-24 22:30 编辑


怎么这么厉害的..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-24 23:26:26 | 显示全部楼层
>>> fuck([(3,3,1),(3,2,3),(4,3,3),(3,3,3)])
[(3, 3, 3), (3, 3, 1), (3, 2, 3), (4, 3, 3)]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 19:01:03 | 显示全部楼层

我....这个代码写的简洁、漂亮,羡慕,看了半天,最后发现好像如果有2次2个筛子数值一样的没法根据第三个筛子分大小,比如(2,3,2),(2,1,2),(2,4,2),(2,55,2),其实分辨这种情况才是这道题最难的难点,结果你用颜值混过去了,能把这种情况也写出来吗?我也学习学习,我写的好长,虽然能解决问题,但是看着好笨拙。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 19:06:22 | 显示全部楼层

你这个纯属考颜值糊弄人,两个筛子仍一样的点数,按两个一样大小的筛子数值分大小,如果出现两个这种情况,再按第三个筛子分大小,你这算法很多种情况分的都错的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 20:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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