2017-12-13 6 views
0

私はPythonでNim "戦略の数学ゲーム"を構築しようとしていますが、マトリックスから特定のリストから要素を削除する際に問題があります。ユーザーからゲームモードを取得してから要素を削除し始めました。 ;マトリックスPythonのリストから要素を削除するには?

def RemoveMatches(Stacks,StackNum,Matches): 
    if not_empty(Stacks[StackNum]): 
     lenStack=len(Stacks[StackNum]) 
     try: 
      val=int(Matches) 
     except ValueError: 
      print ("Wrong input,try only with numbers") 
      return False 
     if val>lenStack: 
      print "try again with smaller number" 
      return False 
     else : 
      for i in range(Matches): 
       Stacks[StackNum].pop() 
      return True 
    else: 
     print "Stack that you have chose is already empty,try other satck" 
     return False 

スタック:私がメインで構築する行列です。
StackNum:それから削除したいリストの要素です。
と一致します。:削除したい要素の数です。

def ManageGame(Stack,gameMode): 
    if gameMode=='2': 
     while(lastDot(Stack)): 
      stackNum,matchesNum=raw_input('select number of the Stack and number of Matches between 1-10. keep a space between two numbers:').split(' ') 

      check=RemoveMatches(Stack,int(stackNum),int(matchesNum)) 
      if check: 
       DrawStacks(Stack) 
      else: 
       print "try again." 

lastDot(スタック)

別の機能がありますが、 "それはStackNum /マッチを取得し、2人または1だ場合、" ユーザーの入力を制御するManageGameを呼び出した関数いますマトリックスが1ドット以上あるかどうかを確認してください。
から:

enter image description here

私はStackNum=1,Matches=2を入力し、私が取得する場合:私は、私はこのような気にいらを取得StackNumからの要素の数を削除しようとしているとき

問題です

enter image description here

どうにかして各行から2ドットを削除しますが、私のコードでは問題が見えません。

答えて

0

ラインでのリターン:

for i in range(Matches): 
    Stacks[StackNum].pop() 
    return True 

が間違った場所に位置しています。 forの後に移動する必要があります。 それ以外の場合は、最初の繰り返しの後、実行終了しません。すべての反復:

for i in range(Matches): 
    Stacks[StackNum].pop() 
return True 
+0

ここで私は間違いを犯しましたが、私はあなたの答えが見えるようにコードを書いていました。 –

0

ここにリストl=[]の問題は、ここで私は自分の行列を構築する方法:ポインタと

l=[] 
tmp=[] 
for i in range(10): 
    l.append('*') 
for i in range(5): 
    tmp.append(l) 

Pythonの作品をだから私はtmpのための同じポインタを追加している、私はそれらのいずれかの変更を同じになる残りの部分を変更します。私はそれを解決した方法をここで

for i in range(5): 
    tmp.append(10) 

私はマッチを引く要素数をポップにしたい

関連する問題