2016-12-03 6 views
1

私は質問が非常に正確ではないことを知っています、そして、それは何が起こっているのか分かりません。私は問題を2行に絞り込んだが、私にとっては実行はむしろ変わっているようだ。私のコードが変数に間違った値を与えるのはなぜですか?

def loadmaze(backup): 
    test = createmaze(10,10) #This creates a new 10x10 matrix 
    maze = placewalls(test, "x") #The X is a string with wall positions 
    if maze != test: 
    #when placewalls executed correctly, and returned a maze different from the original 
     showmaze(maze) #simply printing maze to console 
    else: 
     return backup #so nothing changes, looks as if function never happened 
    return maze,10,10 
    # this returns the new maze, with walls, and the dimensions of the new maze 
def placewalls(amaze,positions): 
    #placing walls, definitely correct 
    return amaze-with-walls 

明らかに私は変数名を変更しているので、私が何をしているのかは明らかです。 問題は、私が関数loadmaze(maze)を呼び出すと、決して壁がある迷路を返しません。何らかの形で、testmazeの値は常に同じです。私は壁がある迷路が壁を持たないtestの後にmazeに割り当てられているので、これがどのようになるか分かりません。 デバッグによれば、testには、3行目が実行された後の壁が含まれています。 助けてください、私はひどく混乱しています。

+2

実際の 'placewalls'コードを表示する必要があります。明らかに "somethinggoeswrong"は真であるため、最初の引数を返します。 –

+0

私はsomethinggoeswrongが偽であることを確信しています、そして、実際には壁を含む正しい迷路を返しています。バックアップには壁がないことに注意してください。 – Wh1spr

+1

@ダニエルによって既に述べたように、何が間違っているかを実際に言うにはあまりにも小さなコードです。しかし、Pythonがどのように変数を(そしてどの変数が)渡すのか混乱しているかもしれませんか? 'maze'と' test'は同じオブジェクトであるかもしれませんが、現在は壁だけです。たとえば、[Python FAQ](https://docs.python.org/3/faq/programming.html#why-did-changing-list-y-also-change-list-x)を参照してください。 – stephan

答えて

1

@stephanによると、変数testmazeはメモリ内の同じオブジェクトを参照しています。そこでmaze = placewalls(test,"x")maze = placewalls(createmaze(10,10),"x")に変更し、迷路とは異なる新しいオブジェクトを作成しました。これにより、テストと迷路が2つの異なる迷路になります。

関連する問題