鱼C论坛

 找回密码
 立即注册
查看: 956|回复: 8

[作品展示] 用python 学做24点游戏文字版,每次玩10题,每题等10秒出答案

[复制链接]
发表于 2023-7-13 20:49:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 xyyzzjw 于 2023-7-13 20:53 编辑

import random,time


def getResult(a, b, oper):
    if oper == '+':
        return a + b
    if oper == '-':
        return a - b
    elif oper == '*':
        return a * b
    elif oper == '/':
        return a / b



def express1(question, oper1, oper2, oper3):
    """计算((A_B)_C)_D的式"""
    r1 = getResult(question[0], question[1], oper1)
    r2 = getResult(r1, question[2], oper2)
    r3 = getResult(r2, question[3], oper3)
    return r3


def express2(question, oper1, oper2, oper3):
    """'计算(A_(B_C))_D的形式"""
    r1 = getResult(question[1], question[2], oper2)
    r2 = getResult(question[0], r1, oper1)
    r3 = getResult(r2, question[3], oper3)
    return r3


def express3(question, oper1, oper2, oper3):
    """计算A_(B_C)_D)的形式"""
    r1 = getResult(question[1], question[2], oper2)
    r2 = getResult(r1, question[3], oper3)
    r3 = getResult(question[0], r2, oper1)
    return r3


def express4(question, oper1, oper2, oper3):
    """计算A_(B_(C_D))的形式"""
    r1 = getResult(question[2], question[3], oper3)
    r2 = getResult(question[1], r1, oper2)
    r3 = getResult(question[0], r2, oper1)
    return r3


def express5(question, oper1, oper2, oper3):
    """计算(A_B)_(C_D)的形式:"""
    r1 = getResult(question[0], question[1], oper1)
    r2 = getResult(question[2], question[3], oper3)
    r3 = getResult(r1, r2, oper2)
    return r3


def getsolution(quetion):
    """4个操作数,则有3个操作符,进行全遍历求解"""
    global haveQuestion, display
    oper = ['+', '-', '*', '/']
    for i in range(4):
        for j in range(4):
            for k in range(4):
                if express1(quetion, oper[i], oper[j], oper[k]) == 24:
                    if display:
                        print("((%d%c%d)%c%d)%c%d" % (
                            quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
                    haveQuestion = True
                if express2(quetion, oper[i], oper[j], oper[k]) == 24:
                    if display:
                        print("(%d%c(%d%c%d))%c%d" % (
                            quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
                    haveQuestion = True
                if express3(quetion, oper[i], oper[j], oper[k]) == 24:
                    if display:
                        print("%d%c((%d%c%d)%c%d)" % (
                            quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
                    haveQuestion = True
                if express4(quetion, oper[i], oper[j], oper[k]) == 24:
                    if display:
                        print("%d%c(%d%c(%d%c%d))" % (
                            quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
                    haveQuestion = True
                if express5(quetion, oper[i], oper[j], oper[k]) == 24:
                    if display:
                        print("(%d%c%d)%c(%d%c%d)" % (
                            quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
                    haveQuestion = True

haveQuestion=0
display = 0
num=10
for m in range(num):
    while True:
        quetion = random.choices([i + 1 for i in range(12)], k=4)
        getsolution(quetion)
        if haveQuestion:
            print("——————————共%d题——————————第%d题:  %s"%(num,m+1,quetion))
            time.sleep(10)
            display = 1
            print("第%d题:计算24点的方法如下:"%(m+1))
            getsolution(quetion)
            print()
            time.sleep(1)
            haveQuestion=False
            display = 0
            break

评分

参与人数 1贡献 +3 收起 理由
python爱好者. + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-13 20:56:06 | 显示全部楼层
建议使用代码格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 21:20:50 | 显示全部楼层
本帖最后由 zhangjinxuan 于 2023-7-13 21:22 编辑

10 秒?https://fishc.com.cn/thread-217193-1-1.html

你这时间复杂度也不至于跑 10 秒吧,我 tkinter 加上最多也只需要 1 秒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-13 21:30:43 | 显示全部楼层
Ewan-Ahiouy 发表于 2023-7-13 20:56
建议使用代码格式

论坛上怎么才能用代码格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-13 21:31:59 | 显示全部楼层
zhangjinxuan 发表于 2023-7-13 21:20
10 秒?https://fishc.com.cn/thread-217193-1-1.html

你这时间复杂度也不至于跑 10 秒吧,我 tkinter  ...

用time.sleep等10秒,这时间让人思考哦。代码运行很快的哦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 21:32:52 | 显示全部楼层
xyyzzjw 发表于 2023-7-13 21:31
用time.sleep等10秒,这时间让人思考哦。代码运行很快的哦。

o
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-13 21:44:56 | 显示全部楼层
xyyzzjw 发表于 2023-7-13 21:30
论坛上怎么才能用代码格式



[code ]
论坛上怎么才能用代码格式
[/code ]
去掉空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-13 21:47:02 | 显示全部楼层
import random,time

def getResult(a, b, oper):
    if oper == '+':
        return a + b
    if oper == '-':
        return a - b
    elif oper == '*':
        return a * b
    elif oper == '/' :
        return a / b

def express1(question, oper1, oper2, oper3):
    """计算((A_B)_C)_D的式"""
    r1 = getResult(question[0], question[1], oper1)
    r2 = getResult(r1, question[2], oper2)
    r3 = getResult(r2, question[3], oper3)
    return r3


def express2(question, oper1, oper2, oper3):
    """'计算(A_(B_C))_D的形式"""
    r1 = getResult(question[1], question[2], oper2)
    r2 = getResult(question[0], r1, oper1)
    r3 = getResult(r2, question[3], oper3)
    return r3


def express3(question, oper1, oper2, oper3):
    """计算A_(B_C)_D)的形式"""
    r1 = getResult(question[1], question[2], oper2)
    r2 = getResult(r1, question[3], oper3)
    r3 = getResult(question[0], r2, oper1)
    return r3


def express4(question, oper1, oper2, oper3):
    """计算A_(B_(C_D))的形式"""
    r1 = getResult(question[2], question[3], oper3)
    r2 = getResult(question[1], r1, oper2)
    r3 = getResult(question[0], r2, oper1)
    return r3


def express5(question, oper1, oper2, oper3):
    """计算(A_B)_(C_D)的形式:"""
    r1 = getResult(question[0], question[1], oper1)
    r2 = getResult(question[2], question[3], oper3)
    r3 = getResult(r1, r2, oper2)
    return r3


def getsolution(quetion):
    """4个操作数,则有3个操作符,进行全遍历求解"""
    global haveQuestion, display
    oper = ['+', '-', '*', '/']
    for i in range(4):
        for j in range(4):
            for k in range(4):
                if express1(quetion, oper[i], oper[j], oper[k]) == 24:
                    if display:
                        print("((%d%c%d)%c%d)%c%d" % (
                            quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
                    haveQuestion = True
                if express2(quetion, oper[i], oper[j], oper[k]) == 24:
                    if display:
                        print("(%d%c(%d%c%d))%c%d" % (
                            quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
                    haveQuestion = True
                if express3(quetion, oper[i], oper[j], oper[k]) == 24:
                    if display:
                        print("%d%c((%d%c%d)%c%d)" % (
                            quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
                    haveQuestion = True
                if express4(quetion, oper[i], oper[j], oper[k]) == 24:
                    if display:
                        print("%d%c(%d%c(%d%c%d))" % (
                            quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
                    haveQuestion = True
                if express5(quetion, oper[i], oper[j], oper[k]) == 24:
                    if display:
                        print("(%d%c%d)%c(%d%c%d)" % (
                            quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
                    haveQuestion = True

haveQuestion=0
display = 0
num=10
for m in range(num):
    while True:
        quetion = random.choices([i + 1 for i in range(12)], k=4)
        getsolution(quetion)
        if haveQuestion:
            print("——————————共%d题——————————第%d题:  %s"%(num,m+1,quetion))
            time.sleep(10)
            display = 1
            print("第%d题:计算24点的方法如下:"%(m+1))
            getsolution(quetion)

            print()
            time.sleep(1)
            haveQuestion=False
            display = 0
            break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-14 07:13:21 | 显示全部楼层
xyyzzjw 发表于 2023-7-13 21:30
论坛上怎么才能用代码格式

那个<>符号
while True: print("Hello World!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 09:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表