鱼C论坛

 找回密码
 立即注册
查看: 1835|回复: 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有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-13 20:56:06 | 显示全部楼层
建议使用代码格式
小甲鱼最新课程 -> https://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 秒
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

论坛上怎么才能用代码格式
小甲鱼最新课程 -> https://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秒,这时间让人思考哦。代码运行很快的哦。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

o
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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



[code ]
论坛上怎么才能用代码格式
[/code ]
去掉空格
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. def getResult(a, b, oper):
  3.     if oper == '+':
  4.         return a + b
  5.     if oper == '-':
  6.         return a - b
  7.     elif oper == '*':
  8.         return a * b
  9.     elif oper == '/' :
  10.         return a / b

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


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


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


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


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


  41. def getsolution(quetion):
  42.     """4个操作数,则有3个操作符,进行全遍历求解"""
  43.     global haveQuestion, display
  44.     oper = ['+', '-', '*', '/']
  45.     for i in range(4):
  46.         for j in range(4):
  47.             for k in range(4):
  48.                 if express1(quetion, oper[i], oper[j], oper[k]) == 24:
  49.                     if display:
  50.                         print("((%d%c%d)%c%d)%c%d" % (
  51.                             quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
  52.                     haveQuestion = True
  53.                 if express2(quetion, oper[i], oper[j], oper[k]) == 24:
  54.                     if display:
  55.                         print("(%d%c(%d%c%d))%c%d" % (
  56.                             quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
  57.                     haveQuestion = True
  58.                 if express3(quetion, oper[i], oper[j], oper[k]) == 24:
  59.                     if display:
  60.                         print("%d%c((%d%c%d)%c%d)" % (
  61.                             quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
  62.                     haveQuestion = True
  63.                 if express4(quetion, oper[i], oper[j], oper[k]) == 24:
  64.                     if display:
  65.                         print("%d%c(%d%c(%d%c%d))" % (
  66.                             quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
  67.                     haveQuestion = True
  68.                 if express5(quetion, oper[i], oper[j], oper[k]) == 24:
  69.                     if display:
  70.                         print("(%d%c%d)%c(%d%c%d)" % (
  71.                             quetion[0], oper[i], quetion[1], oper[j], quetion[2], oper[k], quetion[3]))
  72.                     haveQuestion = True

  73. haveQuestion=0
  74. display = 0
  75. num=10
  76. for m in range(num):
  77.     while True:
  78.         quetion = random.choices([i + 1 for i in range(12)], k=4)
  79.         getsolution(quetion)
  80.         if haveQuestion:
  81.             print("——————————共%d题——————————第%d题:  %s"%(num,m+1,quetion))
  82.             time.sleep(10)
  83.             display = 1
  84.             print("第%d题:计算24点的方法如下:"%(m+1))
  85.             getsolution(quetion)

  86.             print()
  87.             time.sleep(1)
  88.             haveQuestion=False
  89.             display = 0
  90.             break

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

那个<>符号

  1. while True: print("Hello World!")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 15:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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