Исправьте проблему с кодом Python
Напишите программу, которая выводит букву с заданным номером из каждой введённой строки. Это может использоваться, например, для конструирования аббревиатур или чтения акростихов. Если некоторые строки слишком короткие, и в них нет символа с заданным номером, то такие строки при выводе нужно просто пропускать.
Формат ввода
На первой строке вводится натуральное число — количество строк. Далее следуют сами строки. В конце вводится натуральное число — номер буквы (нумерация начинается с единицы).
Формат вывода
Буква с соответствующим номером из каждой строки; все буквы выводятся на одной и той же строке подряд.
spi = []
spi2 = []
for i in range(int(input())):
stroki = input()
spi.append(stroki)
cnt = int(input())
for elem in spi:
if not elem[cnt - 1] in spi:
continue
else:
spi2.append(elem[cnt - 1])
print("".join(spi2))
Проблема в том, что не выдает результат(думаю потому что не идет добавление в список)(см.скрин) если поменять последнюю часть кода на:
for elem in spi:
if elem[cnt - 1]:
spi2.append(elem[cnt - 1])
else:
continue
то первый тест пройдет, а второй нет(по причине что вводится 10 позиция, а ее в строке допустим нет и выдает ошибку, именно поэтому я делаю сначала проверку на отсутствие определенной позиции в элементе)
что нужно исправить, чтобы программа работала? и стоит ли лучше использовать сначала проверку на отсутствие позиции в элементе?
Ответы (2 шт):
А вы что собственно проверяете в этой строке:
if not elem[cnt - 1] in spi:
continue
Вы проверяете наличие буквы в списке слов. Это явно неправильное что-то.
Правильная проверка на то, что номер буквы не выходит за границу слова тут будет такая (хотя +/- могу ошибаться на одну позицию, надо проверять):
if cnt > len(elem):
continue
можно и немного покороче (чтобы ничего лишнего):
data = [input() for _ in range(int(input()))]
pos = int(input())
for text in data:
if pos <= len(text):
print(text[pos - 1], end='')
или даже так, если извращаться:
data, pos = [input() for _ in range(int(input()))], int(input())
[print(text[pos - 1], end='') for text in data if pos <= len(text)]
для вывода можно использовать и список, но без join:
data = [input() for _ in range(int(input()))]
pos = int(input())
print(*map(lambda text: text[pos - 1] if pos <= len(text) else '', data), sep='')
можно сделать тоже самое, но без тернарного оператора:
data = [input() for _ in range(int(input()))]
pos = int(input())
print(*map(lambda obj: obj[pos - 1], filter(lambda text: pos <= len(text), data)), sep='')
