0

私が対処しようとしているタスクは、おそらく次のように説明するのが最適です。

  1. 立方体を考えてみましょう。各辺 (a、b、c) の長さは 1 単位です。
  2. すべての a、b、c が交差する点 (位置 0,0,0) にドットを配置します。
  3. その時のエネルギーを求めてください。
  4. 点を辺 a (位置 0.1,0,0) に沿って 0.1 単位移動します。
  5. ステップ 3 と 4 をサイド a の最後に到達するまで繰り返します (つまり、ポイント 0...1,0,0 が考慮されます)。
  6. 辺 a の始点に戻り、辺 b に沿って 0.1 のステップを実行します (位置 0,0.1,0)
  7. 辺 a と b の端に到達するまで、手順 3 ~ 6 を繰り返します (つまり、点 0...1,0...1,0 が考慮されます)。
  8. 辺 a と b の始点に戻り、辺 c に沿って 0.1 のステップを実行します (位置 0,0,0.1)。
  9. 辺 a、b、c の端に到達するまで 3 ~ 8 を繰り返します (つまり、ポイント 0...1,0...1,0...1 が考慮され、位置 1,1,1 に到達します)。

ループと関数を定義することにより、python を使用して各位置のリストを出力しようとしていますが、x=0、y=0 z=1.0 になると停止します。私のwhileループの2つが機能していないように見えます....

これまでのコードは次のとおりです。

def zcoord():
    global z
    while z<=1.0:        
        print('%.2f' % x + ' %.2f' % y + ' %.2f' % z)
        z+=0.1

def ycoord():
    global y
    while y<=1.0:
        zcoord()
        y+=0.1

def xcoord():
    global x
    while x<=1.0:
        ycoord()
        x+=0.1
x=0.0
y=0.0
z=0.0
xcoord()
4

1 に答える 1

3

ループはすべて機能していますが、関数はloop を 1 つzcoord()しか出力しません。

2 回目zcoord()が呼び出され、zまだより大きい ため1.0、ループは実行されず、印刷されません。

入れ子になったループを作成したい場合は、整数を使用して 10 で除算する方が簡単です。

for x in range(11):
    for y in range(11):
        for z in range(11):
            print('%.2f' % (x/10.0) + ' %.2f' % (y/10.0) + ' %.2f' % (z/10.0))

これは、次を使用して 1 つのループに折りたたむことができますitertools.product()

from itertools import product

for x, y, z in product(range(11), repeat=3):
    print('%.2f' % (x/10.0) + ' %.2f' % (y/10.0) + ' %.2f' % (z/10.0))
于 2013-08-19T11:46:46.903 に答える