Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка в python

Артём Крутяков Ученик (209), на голосовании 1 месяц назад
import typing


def checkers(iterable1: typing.Iterable, iterable2: typing.Iterable):
cool_list = []
for i in range(len(iterable1)):
if i == 0 or i % 2 == 0:
cool_list.append(iterable1[i])
else:
cool_list.append(iterable2[i])
return cool_list


def inter(b):
for i in range(len(b)):
b[i] = int(b[i])
return b


b = input().split()
b = inter(b)
c = input().split()
c = inter(c)
lazy = str(checkers(b, c))
lazy = lazy.replace(',', '')
lazy = lazy.replace('[', '')
lazy = lazy.replace(']', '')
print(lazy)


Вот это чудо в лицее яндекса выдаёт ошибку такого характера:
Traceback (most recent call last):
File "/temp/executing/run.py", line 22, in <module>
print(to_str(checkers(gen(code[0]), gen(code[1]))))
~~~~^^^
IndexError: list index out of range
make: *** [Makefile:5: run] Error 1


Вот условие задания:
Необходимо написать функцию checkers, которая на вход получает два итерируемых объекта и возвращает список, в котором элементы чередуются. То есть первый элемент равен первому элементу из первого объекта, а второй элемент равен второму из второго. Неиспользуемые элементы никуда не добавляются.

Если в одном объекте элементов недостаточно, а во втором они всё ещё есть и будут добавлены в выходную последовательность, то значения из более короткого объекта заполняются нулями.

Сигнатура функции:

def checkers(iterable1: typing.Iterable, iterable2: typing.Iterable) -> list: ...
Пример вызова:

checkers([1, 2], [3, 4])

Выдает то всё верно, плюс компилятор в онлайне работает все отлично, кароче я не понимаю где оплошал(
Подскажите, кто может, но позже полутора часов уже не нужно будет от поста этого вопроса.
Голосование за лучший ответ
Татьяна Просветленный (36390) 2 месяца назад
 import typing 
from itertools import zip_longest

def checkers(iterable1: typing.Iterable, iterable2: typing.Iterable) -> list:
return [item1 if i % 2 == 0 else item2
for i, (item1, item2) in enumerate(zip_longest(iterable1, iterable2, fillvalue=0))]

def process_input() -> list:
return [int(x) for x in input().split()]

if __name__ == "__main__":
b = process_input()
c = process_input()
result = checkers(b, c)
print(*result)
и на моем python, который установлен в моей OS этот код нормально все работает
ПапаВысший разум (144030) 2 месяца назад
len(iterable)? Хотя кого я спрашиваю...
Артём КрутяковУченик (209) 2 месяца назад
По моему вышло не совсем корректно, выдавать должно с условных [1, 2, 3], [4, 5, 6]
1 5 3

В первой же проверке вышел дубль, 1 1 2 2.

То есть при вводе:
1 2
1 2

Выводит

1 1 2 2

А должно

1 2

И старая ошибка не исчезла.
Татьяна Просветленный (36390) Артём Крутяков, код передела уже
ivan866_z Просветленный (20242) 2 месяца назад
 #!/usr/bin/python 
import typing

a = input()
a = [int(i) for i in str(a)]
b = input()
b = [int(i) for i in str(b)]

len_diff = len(a)-len(b)
if len_diff > 0:
for i in range(len_diff):
b.append(0)
elif len_diff < 0:
for i in range(abs(len_diff)):
a.append(0)

def checkers(iterable1: typing.Iterable, iterable2: typing.Iterable):
result = []
for i in range(int(len(iterable1)/2)):
result.append(iterable1.pop(0))
iterable1.pop(0)
iterable2.pop(0)
result.append(iterable2.pop(0))
return result
result = checkers(a, b)
print(''.join([str(c) for c in result]))
от себя небольшой коммент:
НИКОГДА не называй переменные внутри одного скоупа как var1, var2, ... - потом трудно найти опечатки
вместо этого пиши например lhs, rhs - что то осмысленное с уникальными последовательностями букв
Юрий Семыкин Искусственный Интеллект (205618) 2 месяца назад
 def checkers(a,b): 
res=[]
for i in range(max(len(a),len(b))):
try:
res.append(a[i])
except:
res.append(0)
try:
res.append(b[i])
except:
res.append(0)
return res
#
print(checkers('abbhx',(7,8,9)))
ivan866_zПросветленный (20242) 2 месяца назад
он хочет чтобы брался элемент a[0], b[1], a[2], b[3], ...
Юрий Семыкин Искусственный Интеллект (205618) ivan866_z, это ему так кажется, что он хочет. (Я не иронизирую, если чо.)
Юрий СемыкинИскусственный Интеллект (205618) 2 месяца назад
Наверно это то, что надо:
 def checkers(a,b):  
res=[]
сс=(a,b)
for i in range(0,max(len(a),len(b))+1,2):
for k in (0,1):
try:
res.append(сс[k][i+k])
except:
res.append(0)
return res
#
print(checkers('abbhx',(7,8,9)))
ivan866_z Просветленный (20242) Юрий Семыкин, nope если первая последовательность четной длины, то у тебя получается что два лишних нуля в конце аппендятся
Похожие вопросы