2016-12-18 4 views
5
A + B = 8 
    B + D = 8 
    A + C = 13 
    C - D = 6 

A、B、C、Dの値の見方は?Pythonでこの数学パズルを解く方法は?

私は、値が整数と正のだろうと想定し、これをしなかった:

a = range(0,14) 
    b = c = d = a 
    for i in a: 
    for x in b: 
     for y in c: 
     for z in d: 
      if (a[i] + b[x] == 8 and a[i] + c[y] == 13 and b[x] + d[z] == 8 and c[y]-d[z]==6): 
      print(a[i],b[x],c[y],d[z]) 

しかし、それは動作しません。それでも私は範囲をa = range(-100,100)に広げます。 数式を手作業で(Googleのヘルプを使用して)解いた後、私はフロートが含まれていることを知っています。 A = 3.5など

しかし、その後、Pythonでそれを解決する方法。

+1

'i in list'を実行すると、' i'はインデックスではなくリストの要素を取得します。あなたは 'a [i]'をする必要はなく、 'i'を使うだけです。 – Barmar

+1

結果が浮動する可能性がある場合は、検索するための無限の数が実際に存在するため、検索でそれを行うことはできません。あなたはそれを解決するためにロジックを使用する必要があります。 – Barmar

+2

例えば、 'A + B = 8'と' B + D = 8'は 'A == D'を意味します。 – Barmar

答えて

6

マトリックス理論を学ぶ必要はありません(少なくともこれはありません)。

>>> from sympy import * 
>>> var('A B C D') 
(A, B, C, D) 
>>> solve([A+B-8,B+D-8,A+C-13,C-D-6]) 
{B: 9/2, D: 7/2, C: 19/2, A: 7/2} 

は、ちょうどそのような形態A + B-8 = 0において+ B = 8としての各式を表現する必要があり、次いで '= 0' の部分を省略します。

+0

これは私が望んでいた答えのようなものです。開発者がPythonについて愛しているのではなく、まさに私が「ただのユーザー」であるからです。私はその輪を再構築する必要はありません!ほとんどの問題には、それを解決するライブラリがあるようです。 このアプローチは、初心者の方でも直感的であり、行列について知る必要はなく、数学では偉大である必要があります(行列は明らかにクールで印象的ですが)。ありがとう、Bill! –

+0

あなたは大歓迎です、Tset。今私はsympyのどの部分も私自身の仕事だと主張することができればと思います。しかし、私は自分自身のユーザーです。 –

8

あなたが線形代数を知っている場合、あなたはその後、numpy(帽子の先端@Griboullis)と呼ばれる自由に利用できると人気のライブラリを使用して解決するのは簡単である方程式のシステムとして質問をフレームすることができます

import numpy as np 

A = [[1, 1, 0, 0], 
    [0, 1, 0, 1], 
    [1, 0, 1, 0], 
    [0, 0, 1, -1]] 
b = [8, 8, 13, 6] 
answer = np.linalg.solve(A, b) 

このpythonソリューションの背後にある行列の数学/線形代数をリフレッシュしたい場合は、https://www.mathsisfun.com/algebra/systems-linear-equations-matrices.htmlをチェックしてください。

+1

聖なる*** ...それは私を吹き飛ばします!私は行進して行列をリフレッシュします:))) –

+0

あなたの答えをありがとう!それは私には印象的ですが、シンプルさのためにビルの答えに優先順位を付ける必要があります。ビルの答えの下で私のコメントをチェックしてください。 –

関連する問題