python-3.x Simon Says For循环字符串比较

ggazkfy8  于 2023-07-01  发布在  Python
关注(0)|答案(8)|浏览(123)

我一直在尝试理解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),但这只会抛出一个错误,告诉我它不能执行那个函数,因为我有字符串而不是整数。
我做错了什么?有人能给我指个方向吗?

628mspwn

628mspwn1#

你会有一个更容易的时间使用索引:

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
ars1skjm

ars1skjm2#

第二个尝试代码(for s in simon_pattern ...)的问题是,您将simon_pattern中的每个suser_pattern中的每个u进行了比较。您需要将这些数据关联起来(通常使用一个索引),以便只比较第一个数据与第一个数据,第二个数据与第二个数据等。

iqih9akk

iqih9akk3#

使用index遍历每个循环时,需要一些随着每次迭代而增加的数字。你可以直接使用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)
rslzwgfq

rslzwgfq4#

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

for i in range(len(simon_pattern)):    # loop for each letter in simon_pattern
    if user_pattern[i] == simon_pattern[i]:    # if user matches simon
        user_score += 1    # add 1 to the user_score
    else:    # otherwise exit the game
        break

print('User score:', user_score)    #output final score
zkure5ic

zkure5ic5#

如果你需要像我一样用continues和breaks来做,它会是这样的:

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

for i in range(len(simon_pattern)):
    if user_pattern[i] == simon_pattern[i]:
        user_score += 1
        continue
    else:
        break
print('User score:', user_score)
zlhcx6iw

zlhcx6iw6#

user_score = 0
simon_pattern = input()
user_pattern = input()
x = 0
for n in simon_pattern:
    if n == user_pattern[x]:
        x += 1
        user_score += 1
    else:
        break

print(f'User score: {user_score}')
r6l8ljro

r6l8ljro7#

上面的“最有用”的答案是错过了将导致测试失败的中断。使用下面的代码通过所有测试。正如许多人所建议的那样,使用索引是最好的选择,也可以为您提供最干净的代码。

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

print('User score:', user_score)
jxct1oxe

jxct1oxe8#

这段代码运行得非常好,通过了我的zybooks作业的所有测试。

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

for i in range(len(simon_pattern)):
    if simon_pattern[i] == user_pattern[i]:
        user_score += 1
        i += 1
    elif simon_pattern[i] != user_pattern[i]:
        break
            

print(f'User score: {user_score}')

相关问题