2017-08-07 3 views
0

Forループを使用して配列値を調べるために条件文を取得する手助けが必要です。Python GetChとForループ

私は他の2つのif文にあるように私はb'X 'を使用していないので、その印象を持っていますが、これを得るための正しい構文を理解できません。とにかくbがそこでやっていることさえ分かりません。

RとXのキーストロークはコードを正しく実行しますが、FORループの一部としてチェックされるP、N、D、およびQは実行されません。

Token = [['P',0,.01,"Penny"],['N',0,.05,"Nickel"],['D',0,.10,"Dime"],['Q',0,.25,"Quarter"]] 

def GetKey(CoinIn): # Recieve a coin, update all total counts and values 
    if CoinIn == b'R':  # Reset All Values and counts to 0 
     for i in Token: 
      i[1] = 0 
    elif CoinIn == b'X': # Exit Request 
     return('X') 
    else:     # HERE IS WHERE THE CODE BREAKS 
     for i in Token: 
      if CoinIn == i[0]: 
       i[1] += 1 

詳細については、the entire projectはGitHubのオープンソースです。

+1

「これを取得する」とはどういう意味ですか?正確に何が働いていないのですか?これがどのように機能すべきかはわかりません。 – roganjosh

+0

質問を編集します...基本的に、RとXのキーストロークは適切なコードを実行しますが、P、N、D、Qは実行しません。 – NickSentowski

+0

しかし、あなたのコードにP、N、D、Qが何もしないのはなぜですか?また、https://stackoverflow.com/questions/6269765/what-does-the-b-character-do-in-front-of-a-string-literal – roganjosh

答えて

1

あなたのコードは正確に動作すると思います。しかし、それはGetKey()への入力に依存します。

は私が一番下に以下の行を追加:

GetKey('P') 
GetKey('P') 
print(Token) 

GetKey('N') 
GetKey('D') 
print(Token) 

GetKey('Q') 
print(Token) 

そして私は、この出力ました:

[['P', 2, 0.01, 'Penny'], ['N', 0, 0.05, 'Nickel'], ['D', 0, 0.1, 'Dime'], ['Q', 0, 0.25, 'Quarter']] 
[['P', 2, 0.01, 'Penny'], ['N', 1, 0.05, 'Nickel'], ['D', 1, 0.1, 'Dime'], ['Q', 0, 0.25, 'Quarter']] 
[['P', 2, 0.01, 'Penny'], ['N', 1, 0.05, 'Nickel'], ['D', 1, 0.1, 'Dime'], ['Q', 1, 0.25, 'Quarter']] 

がいる場合、他の一方で、あなたはこのように、GetKey()にバイトではない文字列を渡すを:を:

GetKey(b'P') 
GetKey(b'P') 
print(Token) 

GetKey(b'N') 
GetKey(b'D') 
print(Token) 

GetKey(b'Q') 
print(Token) 

あなただけのこの行が繰り返し表示されます0

[['P', 0, 0.01, 'Penny'], ['N', 0, 0.05, 'Nickel'], ['D', 0, 0.1, 'Dime'], ['Q', 0, 0.25, 'Quarter']] 
Tokenのコインコードが 'P' 'N' 'D' 'Q'の文字列であるためです。

Token = [[b'P',0,.01,"Penny"],[b'N',0,.05,"Nickel"],[b'D',0,.10,"Dime"],[b'Q',0,.25,"Quarter"]] 

私は、ハードウェアなどの正当な理由は、バイトの代わりに文字列を扱うため、そこにあると仮定します。あなたはb'P' b'N' b'D' b'Q'と平等のためにそれらを比較する場合は、このように見えるTokenを変更する必要があるので、結果は、Falseになります。

+0

ありがとう、これは私がまだ試していないデバッグです。私はさらに検討します。 – NickSentowski

+0

あなたの編集は私の問題を完全に解決しました。正直言って、私は文字列の代わりにバイトを使う大きな理由があるとは思っていません...以前の問題を解決することをお勧めしました。むしろアマチュアのプログラマーとして、私は私よりも上級者でSOの誰かを信頼する傾向があり、後で私のレッスンを習うつもりです。 – NickSentowski