как работает .isalpha и elif? (Python) - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу создать код, который печатает слова в верхнем регистре (после "G") из предложения

# [] create words after "G"
# sample quote "Wheresoever you go, go with all your heart" ~ Confucius (551 BC - 479 BC)

# Sample output:

WHERESOEVER
YOU
WITH
YOUR
HEART

вот мой код

q = input ("Quote : ")

word = ""
for a in q :
    if a.isalpha() == True :
        word = word + a
    elif word[0].lower() > "g" :
        print (word.upper())
        word = ""
    else :
        word = ""

, он работает хорошо доПоследнее слово в предложении, он не может печатать слова, хотя первая буква после «G».Кроме того, когда он обнаружил пунктуацию, он застрял и говорит

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-45-29b3e8e00230> in <module>()
      8     if a.isalpha() == True :
      9         word = word + a
---> 10     elif word[0].lower() > "g" :
     11         print (word.upper())
     12         word = ""

IndexError: string index out of range

Я подозреваю, что у него есть что-то, с .isalpha или elif

Мне нужно знать, какчтобы исправить это и где я сделал ошибки

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы столкнетесь с двумя проблемами

1) Доступ к word[0] пока это пустая строка. Выдает ошибку, когда у вас есть последовательные не алфавиты. 2) Слово печатается только тогда, когда isalpha() ложно. Здесь это просто означает, что последнее слово «СЕРДЦЕ» не будет напечатано.

Чтобы решить (1), вы можете проверить, является ли слово пустой строкой перед elif word[0].lower() > "g" :, добавив if word=="". Если это пустая строка, мы можем пропустить итерацию, решая проблему (1). Чтобы пропустить, вы можете использовать оператор continue. Что дальше? Подробное объяснение здесь. Или просто word = ""

Чтобы решить (2), вы можете сделать простой трюк, добавив пробел после кавычки q+=" " {ярлык для q=q+"", что обеспечит не алфавит в качестве последнего символа. Сделайте это сразу после ввода цитаты. Или вы можете добавить

if word[0].lower() > "g" :
    print (word.upper())

до конца. Теперь мой предложенный окончательный код будет

q = input ("Quote : ")
q+=" "
word = ""
for a in q :
    if a.isalpha() == True :
        word += a
    elif word =="":
        continue
    elif word[0].lower() > "g" :
        print (word.upper())
        word = ""
    else :
        word = ""
0 голосов
/ 20 ноября 2018

Если у вас есть два последовательных символа, которые не являются буквами (например, запятая, за которой следует пробел), тогда вы нажмете elif word[0].lower() > "g", когда word - пустая строка, поэтому в * 1003 не будет символа. *. Вот что вызывает исключение.

Проще говоря, вы можете избежать этого, проверив, что word не пусто, прежде чем пытаться получить word[0].

elif word and word[0].lower() > "g":

Это, по крайней мере, должно избежать исключения.


Но у меня все еще есть проблема с последним словом, последнее слово не печатается, хотя оно начиналось с алфавита больше, чем "G"

Вы печатаете, только когда нажимаете не алфавитный символ. Поэтому, если вы передадите слово, а затем не наберете не алфавитный символ, последнее слово не будет напечатано.

Чтобы решить эту проблему, вы можете добавить print после окончания вашего цикла, в случае, если еще осталось напечатать последнее слово.

for a in q:
    ... etc.

if word and word[0].lower() > 'g':
    print(word)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...