Daryswatch 2023-03-15 21:16 采纳率: 33.3%
浏览 27
已结题

4名牌手打牌遇到的问题

2、 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌。创建函数gen_pocker()交换牌的顺序,函数getColor()获取牌的花色,函数getValue()获取牌的牌面大小,函数getPuk()获取花色和牌面大小的组合。

第一次写

import random
def gen_pocker(n):      #洗牌
    random.shuffle(n)
    return n
def getColor(n):       #获取牌的花色
    if n/13==0:
        return "梅花"
    if n/13==1:
        return "方片"
    if n/13==2:
        return "红桃"
    if n/13==3:
        return "黑桃"
def getValue(n):           #获取牌的大小,0,13,2639为A 10,23,36,49为J. 11,24,37,50为Q. 12,25,38,51为K
    if n%13==0:
        return "A"
    if n%13==10:
        return "J"
    if n%13==11:
        return "Q"
    if n%13==12:
        return "K"
    else:
        return str(n%13)
def getPuk():      #发牌
    pocker=[]
    for i in range(0,52):
        pocker.append(i)
    pocker=gen_pocker(pocker)
    print(pocker)
    person1=[]
    person2=[]
    person3=[]
    person4=[]
    for i in range(0,52):
        if i%4==0:
            person1.append(getColor(pocker[i]) + getValue(pocker[i]))
        if i%4==1:
            person2.append(getColor(pocker[i]) + getValue(pocker[i]))
        if i%4==2:
            person3.append(getColor(pocker[i]) + getValue(pocker[i]))
        if i%4==3:
            person4.append(getColor(pocker[i]) + getValue(pocker[i]))
    print(pocker)
    print(person1)
    print(person2)
    print(person3)
    print(person4)
getPuk()
此处报错为    person1.append(getColor(pocker[i]) + getValue(pocker[i]))
                   ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
第二次的时候把获取花色改成如下:
if n >= 0 and n <= 12:
    return "梅花"
if n >= 13 and n <= 25:
    return "方片"
if n >= 26 and n <= 38:
    return "红桃"
if n >= 39 and n <= 51:
    return "黑桃"



正常运行,请问一下为什么会报错为'NoneType' and 'str'啊

  • 写回答

1条回答 默认 最新

  • 文盲老顾 WEB应用领新星创作者 2023-03-15 21:22
    关注

    因为你 getColor也好,getValue也好,都要用数字做参数

    import random
    
    color = ['黑桃','红桃','梅花','方片'] # 初始花色
    value = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K'] # 初始牌数
    used = {k:[] for k in color}  # 初始已发的牌
    
    def getColor():
        return random.choice([c for c in color if len(used[c]) < 13])  # 返回一个没有发满13张牌的花色
    
    def getValue(c):
        return random.choice([v for v in value if v not in used[c]]) # 在当前花色中返回一个未发放的牌数
    
    def getPuk():
        c = getColor() # 获得花色
        v = getValue(c) # 在花色中选数
        used[c].append(v) # 记录到已发放数据
        return c + v # 返回花色和牌数组合
    
    poker = [[] for _ in range(4)] # 初始化牌手 
    for i in range(52): # 发牌
        poker[i % 4].append(getPuk())
    
    for i in range(4):
        poker[i].sort()
        print(poker[i])
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月23日
  • 已采纳回答 3月15日
  • 创建了问题 3月15日

悬赏问题

  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥15 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路
  • ¥15 内网办公电脑进行向日葵
  • ¥15 如何输入双曲线的参数a然后画出双曲线?我输入处理函数加上后就没有用了,不知道怎么回事去掉后双曲线可以画出来
  • ¥50 WPF Lidgren.Network.Core2连接问题
  • ¥15 soildworks装配体的尺寸问题
  • ¥100 有偿寻云闪付SDK转URL技术
  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M