Python秒は24ポイントのスクリプトコードをカウントします

ゲームのルール:4つの任意の整数(0〜13)を指定し、数学演算( "+"、 "-"、 "*"、 "/")を使用して、これら4つの数値の24を計算します。もちろん、すべての数値ができるわけではありません。 7 7 77などの24で計算されます。
アイデア:permutations()メソッドを使用して、入力された4つの整数のすべての並べ替えメソッドを取得し、ネストされたループを介して操作シンボルを取得して操作を実行します。
言うまでもなく、コードは次のとおりです。

#coding: utf-8

import sys
from itertools import permutations

num = tuple(input("\033[1;32mPlease enter 4 integers separated by spaces(Not more than 13): \033[0m").split(" "))

## 判断元组的长度来确认输入是否有误
if len(num)= 4 :
    print("\033[1;31m%s\033[0m" % "输入不正确")
    sys.exit(0)

## 下面需要进行数学算术计算,所以需要将字符串转化为int
num1, num2, num3, num4 = num
num1, num2, num3, num4 = int(num1), int(num2), int(num3), int(num4)

## 创建列表:输入的数字存放在一个列表,数字的排序方式一个列表,运算符号一个列表,一个空列表list2用来存放正确的表达式
list1 = [num1, num2, num3, num4]
ConstituteList = [element for element in permutations(list1)] # 利用permutations()方法获取四个数字所有的排序方式
symbols = ["+", "-", "*", "/"]
list2 = []  # 存放算出结果为24的排列组合的列表
flag = False

# 将每一组4个数字的排序做for循环,计算所有添加运算符号的结果
for N in ConstituteList:
    num1, num2, num3, num4 = N
    for s1 in symbols:
        for s2 in symbols:
            for s3 in symbols:
                if s1 + s2 + s3 == "+++" or s1 + s2 + s3 == "***":
                    # 最大数为13,所以只会出现两种情况不需要加括号,分别为"+", "*"
                    ArithmeticalExpressions = [ "%s %s %s %s %s %s %s" % (num1, s1, num2, s2, num3, s3, num4)]
                else:
                    ArithmeticalExpressions = ["((%s %s %s) %s %s) %s %s" % (num1, s1, num2, s2, num3, s3, num4),
                                               "(%s %s %s) %s (%s %s %s)" % (num1, s1, num2, s2, num3, s3, num4),
                                               "(%s %s (%s %s %s)) %s %s" % (num1, s1, num2, s2, num3, s3, num4),
                                               "%s %s ((%s %s %s) %s %s)" % (num1, s1, num2, s2, num3, s3, num4),
                                               "%s %s (%s %s (%s %s %s))" % (num1, s1, num2, s2, num3, s3, num4)]

                for ArithmeticalExpression in ArithmeticalExpressions:
                    try:
                        if eval(ArithmeticalExpression) == 24:
                            list2.append(ArithmeticalExpression + " = 24")
                            flag = True
                    except ZeroDivisionError:  # 0是不能作为除数的,当0为除数时会报错,所以这里需要用到异常处理
                        pass
# 利用set方法去除重复项
list3 = set(list2)

if flag == False:
    print("\033[1;31m%s\033[0m" % "无法算出24")
    sys.exit(0)

for CorrectExpression in list3:
    print(CorrectExpression)

たとえば、入力:1 5 5 5 4つの整数、出力結果は次のとおりです。
ここに画像の説明を挿入
入力7 7 8 8 4つの整数、出力結果は次のとおりです。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_44901564/article/details/106664095