我的Python脚本有什么问题?

时间:2018-09-06 18:39:11

标签: python python-3.x

我正在尝试使用Python解决我的数学作业(您有两位数字abab+ba=88),并且我的程序无法正常工作。

 a=10
 b=10
 for i in range(100):
      a+=1
      for i in range(100):
          b+=1
          if int(str(a+b))+int(str(b+a))==88:
               print((str(a+b))+"+"+str(b+a))

它给出44的输出。这不是一个好的答案,因为ab必须是不同的数字,但是我还没有对该限制进行编码。更重要的是,代码应找到26;62和其他解决方案。我如何找到所有解决方案? 我知道答案,但我也想以这种方式解决。

4 个答案:

答案 0 :(得分:1)

您在这里有几个逻辑问题。首先是您的循环控制。您从

开始
shortest

这将在10到10 + 100范围内运行a=10 for i in range(100): a+=1 。现在,对于a每个值,您可以执行:

a

首先,您已经更改了b=10 ... for i in range(100): b+=1 的值,外循环仍在尝试使用该值。这是第一个问题,一个正在杀死您当前程序的问题。其次,如果通过将循环索引更改为i(例如)来解决此问题,则您将j递增100 * 100倍,因此最终以10010结束。

最重要的是,ba永远都是 个数字!您已经以两位数开头。

相反,请进行两项更改:

  1. 将实际需要的值放入b循环中。
  2. 如果您要这样做,请使用字符串而不是整数。

    对于“ 0123456789”中的a:     对于“ 0123456789”中的b:         如果int(a + b)+ int(b + a)== 88:

代码生成2位数字的字符串。另一种方法是使用一位数字整数,然后使用代数生成两位数字:

for

最后,您可以通过对上述表达式进行基本代数来简化整个过程:

if (10*a + b) + (10*b + a) == 88: 

从这里开始,您只需注意(10*a + b) + (10*b + a) == 88 11*a + 11*b == 88 a + b = 8 ,就可以将程序简化为一个循环。

答案 1 :(得分:1)

如果我理解正确,您有两位数字 ab ,这样 ab + ba = 88

  

例如)对于“ ab” = 26-> 26 + 62 = 88。

如果是这种情况,这是我建议的解决方案:

for a in range(10):                          # Iterate over ten's place values [0 to 9]
    for b in range(10):                      # Iterate over one's place values [0 to 9]
        ab = str(a)+str(b)                   # Construct the string "ab"
        if (int(ab) + int(ab[::-1]) == 88):  # Test if ab + ba = 88
            print(ab + " + " + ab[::-1])     # Print the successful value of ab

逻辑是通过组合两位数字的十位和一位的可能值0到10来构造字符串 ab 。然后,测试 ab 的整数值和其反向值 ba 是否等于88。

OUTPUT:
08 + 80
17 + 71
26 + 62
35 + 53
44 + 44
53 + 35
62 + 26
71 + 17
80 + 08
  

注意:此方法使用get go中的字符串,以避免对int(str())的多次调用。

     

注意:在Python中,运算符[::-1]返回the reverse of the string。只是一个方便的把戏!

答案 2 :(得分:0)

让我们看一下代码的作用。

首先,您将ab都设置为10

a=10
b=10

然后,您启动一​​个循环,该循环将运行100次,每次运行将使a加1

for i in range(100):
    a+=1

然后,您将启动一个嵌套循环,该循环将运行100次每次外部循环运行一次,并在每个循环上递增b。请务必注意,由于您在此循环范围之外定义了b,因此它将继续增长。第二次外部循环运行时,b将在110开始

您在这里需要知道的是python是一种弱类型语言。变量与分配给它们的数据具有相同的类型。 ab是整数,因此您已经可以对它们执行数学运算。同样,没有理由在一处对同一变量进行两次类型转换。您应该这样编写if语句:

if a + b + b +a == 88:

现在检查的只是(a + b)* 2是否等于80

最后,您输出了答案,但是,对加法的可交换性做一遍,您总会显示出相同的总和+

print((str(a+b))+"+"+str(b+a))

除了清理您的if语句外,我建议您在每次外部循环运行时都要重置b。我还不清楚为什么您要实例化变量等于10,但这是您的事。

尝试一下:

a=10
for i in range(100):
     b=10
     a+=1
     for i in range(100):
         b+=1
         if a+b == 88:
              print((str(a))+"+"+str(b))

答案 3 :(得分:0)

使用此代码可了解:

a=10
b=10
for i in range(100):
    a+=1
    for i in range(100):
        b+=1
        if int(str(a+b))+int(str(b+a))==88:
            print(a)
            print(b)
            print((str(a+b))+"+"+str(b+a))
            break;

输出:

11
33
44+44

所以:

A = 11 B = 33