2013-11-26 3 views
0

Если я тестирую «пустое» условие следующего, я получаю IndexError, который указывает, что индекс строки выходит за пределы диапазона. Почему это? Я хочу, чтобы сценарий печатался «пустым», если пользовательский ввод пуст.Python IndexError On Условное утверждение

pyg = 'ay' 

original = raw_input('Enter a word:') 
word = original.lower() 
first = word[0] 

if len(original) > 0 and original.isalpha(): 
    if first in 'aeiou': 
     print "vowel" 
     new_word = original + pyg 
     print new_word 
    else: 
     new_word = word[1:len(original)] + first + pyg 
     print new_word 
else: 
    print "empty" 

ответ

1
first = word[0] 

терпит неудачу; если word пуст, там есть нет нулевой характер. Вы можете заменить это на

first = word[:1] 

Но так как он используется только внутри if len(original) > 0 and original.isalpha(): ветви, было бы лучше, чтобы переместить его внутри, а и оставить его как first = word[0].

BTW, вместо if len(original) > 0), вы можете просто написать if original - непустые строки верны.

+0

На самом деле, вы могли бы избавиться от этого теста все вместе ... '' '.isalpha() 'возвращает' False' :) - Но, я полагаю, это не говорит о хорошем стиле последовательности правдивости проверка ... – mgilson

+0

@mgilson: oy, хороший звонок! Я никогда не помню, какие функции, в которых языки возвращаются, являются свободными, а какие нет. : ^) – DSM

+0

Я узнал несколько вещей из вашего ответа в дополнение к тому, о чем я просил. Благодаря! –

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