2017-08-07 50 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