有什么方法可以算出总数吗?

2024-09-24 22:23:51 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的第一篇文章,我会尽量详细。你知道吗

我正在重新创建游戏“策划者”,但是没有使用颜色,而是使用了字母。 颜色“红”是“R”,“黄”是“Y”等等。。。你知道吗

我必须检查错误,当用户输入错误时,输出应该是guess = input("Error, try again: ")。你知道吗

任何错误都不能算作一次尝试。总共有8次尝试。我必须检查其他的东西,但我已经完成了这部分。你知道吗

以下是我遇到问题的代码:

if len(guess) == 4 and (guess.upper().count("R") + guess.upper().count("Y") + guess.upper().count("B") +\
    guess.upper().count("G") + guess.upper().count("W") + guess.upper().count("O") == 4):

对于颜色RGYBWO,如果用户输入例如:RYGW,我可以把它加起来==4吗?你知道吗

更简单地说,我可以检查每个字母是否存在,然后将它们加起来等于4吗?你知道吗

如果没有,我将张贴完整的代码。你知道吗


Tags: 代码用户游戏input颜色count错误字母
3条回答

使用内置的sum

uppercase_guess = guess.upper() #no need to call it every time.
if sum(uppercase_guess.count(i) for i in "RGYBWO") == 4:
    ...

尽管要检查每个字符是否都是这些字符中的一个,但可以更清楚地执行以下操作:

if ( all((i in "RGYBWO") for i in guess.upper())
    and len(guess) == 4):
    ...

试试这个:

因为红色实际上可能是“R”或“R”代码。你知道吗

allowed = 'RrGgBbYyOoWw' # So, now you accept either case and drop `.upper()`

if len(guess) == 4 and sum([guess.count(i) for i in allowed]):

你的措辞不是100%清楚,但我想你是在问你是否能更有效地检查输入的内容。有几种方法比你现在所拥有的更短、更灵活。你知道吗

您需要检查输入的长度是否为4,并且不包含非法字符。您的代码在功能上是可以做到这一点的,但不是非常维护友好。检查len(guess) == 4对于第一部分来说是完美的。第二个在this question中有大约六个解。以下是前三名的总结:

  1. # Initialize this at module level
    allowed = set('rgbyow')
    # This is the check:
    if len(guess) == 4 and set(guess.lower()) < allowed:
        # OK
    
  2. # Initialize this at module level
    allowed = set('rgbyow')
    # This is the check:
    if len(guess) == 4 and all(c in allowed for c in guess.lower()):
        # OK
    
  3. # Initialize this at module level
    import re
    allowed_expr = re.compile('[rgbyowRGBYOW]{4}')
    # This is the check:
    if allowed_expr.match(guess):
        # OK
    

相关问题 更多 >