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

Python 有什么方法可以算出总数吗?,python,Python,这是我的第一篇文章,我会尽量详细 我正在重新创建游戏策划,但是使用了字母而不是颜色。 红色是R,黄色是Y,等等 我必须检查错误,当用户输入错误时,输出应该是guess=inputError,请重试: 任何错误都不能算作一次尝试。总共有8次尝试。我还必须检查其他东西,但我已经完成了那部分 以下是我遇到问题的代码: if len(guess) == 4 and (guess.upper().count("R") + guess.upper().count("Y") + guess.upper().c

这是我的第一篇文章,我会尽量详细

我正在重新创建游戏策划,但是使用了字母而不是颜色。 红色是R,黄色是Y,等等

我必须检查错误,当用户输入错误时,输出应该是guess=inputError,请重试:

任何错误都不能算作一次尝试。总共有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吗

如果没有,我将发布完整的代码。

使用内置的总和:

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):
    ...
使用内置的总和:

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):
    ...

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

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


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

您要检查输入的长度是否为4,并且不包含非法字符。您的代码在功能上可以做到这一点,但对维护不是很友好。检查lenguess==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]):
试试这个:

因为红色实际上可能是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]):

RRGW被认为是一个好的猜测吗?或者用户应该猜测独特的颜色?可能重复的@MadPhysician帖子肯定会对OP有所帮助,但从技术上讲,这并不是他们所要求的。@Tadhgcdonald Jensen。在试图回答这个问题之后,我意识到了这一点。那篇文章大概是问题的一半。非常接近的投票结果被彻底推翻了,物理学家,我能不能总结一下,只有当答案由整个序列组成时,才能通过这里的答案来解决,如果OP决定让用户添加破折号或空格(如果他们愿意的话),并且仍然可以正常运行,但这不能用答案完成。RRGW被认为是一个好的猜测吗?或者用户应该猜测独特的颜色?可能重复的@MadPhysician帖子肯定会对OP有所帮助,但从技术上讲,这并不是他们所要求的。@Tadhgcdonald Jensen。在试图回答这个问题之后,我意识到了这一点。那篇文章大概是问题的一半。非常接近的投票结果被彻底推翻了,物理学家,我能不能总结一下,只有当答案由整个序列组成时,才能通过这里的答案来解决,如果OP决定让用户添加破折号或空格(如果他们愿意的话),并且仍然可以正常运行,但答案在那里是无法实现的。不要忘记在all测试之前输入lenguess==4,或者它不检查长度。@ShadowRanger这是一个很好的捕获,尽管由于水平滚动条困扰我,我把它放在all之后:别忘了把lenguess==4放在all测试之前,或者它不检查长度。@ShadowRanger这是一个很好的捕获,尽管由于水平滚动条困扰我,我把它放在后面:注意:1可以使用allowed.issuepersetguess.lower更有效地完成,这可以避免创建临时集。碰巧,它看起来像是在内部创建了一个临时集,但创建它并将其丢弃到C层可能会更快,而且通过将非集合流式传输到集合之后,始终可以实现这样的集合操作。通常使用re.compile的全部目的是提前编译表达式,如果只需要一个匹配项,请使用re.match。另外,如果您正在使用re,为什么要添加guess.lower呢?为什么不只检查[rgbyowRGBYOW]{4}我不知道您可以在列表中如此巧妙地格式化代码片段。“每天学习新东西。”暗影游侠。目前,我坚持易读性,而不是优化六个字符的比较。注意:使用allowed.issuepersetguess.lower可以更有效地完成1,这可以避免crea
临时设置。碰巧,它看起来像是在内部创建了一个临时集,但创建它并将其丢弃到C层可能会更快,而且通过将非集合流式传输到集合之后,始终可以实现这样的集合操作。通常使用re.compile的全部目的是提前编译表达式,如果只需要一个匹配项,请使用re.match。另外,如果您正在使用re,为什么要添加guess.lower呢?为什么不只检查[rgbyowRGBYOW]{4}我不知道您可以在列表中如此巧妙地格式化代码片段。“每天学习新东西。”暗影游侠。目前,我坚持易读性,而不是优化六个字符的比较。你的密码没有实际使用allowed,我想你是想做sum[guess.counti For I in allowed]你的密码没有实际使用allowed,我想你是想做sum[guess.counti For I in allowed]