パロは地主の利点を活用し、隣の隣人戦っていない、ビビサイズ

ここに画像を挿入説明

気晴らし退屈な時間、それは隣の隣人を見ていると、ファラオは自宅ではなかったが、地主を果たし、これらの日、ダウンアイドル手のかゆみ。
しかし、今、私がプレイするたびに、常に隣人を邪魔するために服を着て、私のpythonでそれができないと思う彼の地主を行ってこれを行う、その後、私は隣人、ああ、いや、隣人のカードに焦点を当ててみましょうボディ。

基本的なルール

54は3〜A、2 4、1王、王のそれぞれを含む、トランプのカードで構成される。カードは、大規模で(、ジョーカー王の小文字を表し、大文字はJOKERの王を表し)で表される以下の文字列に小さいです。

図1に示すように、入力各手背の高い、対、直線(連続5枚)、3、×××(4)と1つの王であってもよいし、他の場合は存在しません。
×××すると、すべてのカードは関係なく、関係が存在するのと同じタイプの比較(例えば、3つの比較を用いて対比較、3と対)のみキングおよびカードの他のタイプと比較することができる他に2、サイン状況を削除(のような:子供がサブに分割されます)

最も低いカードサイズの直比較;図3は、一般的なルールとの大きさは、我々は通常、サブサブ、3つの比較カードサイズの理解と同じ規則×××以前のすべてのカードよりも大きく、間カードサイズ比較××× ;王は最高のカードです。

4、両手の入力と等しくは表示されません。

説明を入力します。

入力と両手間の両手は、「 - 」スペースで区切って、それぞれの接続、各カードの手、「 - 」はスペースがありません

概念

1は、最初にすべてのための顔カードとキングサイズは、王のデジタル、ブランドとサイズがデジタルに取るべき必要はありません。ここで、J、Q、K、A、2、ジョーカー、それぞれJOKER 11-17。

#  将每张J、Q、K、A、2,joker,JOKER都转换成具体的数字11-17
def replaceFlower(nums):
    nums = nums.replace('JOKER','17')
    nums = nums.replace('joker','16')
    nums = nums.replace('2','15')
    nums = nums.replace('A','14')
    nums = nums.replace('K','13')
    nums = nums.replace('Q','12')
    nums = nums.replace('J','11')
    return nums

2、int配列へデジタル変換後の便宜の数値計算、

# 如何将一个字符串数组转换成整型数组,方便最大、最小值比较
firstChange =  list(map(int,firstChange))
secondChange = list(map(int,secondChange))

図3は、か否かを判断する×××

# 判断是否是×××
def isBomb(nums):
    # 如果是4位数,并且是相同的值,那就是×××
    if len(nums) == 4 and min(nums) == max(nums):
        return True

    # 如果是2张牌,加起来是33,那就是王炸
    if len(nums) == 2 and sum(nums) == 33:
        return True
    return False

4,5桁以下、単一、対、3つ、4つ、すなわち、同じ最大値と最小値は必ずしも有効とみなすことができる; 5桁は、それが直線であるかどうかを検討します

# 判断输入的值是否正确
def isValidNums(nums):
    # 5个数字以下的,只能出单个,对子,三个,四个即最大值和最小值必然相同才能算有效
    if len(nums) > 0 and len(nums) < 5 and (max(nums) == min(nums)):
        return True
    # 5个数字的,考虑是否是顺子
    elif len(nums) == 5:
        return isContinuous(nums)

    return False

def isContinuous(nums):
    # 对数字进行排序
    nums.sort()

    for i in range(len(nums) - 1):
        # 相邻两个数之间相同,肯定不是顺子
        if nums[i] == nums[i + 1]:
            return False

        # 后一个比前一个多1,继续执行
        if nums[i + 1] == nums[i] + 1:
            continue
        else:
            return False

    return True

図5に示すように、各列の値は、2つの配列の大きさに比べて、この配列の結果を得るために合計対応します

def isContinuous(nums):
    # 对数字进行排序
    nums.sort()

    for i in range(len(nums) - 1):
        # 相邻两个数之间相同,肯定不是顺子
        if nums[i] == nums[i + 1]:
            return False

        # 后一个比前一个多1,继续执行
        if nums[i + 1] == nums[i] + 1:
            continue
        else:
            return False

    return True

図6は、最後のステップは、ロジックの大きさを比較することであるに来ました

def compareNums(firstChange, secondChange, first, second):
    if sum(firstChange) > sum(secondChange):
        print(first)
    else:
        print(second)

プロセスを通過する6つのステップを経るにあちこちまあ、まだ、少し複雑に見えます。これは、家主や隣人を築くためには、そうです、だけでなく、はるかに思いました。結局のところ、我々はチケットのお金ではありません同行することはできません

実行のサイズを比較し

上記のすべてのステップはまあ分割されている場合は、それを行うことになりました自然のアプリケーション・コードを分割することです。それは行くかどうか、×××プロセスを移動し、その比較プロセスにするかどうか、有効な入力です。

# 判断输入的两个数据是否相等,如果不等,需要判断是不是炸,否则直接输出错误
if len(firstChange) != len(secondChange):
    if isBomb(firstChange) or isBomb(secondChange):
        compareNums(firstChange, secondChange, first, second)
    else:
        print("You input is Error")

else:
    # 判断是否是合法数据
    if isValidNums(firstChange) == False:
        print("You first input is Error " + str(firstChange))

    elif isValidNums(secondChange) == False:
        print("You second input is Error " + str(secondChange))
    else:
        # 合法数据,则进行结果输出
        compareNums(firstChange, secondChange, first, second)

今、私はそれを見て、データのいくつかのセットを入力するようお願いします。例えば、2 A VSに、直3 4 5 6 7 VS 6 7 8 9 10

A A-2 2
2 2

请输入你所要出的牌,用-隔开:
3 4 5 6 7-6 7 8 9 10
6 7 8 9 10

コードの上に配置し、結果がオーバーが実行されますが、私の心はまだ隣の部屋に浮遊しています。

彼らは、自分の存在価値を感じていること、それは非常に興味深い感じがしたので、今、彼は......人を送りました。

いいえ社会的関心ない「Pythonの欄、」もっと楽しく、あなたを待って面白いのPython〜

おすすめ

転載: blog.51cto.com/miracleyoung/2426899