2016-10-26 4 views
0

Я пытаюсь реализовать свой собственный метод strip в Python, поэтому без использования встроенного метода я хотел бы, чтобы моя функция удаляла все пробелы слева и справа.реализовать мой собственный метод полосы в Python

Здесь я пытаюсь создать список, удалить весь пустой символ перед первым непространственным символом, затем сделать это обратным образом, в конце концов вернуть список в строку. Но с тем, что я написал, он даже не удаляет пробелы.

Я знаю, что я пытаюсь сделать, возможно, даже не работает, поэтому я также хотел бы увидеть лучший способ сделать это. Я действительно новичок в программировании, поэтому я бы взял любую рекомендацию, которая улучшит мою программу. Благодаря!

# main function 
inputString = input("Enter here: ") 
print(my_strip(inputString)) 

def my_strip(inputString): 
    newString = [] 
    for ch in inputString: 
     newString.append(ch) 
    print(newString) 
    i = 0 
    while i < len(newString): 
     if i == " ": 
      del newString[i] 
     elif i != " ": 
      return newString 
     i += 1 
    print(newString) 
+3

вы тестируете 'i', который не может быть равен пустой строке. – HuStmpHrrr

+0

Я думаю, вы имеете в виду 'newString [i] ==" "' –

+0

Thanxxx! Вы много помогли. newString [i] == "" работает! – Yolanda

ответ

0

Вместо того чтобы делать кучу строковых операций, давайте просто получить начальную и конечные показатели в непробельных частях и вернуть кусочек строки.

def strip_2(s): 
    start = 0 
    end = -1 
    while s[start].isspace(): 
     start += 1 
    while s[end].isspace(): 
     end -= 1 
    end += 1 
    return s[start:end or None] 
+0

Незначительное примечание: Предоставление 'None' эквивалентно тому, что оно не заполняется в этой части среза. Таким образом, вы можете преобразовать 'end' из' 0' в 'None' (чтобы схватить до конца строки), чтобы нарезать до конца строки более лаконично с помощью' return s [start: end или None] '; если «конец» отрицательный, он используется, если он равен «0», вместо него используется «Нет», чтобы прорваться к концу строки. – ShadowRanger

+0

@ShadowRanger Я чувствую, что узнал больше прохладных маленьких трюков на питоне в комментариях к моим ответам, чем где-либо еще –

+0

@PatrickHaugh Спасибо! Ты дал мне много хороших намеков! – Yolanda

0

Как насчет использования регулярного выражения?

import re 

def my_strip(s): 
    return re.sub(r'\s+$', '', re.sub(r'^\s+', '', s)) 

>>> my_strip(' a c d ') 
'a c d' 
+3

Я чувствую, что пытаюсь «реализовать его сам», исключает читы, такие как регулярные выражения. Я имею в виду, конечно, вы можете это сделать, но это не очень учебное упражнение. Замечание: вы могли бы сэкономить небольшую работу, объединив в одно регулярное выражение с использованием чередования: 'return re.sub (r '^ \ s + | \ s + $', '', s)' – ShadowRanger

0

То, что вы, кажется, делают это ltrim для пространств, так как вы вернетесь из функции, когда вы получаете не-пробел. Необходимы

Некоторые изменения:

# main function 
inputString = input("Enter here: ") 
print(my_strip(inputString)) 

def my_strip(inputString): 
    newString = [] 
    for ch in inputString: 
     newString.append(ch) 
    print(newString) 
    i = 0 
    while i < len(newString): 
     if i == " ": # <== this should be newString[i] == " " 
      del newString[i] 
     elif i != " ": # <== this should be newString[i] == " " 
      return newString 
     i += 1 # <== this is not needed as the char is deleted, so the next char has the same index 
    print(newString) 

Так обновленный код будет:

# main function 
inputString = input("Enter here: ") 
print(my_strip(inputString)) 

def my_strip(inputString): 
    newString = [] 
    for ch in inputString: 
     newString.append(ch) 
    print(newString) 
    i = 0 
    while i < len(newString): 
     if newString[i] == " ": 
      del newString[i] 
     elif newString[i] != " ": 
      return newString 
    print(newString) 

Успехов с остальной частью упражнения (реализация rtrim).

Смежные вопросы