Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
24个使用Python的游戏_Python - Fatal编程技术网

24个使用Python的游戏

24个使用Python的游戏,python,Python,有一个叫做24的游戏,这是一个基于数学的游戏。如果你是新手,请阅读此链接 无论如何,这是一个游戏,你可以随机选择四个数字(在我的例子中,从1到9),然后尝试将它们组合起来(使用四个基本运算+、-、•、和÷),形成数字24。规则很简单,您必须使用所有四个数字,并且只能使用这四个数字,并且每个数字只能使用一次。这个游戏引起了我足够的兴趣,我试图制作一个程序来模拟这个游戏 我的目标是使用python创建这样的程序。基本算法是 生成4个随机数 检查它们是否等于24 向用户显示它们 查看用户的输入是否

有一个叫做24的游戏,这是一个基于数学的游戏。如果你是新手,请阅读此链接

无论如何,这是一个游戏,你可以随机选择四个数字(在我的例子中,从1到9),然后尝试将它们组合起来(使用四个基本运算+、-、•、和÷),形成数字24。规则很简单,您必须使用所有四个数字,并且只能使用这四个数字,并且每个数字只能使用一次。这个游戏引起了我足够的兴趣,我试图制作一个程序来模拟这个游戏

我的目标是使用python创建这样的程序。基本算法是

  • 生成4个随机数
  • 检查它们是否等于24
  • 向用户显示它们
  • 查看用户的输入是否也等于24
我在第2步和第4步需要最大的帮助

我将使用随机模块来决定随机整数

import random
num1 = random.randint ( 1, 9)
num2 = random.randint ( 1, 9)
num3 = random.randint ( 1, 9)
num4 = random.randint ( 1, 9)
所以,如果可以的话,请帮我创建这个游戏,并向我解释一下!谢谢

此外,这是我第一次使用堆栈溢出提问,请评论我如何提高提问技巧:)

---编辑--- 谢谢你们的帮助,但我终于明白了。我做了一些研究,并将其汇编在一起(如果你们中有人希望自己尝试代码):

>

“”
24场比赛
给定范围为1到9的任意四位数字,其中可能有重复,
仅使用+、-、*和/运算符;以及可能使用
括号,()表示如何回答24。
回答“!”将生成一组新的四位数字(如果您的卡滞)。
否则,会反复要求您输入表达式,直到其计算结果为24
注意:您不能从提供的数字中形成多个数字,
因此,当给出1、2、2和1时,12+12的答案是不允许的。
'''
来自“未来”导入部门的“打印”功能
导入随机、ast、re
导入系统
而1==1:
如果系统版本信息[0]<3:input=raw\u input
def choose4():
“四个随机数字>0作为字符”
范围(4)内i的返回[str(random.randint(1,9)]
def欢迎(数字):
打印(文档)
打印(“您的四位数:”+“”。连接(位数))
def检查(答案,数字):
允许=设置('()+-*/\t'+''.join(数字))
ok=全部(ch in允许ch in应答)和\
全部(数字。计数(挖掘)=回答。挖掘集合的计数(挖掘)(数字))\
而不是重新搜索('\d\d',答案)
如果确定:
尝试:
ast.parse(答案)
除:
ok=错误
返回ok
def main():
数字=选择4()
欢迎(数字)
试用期=0
答案=“”
chk=ans=False
而不是(chk和ans==24):
试用期+=1
回答=输入(“表达式%i:%trial”)
chk=检查(答案,数字)
如果回答.lower()
打破
如果答案=='!':
数字=选择4()
打印(“新数字:”,“”。连接(数字))
持续
如果不是chk:
打印(“输入“%s”不稳定!”%answer)
其他:
ans=评估(回答)
打印(“=”,ans)
如果ans==24:
打印(“没错!”)
main()

(python 3.3)

我爱24小时!我记得在小学时玩过

首先,让我们考虑一个给定的24轮必须评估的排列的总数。在一轮游戏中,使用四个数字和三个运算符

我们可以把数字排成4!路,正好等于24条路,哈哈

我们可以用4p3的方式安排这三个操作符(忽略加法和乘法是可交换的事实),这也恰好是4!,这也恰好是24(好吧,这开始让人毛骨悚然)

编辑:IIRC操作可以重复,因此实际上有4**3或64个“操作置换”。这使我们可以检查1560个排列,这仍然是合理的

对于四个随机数的给定选择,可能的“24个方程”的总数为24*24,等于576。幸运的是,现代个人电脑可以在几微秒内计算出576个算术方程式

在您准备576分支if else树之前,让我们以优雅的方式完成此操作

作为热身,首先编写一个函数,打印四个随机数的所有排列,将四个随机数的列表作为参数。如果你想不出谷歌的“字符串Python的排列”

然后编写一个函数,打印四个操作的所有长度3个排列(编辑:带重复),返回一个包含64个字符串的列表,即[“aaa”、“aas”、…、“amm”、“amd”、…],其中“a”代表加法,“s”代表减法,“m”代表乘法,“d”代表除法

现在,您已经准备好测试所有案例。将第一个函数的结果存储在列表Ns中,将第二个函数的结果存储在列表Ops中,然后

for ns in Ns:
    for ops in Ops:
        result = ns[0]
        result = op24(result, ops[0], ns[1])
        result = op24(result, ops[1], ns[2])
        result = op24(result, ops[3], ns[3])
        if result == 24:
            return True

    for ops in Ops:
        result1 = op24(ns[0], ops[0], ns[1])
        result2 = op24(ns[2], ops[1], ns[3])
        result = op24(result1, ops[2], result2)
        if result == 24:
            return True

# none of the permutations were equal to 24
return False
编辑:如果生成并计算前缀表达式,则可以抽象出上面内部循环之间的差异

op24函数的实现方式如下

def op24 (ns1, op, ns2):
    if op == 'a':
        return ns1 + ns2
    elif op == 's':
        return ns1 - ns2
    ...
编辑在计算时使用
float()
,用于聪明的玩家,他们会将不可等分的数字进行除法和乘法


“op24”函数可以通过使用Python的“op”模块来避免,并生成函数引用的排列,而不是“op字符串”,但由于您似乎是初学者,我将把它留给另一个问题;)

但是你有没有发现任何具体的问题?这个问题没有显示出任何努力,投票结束。欢迎来到StackOverflow!如果你展示你已经采取的步骤来尝试创建你所描述的游戏,你将从社区中获得显著更好的响应。仅仅要求某人为你创建它不会走得太远…这听起来绝对不像是一个家庭作业提示…这不是家庭作业,我只是在插话
def op24 (ns1, op, ns2):
    if op == 'a':
        return ns1 + ns2
    elif op == 's':
        return ns1 - ns2
    ...