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

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日

悬赏问题

  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等