我一直在尝试理解for循环,对于我应该写的程序,我必须使用for循环。
以下是使用说明:“西蒙说”是一个记忆游戏,其中“西蒙”输出10个字符(R,G,B,Y)的序列,用户必须重复该序列。创建一个for循环来比较两个字符串。对于每个匹配,为user_score添加一个点。如果不匹配,结束游戏。例如:以下模式产生的user_score为4:
simonPattern:R,R,G,B,R,Y,Y,B,G,Y
userPattern:R,R,G,B,B,R,Y,B,G,Y
开始时,我得到了这个:
user_score = 0
simon_pattern = 'RRGBRYYBGY'
user_pattern = 'RRGBBRYBGY'
print('User score:', user_score)
我用这段代码通过了第一个“测试”:
user_score = 0
simon_pattern = 'RRGBRYYBGY'
user_pattern = 'RRGBBRYBGY'
for simon_pattern in str(simon_pattern):
for user_pattern in str(user_pattern):
if str(simon_pattern) == str(user_pattern):
user_score += 1
continue
if str(simon_pattern) != str(user_pattern):
break
print('User score:', user_score)
问题是当它去做第二个测试时,我的输出仍然是用户得分:4而不是用户评分:7(simon_pattern和user_pattern的字符串在第二个测试中发生了变化。)
我知道我需要比较字符串中的每个元素,一次一个,然后加上+1,一旦两个元素不匹配,我的循环就需要停止。我试过:
user_score = 0
simon_pattern = 'RRGBRYYBGY'
user_pattern = 'RRGBBRYBGY'
for s in simon_pattern:
for u in user_pattern:
if simon_pattern [0] == user_pattern [0]:
user_score += 1
if simon_pattern [0] != user_pattern [0]:
break
if simon_pattern [1] == user_pattern [1]:
user_score += 1
if simon_pattern [1] != user_pattern [1]:
break
(and然后我继续上面的循环,直到我到达[9]并打印user_score,但这也不起作用。
我试过比较len(simon_pattern)和len(user_pattern),但这只会抛出一个错误,告诉我它不能执行那个函数,因为我有字符串而不是整数。
我做错了什么?有人能给我指个方向吗?
8条答案
按热度按时间628mspwn1#
你会有一个更容易的时间使用索引:
ars1skjm2#
第二个尝试代码(
for s in simon_pattern ...
)的问题是,您将simon_pattern
中的每个s
与user_pattern
中的每个u
进行了比较。您需要将这些数据关联起来(通常使用一个索引),以便只比较第一个数据与第一个数据,第二个数据与第二个数据等。iqih9akk3#
使用index遍历每个循环时,需要一些随着每次迭代而增加的数字。你可以直接使用user_score,因为它已经被赋值为0,并且在每次迭代后都会增加1。你可能会说:“但是只有在有比赛的情况下才会增加!”“(这是对的)!但是如果有不匹配的情况,你无论如何都要跳出循环,结束游戏,所以这是一个完美的游戏。
rslzwgfq4#
zkure5ic5#
如果你需要像我一样用continues和breaks来做,它会是这样的:
zlhcx6iw6#
r6l8ljro7#
上面的“最有用”的答案是错过了将导致测试失败的中断。使用下面的代码通过所有测试。正如许多人所建议的那样,使用索引是最好的选择,也可以为您提供最干净的代码。
jxct1oxe8#
这段代码运行得非常好,通过了我的zybooks作业的所有测试。