我正在尝试使用Python解决我的数学作业(您有两位数字ab
和ab+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
的输出。这不是一个好的答案,因为a
和b
必须是不同的数字,但是我还没有对该限制进行编码。更重要的是,代码应找到26;62
和其他解决方案。我如何找到所有解决方案?
我知道答案,但我也想以这种方式解决。
答案 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结束。
最重要的是,b
和a
永远都是 个数字!您已经以两位数开头。
相反,请进行两项更改:
b
循环中。如果您要这样做,请使用字符串而不是整数。
对于“ 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)
让我们看一下代码的作用。
首先,您将a
和b
都设置为10
a=10
b=10
然后,您启动一个循环,该循环将运行100次,每次运行将使a
加1
for i in range(100):
a+=1
然后,您将启动一个嵌套循环,该循环将运行100次每次外部循环运行一次,并在每个循环上递增b
。请务必注意,由于您在此循环范围之外定义了b
,因此它将继续增长。第二次外部循环运行时,b
将在110开始
您在这里需要知道的是python是一种弱类型语言。变量与分配给它们的数据具有相同的类型。 a
和b
是整数,因此您已经可以对它们执行数学运算。同样,没有理由在一处对同一变量进行两次类型转换。您应该这样编写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