#python #python-3.x #list
Вопрос:
Я новичок в python, поэтому не уверен, что это лучший подход.
У меня есть 2 списка с одинаковым количеством значений. Я хочу сравнить значения каждого индекса из 2 списков, т. е. индекс 1 игрока 1 игроку 2, индекс 2 игрока 1 игроку 2 и так далее.
если значения индекса 1 от игрока 1 до игрока 2 совпадают, добавьте 2 балла и пропустите следующий индекс в обоих списках. Возникли проблемы с определением того, как пропустить следующий индекс, если оба значения индекса 1 совпадают. Пожалуйста, помогите.
Это мой код:
player1 = ['yes', 'deal', 'no', 'no deal', 'no', 'deal']
player2 = ['yes', 'no deal', 'yes', 'deal', 'no', 'deal']
count = 0
skip_count = 0
for i in range(len(player1)):
if player1[i] == player2[i]:
count = 2
skip_count = 0
else:
count = 1
когда я печатаю количество, оно не пропускается, как я хочу, чтобы какие-либо мысли?
Комментарии:
1. вы можете использовать
continue
для пропуска итерации. Так что да и да будут сравниваться, но сделка и никакая сделка не будут пропущены.
Ответ №1:
Вы можете использовать zip()
для создания генератора, который будет повторять два списка попарно. Когда условие выполнено, вы можете использовать next()
для создания следующей пары в итераторе, «пропуская» эту пару:
player1 = ['yes', 'deal', 'no', 'no deal', 'no', 'deal']
player2 = ['yes', 'no deal', 'yes', 'deal', 'no', 'deal']
pairs = zip(player1, player2)
count = 0
for a, b in pairs:
if a == b:
count = 2
next(pairs, None)
elif a != b:
count = 1
comp = next(pairs, True)
if 'deal' and 'deal' in comp:
count = -2
break
elif 'no deal' and 'deal' in comp:
count = -1
break
elif 'no deal' and 'no deal' in comp:
count = 0
break
else:
break
else:
break
print(count)
Комментарии:
1. Спасибо тебе, Иэн! Ваше приложение лучше всего подходило для того, чего я пытаюсь достичь. Проблема в том, что я продолжаю неправильно вычислять переменную count во 2-й части кода. Есть какие-нибудь предложения?
2. Берегись,
if 'deal' and 'deal' in comp:
это равносильноif bool('deal') and ('deal' in comp):
. Если вы хотите проверить, что comp содержит два экземпляра «сделки», вам следует попробовать другой подход.3. да, я хочу проверить, что comp содержит два экземпляра «сделки»: есть предложения? @кевин
Ответ №2:
Используйте while
петлю. Можно было бы лучше контролировать значение sentinel (или) значение итератора (переменная, управляющая входом в реализацию циклов).
player1 = ['yes', 'deal', 'no', 'no deal', 'no', 'deal']
player2 = ['yes', 'no deal', 'yes', 'deal', 'no', 'deal']
cap = len(player1)
i = 0 # sentinel
while i < cap:
if player1[i] == player2[i]:
i = 1 # handle the skip
i = 1 # handle next
''' In simpler terms
while i < cap:
if player1[i] == player2[i]:
i = 2
else :
i = 1
'''
Комментарии:
1. спасибо, но я думаю, что у меня возникли проблемы с пониманием того, где находится точка/количество, если я представляю индекс и ограничение на общую сумму. Тем не менее, спасибо вам!