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'啊

因为你 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])