Python 3 Simon表示循环字符串比较

时间:2017-10-16 03:17:30

标签: python string for-loop

我是python 3的新手,我觉得我正在以最糟糕的方式学习。一切都是通过一本名为zybooks的在线教科书。我一直试图理解for循环,对于我应该编写的程序,我必须使用for循环。

以下是说明:“Simon Says”是一种记忆游戏,其中“Simon”输出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

(然后我继续上面的循环,直到我进入[9]并打印user_score,但这也不起作用。)

我已经尝试将len(simon_pattern)与len(user_pattern)进行比较,但这只是抛出一个错误告诉我它无法执行该函数,因为我有字符串而不是整数。

我想知道是否有人可以告诉我我做错了什么或者指出了我正确的方向。因为在这一点上我不知道我做错了什么以及为什么。对不起,这真的很长,但我想尽可能彻底地解释。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

您的第二次尝试代码(for s in simon_pattern ...)的问题在于您要将s中的每个simon_patternu中的每个user_pattern进行比较。你需要关联这些(通常是一个索引),这样你只需要比较第一个,第一个,第二个和第二个等。

答案 1 :(得分:0)

您可以更轻松地使用索引:

user_score = 0
simon_pattern = 'RRGBRYYBGY'
user_pattern  = 'RRGBBRYBGY'
for i in range(len(simon_pattern)):
    if user_pattern[i] == simon_pattern[i]:
        user_score += 1
    else:
        break

答案 2 :(得分:0)

使用索引遍历每个循环,您需要一些随着每次迭代而增加的数字。您可以只使用user_score,因为它已被分配为0,并且每次迭代后都会增加1。您可能会说:“但只有匹配时才会增加!” (这是正确的)!但是如果出现不匹配的情况,您还是要冲破循环,结束游戏,这是一个完美的选择。

user_score = 0
simon_pattern = input()
user_pattern  = input()

for i in simon_pattern:
   if user_pattern[user_score] == simon_pattern[user_score]:
      user_score += 1
   else:
      break
            

print('User score:', user_score)