加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

在Python中检查唯一输出

发布时间:2020-12-20 13:01:01 所属栏目:Python 来源:网络整理
导读:我昨天遇到了一个有趣的数学问题,并解决了,但是我写的代码,我不得不做一个键盘中断,否则它会永远运行,哈哈.因此我将其更改为具有结束条件,但现在它只打印1个解决方案并停止. 问题是这样的:“你有数字123456789,按顺序.在每个数字之间,你必须插入任何内容,加
我昨天遇到了一个有趣的数学问题,并解决了,但是我写的代码,我不得不做一个键盘中断,否则它会永远运行,哈哈.因此我将其更改为具有结束条件,但现在它只打印1个解决方案并停止.

问题是这样的:“你有数字123456789,按顺序.在每个数字之间,你必须插入任何内容,加号或乘法符号,以便结果表达式等于2002.编写一个打印所有的程序解决方案.(有两个.)“

import random


def try1(param):
    global solved
    opers = ['+','*','']
    hotpotato = ('%s'.join(param) % (random.choice(opers),random.choice(opers),)
             )
    if eval(hotpotato) == 2002:
        solved += 1
        print "Solution:",hotpotato,"= 2002     :-)"

    else:
        pass


solved = 0
while solved == 0:
    try1('123456789')

此代码打印它遇到的第一个解决方案并停止.任何人都可以告诉我如何让它在停止前打印两种解决方案吗?

解决方法

将您的解决方案存储在一组中:

solutions = set([])

每次找到解决方案时,请更新集:

solutions.append(solution)

集合很好,因为不存储重复项:

>>> len(set([1,1,1]))
1

所以只需循环直到集合的大小大于1:

while len(solved) < 2:
    try1('123456789')

此外,您可以缩短此代码:

hotpotato = ('%s'.join(param) % (random.choice(opers),)
         )

对此:

hotpotato = ('%s'.join(param) % (random.choice(opers) for i in range(8))))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读