Python GetCh vs For Loop

时间:2017-08-07 19:05:36

标签: python for-loop getch

我需要帮助让我的条件语句使用For循环来查看数组值。

我的印象是因为我没有使用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

有关更多上下文,fiddle #2在GitHub上是开源的。

1 个答案:

答案 0 :(得分: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"]]

我认为有一个很好的理由,比如硬件,用于处理字节而不是字符串。