2016-02-21 2 views
0

Я пытаюсь удалить пробелы рекурсивно в python. Я начал с базового случая пустой строки, чтобы вернуть self.phrase, предполагая, что он вернет None. Я в этом не прав? Вот код:Рекурсивно удалять пробелы в Python

class palindrome: 

    phrase = "" 

    def remove_spaces (self, phrase): 
     if self.phrase == "": 
      return self.phrase 
     if self.phrase[0] != " ": 
      return self.phrase[0] + remove_spaces (self.phrase[1:]) 

Однако UnitTest не удается:

class test_remove_spaces(unittest.TestCase): 
    def test_remove_spaces_none(self): 
     self.assertEquals (remove_spaces (None), None) 

Проблема из теста сбой происходит из-за ошибки. Не совсем понятно, почему remove_spaces недоступен. Является ли это вложенность проблемы, так как я пытался сохранить данные скрыты ?:

Error 
Traceback (most recent call last): 
    File "C:\Users\******\Dropbox\CS2\CS2_Assignment2\Assignment2.py", line 24, in test_remove_spaces_none 
    self.assertEquals(remove_spaces(None), None) 
NameError: global name 'remove_spaces' is not defined 
+3

Ненавижу быть этим человеком, но почему вы делаете это рекурсивно? Итерация через символы не является особенно питонической. Если вы не настроитесь на это рекурсивно, я бы предложил просто использовать phrase.replace ("", "") – DaveBensonPhillips

+0

@ user3697163 Я вкладываю деньги на выполнение домашних заданий. Это нормально. Но это, наверное, почему. – idjaw

ответ

1

remove_spaces является методом в вашем palindrome классе. Перед тем, как позвонить по телефону remove_spaces, вам необходимо создать экземпляр своего класса.

class test_remove_spaces(unittest.TestCase): 
    def test_remove_spaces_none(self): 
     obj = palindrome() 
     self.assertEquals (obj.remove_spaces(None), None) 

Кроме того, я бы предложил прочитать через PEP8 style-guide. Классы, как правило, следует ГорбатыйРегистр, первая буква быть в верхнем регистре, так что ваш класс может быть переименован в:

class Palindrome: 
-1

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

import re 
subject = " test " 
no_space = re.sub(r"\s+", "", subject, 0, re.IGNORECASE) 
+3

Regex кажется немного тяжеловесом для этой проблемы. Я бы предложил использовать метод str.replace, как я упоминал в оригинальной записи – DaveBensonPhillips

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