2017-08-07 47 views
0

我需要幫助才能讓條件語句使用For循環查看數組值。Python GetCh vs For Loop

我有一個印象,可能是因爲我沒有使用b'X,因爲我在另外兩個if語句中,但我無法弄清楚正確的語法來實現這個過程,米甚至不知道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) 

你只會看到這一行重複:

[['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'。如果你用b'P' b'N' b'D' b'Q'相等比較它們的結果將是False,所以你需要改變Token看起來像這樣:

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

我想有一個很好的理由,比如硬件,與字節的工作字符串代替。

+0

謝謝,這是一個調試,我還沒有嘗試過。我會進一步研究。 – NickSentowski

+0

您的編輯完全解決了我的問題。說實話,我不知道我有一個很好的理由來使用字節而不是字符串......我建議我解決一個早期的問題,我認爲關於區分大小寫。作爲一個非常業餘的程序員,我傾向於以比我更高的代表信任SO上的任何人,並且我會在稍後學習我的教訓。 – NickSentowski