2015-12-09 2 views
0

Я вроде как нуб в питоне. Это проект, который я должен представить к полуночи. чем больше я редактирую, тем хуже получается.Мне нужна помощь, чтобы завершить мой код проверки палиндрома python

так вот мой код:

import string 

def palendrone(): 

    input = raw_input('give us some stuff and we will see if it is a palendrone:') 
    lowercase = string.lower(input) 

    new_string = '' 
    markList = [".", " ", ";", ":", "!", "?", "/", "," , "#", "@", "$", "&", ")", "(", "\", '*', '^'"] 

    for item in markList in lowercase:  
     del(item) in lowercase 

    for letter in (lowercase): 
     new_string += letter 

    backwards_string = new_string[::-1] 

    print new_string 
    print backwards_string 

    return backwards_string == new_string 

основном я нужна помощь, пытаясь избавиться от знаков препинания. Это оказалось самым трудным для меня.

Что было бы лучшим способом сделать это в подобной ситуации?

+0

В какой * конкретной * части у вас возникли проблемы? Что не так с этим кодом и как вы его исправить? Пожалуйста, отредактируйте свой вопрос, чтобы предоставить эти данные (примеры неправильного вывода будут особенно полезными). – tripleee

+1

Ваш постоянный орфографический «палиндром» отвлекает; возможно, для начала, исправить это. – tripleee

+0

palindrone легче набирать для меня (lol), и это звучит так же в моей голове, поэтому я в основном игнорировал орфографию. –

ответ

1

Вы почти находитесь. Логика, которую вы хотите, - «для каждого элемента в markList, если этот элемент существует в нижнем регистре, удалите его».

Вы сделали хорошую попытку перевести это в код, но, к сожалению, нет такого утверждения, как del(item) in lowercase, чтобы удалить вещи из строк, вам нужно заменить их чем-то другим.

Вот как вы переводите, что:

for item in markList: 
    if item in lowercase: 
     lowercase = lowercase.replace(item, '') 

Вам не нужен второй цикл вообще, вместо этого:

backward_string = lowercase[::-1] 
+0

(комментируя перевод), это сработало, но подобная попытка не удалась. когда я пошел делать это, он сказал, что мне нужно 2 вещи внутри() [извините, забыли точную формулировку], но у меня были как элемент, так и «. действительно ли имеет значение то, что вы ставили перед «.replace»? –

+0

Да, это очень важно. ''foo'.replace (' a ',' ')' ничего не делает (возвращает «foo»), в то время как '' bar'.replace (' a ',' ') 'yields" br ". – tripleee

+0

wow спасибо, это действительно помогает (серьезно) –

0

основном я нужна помощь, пытаясь избавиться от знаки препинания.

Один из способов избавиться от знаков препинания является

import re 
new_string = re.sub('[:?!/]', '', input) 
+0

Это не достаточный ответ. добавьте пояснения к своему коду, пожалуйста –

0

Пара вещей здесь:

1) Вы должны бежать \, который делается как "\\".

2) Итерация над входной строкой и отказ, если что-то приходит в markList алгоритмический лучше

import string 

def palindrome(): 

    input = raw_input('give us some stuff and we will see if it is a palendrone:') 
    lowercase = string.lower(input) 

    new_string = '' 
    markList = [".", " ", ";", ":", "!", "?", "/", "," , "#", "@", "$", "&", ")", "(", "\\", '*', '^'] 


    for letter in lowercase: 
     if letter not in markList: 
      new_string+=letter 

    backwards_string = new_string[::-1] 

    print new_string 
    print backwards_string 

    return backwards_string == new_string 

Примечание: Есть много способов, чтобы построить очищаемую строку. Один из таких способов касается ответа Антония.

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