Вы возвращаетесь сразу после первой итерации и видите пустой результат, потому что первая строка является пустой строкой, потому что она начинается с:
'''
hello this is a test to remove anything after
Если бы вы запустили это так, вы бы увидели только первую строку.
'''hello this is a test to remove anything after
Если вы переместите отступ с возвратом 1 влево, вы увидите только последнюю строку в возврате, поскольку вы будете перезаписывать new_code=("".join(i))
на каждой итерации.
Что вы можете сделать, это создать список в функции для хранения временных результатов, а когда цикл будет завершен, верните "".join(tmp)
Если вы хотите вернуть только первую часть до #
, вы можете разделить и вернуть первый элемент с индексом 0 и добавить новую строку, чтобы сохранить отдельные строки.
code_1='''
hello this is a test to remove anything after
and to get #this letter out
def hello_world(): # this is a comment
print("Hello world!") # this is another comment
print("I # like # pound sign # .")
'''
def remove_octothorpe_and_after(code):
code_in_lines = code.splitlines()
tmp = []
for i in code_in_lines:
tmp.append(i.split("#")[0] + "\n")
return "".join(tmp)
print(remove_octothorpe_and_after(code_1))
Результат
hello this is a test to remove anything after
and to get
def hello_world():
print("Hello world!")
print("I
Демо Python