【问题标题】:Rerun a code until you get a specific output重新运行代码,直到获得特定的输出
【发布时间】:2014-04-13 07:46:02
【问题描述】:

我想运行一个脚本,它可以使任何数学方程为真(当然不是任何一个),并说我想解决这个数学方程a + b = c。我为 A 和 B 和 C 生成了数字,直到它生成正确的数字,比如 1 + 2 = 3。我该怎么做?

import random 

numberA = random.randrange(50,100) #the range doesn't matter it could be whatever
numberB = random.randrange(50,100)
numberC = random.randrange(50,100)

if numberA + numberB = numberC:
  print "Your equation is now true because %s + %s = %s" % (numberA, numberB, numberC) 
else:
  print "Error, retrying..." 

我有什么方法可以让 Python 立即重新运行这段代码,直到结果为真并最终打印“你的方程式是真的......”语句而无需复制/粘贴代码然后按 Enter并希望它在那个上生成正确的数字。

我不知道如何使用 while 循环来做到这一点(然后我又不太擅长使用 while 循环)所以这可能吗?

【问题讨论】:

    标签: python loops random equation


    【解决方案1】:
    import random 
    
    while True:
        numberA = random.randrange(50,100)
        numberB = random.randrange(50,100)
        numberC = random.randrange(50,100)
        if numberA + numberB == numberC: break
        print "Error, retrying..." 
    print "Your equation is now true because %s + %s = %s" % (numberA, numberB, numberC) 
    

    仅供参考如果你有一个更复杂的方程,随机找到一个解可能需要很长时间。如果没有解决方案,上面的代码会无限期地运行。

    【讨论】:

      【解决方案2】:

      是的,您可以将所有内容包装在 while True: 循环中:

      import random 
      
      while True:
        numberA = random.randrange(50, 101)
        numberB = random.randrange(50, 101)
        numberC = random.randrange(50, 101)
        if numberC == numberA + numberB:
          print 'Your equation is now true: C = %s, A = %s, B = %s' %(numberC, numberA, numberB)
          break
      

      注意:在您发布的示例中,所有变量都等于 random.randrange(50, 100) numberC 永远不会等于 numberA + numberB 因为范围不包括 100,但停止在 99。您可以增加我的示例中显示的范围为 1,或者您可以替换为 random.randint(50, 100)。 无论哪种情况,只有一种可能的解决方案:

      Your equation is now true: C = 100, A = 50, B = 50
      

      【讨论】:

        【解决方案3】:

        您可以为此使用itertools.product

        x, y = 50, 100
        for a, b, c in product(range(x, y), range(x, y), range(x, y)):
            if equation(a, b, c):
                print("Success!")
                break 
        else:
            print("Can't be solved.")
        

        这会按顺序进行,而不是随机跳来跳去,因此如果range(x, y) 中没有数字适合equation,则将转到else 的情况

        【讨论】:

          【解决方案4】:
          #!/usr/bin/python
          import random
          flag=False
          while(flag==False):
              numberA = random.randrange(1,2)
              numberB = random.randrange(1,2)
              numberC = random.randrange(1,3)
              if (numberA+numberB == numberC):
                  print str(numberA)+" "+str(numberB)+" "+str(numberC)
                  flag=True
              else:
                  print "error"
          

          【讨论】:

          • 首先应该是while not flag。其次,像这样使用flag(而不是break)不是pythonic。
          • 哦,真的! Pythonic:P
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-18
          • 2022-12-04
          相关资源
          最近更新 更多