Python GetCh 与 For 循环
Python GetCh vs For Loop
我需要帮助让我的条件语句使用 For 循环查看数组值。
我觉得这可能是因为我没有像在其他两个 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 上开源。
我认为您的代码可以正常工作。但这取决于 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"]]
我想有一个很好的理由,比如硬件,使用字节而不是字符串。
我需要帮助让我的条件语句使用 For 循环查看数组值。
我觉得这可能是因为我没有像在其他两个 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 上开源。
我认为您的代码可以正常工作。但这取决于 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"]]
我想有一个很好的理由,比如硬件,使用字节而不是字符串。