Alguns resolveram o problema de um modo simples: percorrer a cadeia à procura do espaço em branco, que separa as palavras, para escolher o caractere seguinte. Vamos ver o código.
1.
def
acronimo_alunos(cadeia):
2.
"""Extrai o acrónimo da cadeia."""
3.
cadeia
=
cadeia.upper()
4.
acro
=
cadeia[
0
]
5.
for
i
in
range(
1
, len(cadeia)
-
1
):
6.
if
cadeia[i]
=
=
' '
:
7.
acro
=
acro
+
cadeia[i
+
1
]
8.
return
acro
E se existirem caracteres brancos no início ou no final? E se existir mais do que um espaço em branco a separar as palavras? Se testar verificará que a sua solução cai por terra. Enfim, cai por terra no caso de ser possível acontecer o descrito. Vamos admitir que sim e procurar uma nova solução.
01.
def
acronimo(cadeia):
02.
"""
03.
Constrói o acrónimo a partir de uma frase
04.
representada por uma cadeia de caracteres.
05.
"""
06.
acro
=
''
07.
inicio
=
True
08.
for
car
in
cadeia:
09.
if
car
=
=
' '
:
10.
inicio
=
True
11.
elif
inicio
=
=
True
:
12.
acro
+
=
car.upper()
13.
inicio
=
False
14.
return
acro
Existem outras soluções para o problema. A primeira que vamos mostrar introduz implicitamente conceitos que ainda não demos (no caso objectos do tipo lista, ako de tuplos mas mutáveis).
1.
def
acronimo(cadeia):
2.
acro
=
''
3.
nova_cadeia
=
cadeia.strip().split()
4.
for
pal
in
nova_cadeia:
5.
acro
+
=
pal[
0
].upper()
6.
return
acro
A última solução que vamos apresentar utiliza o conceito de ciclo variável (ciclo while) que será discutido numa das próximas aulas.
01.
def
acronimo(frase):
02.
""" Forma um acronimo a partir da frase."""
03.
frase
=
frase.upper().strip()
04.
comprimento
=
len(frase)
05.
acron
=
''
06.
posicao
=
0
07.
while
posicao < comprimento:
08.
acron
=
acron
+
frase[posicao].upper()
09.
while
(posicao < comprimento)
and
(frase[posicao] !
=
' '
):
10.
posicao
=
posicao
+
1
11.
while
(posicao < comprimento)
and
(frase[posicao]
=
=
' '
):
12.
posicao
=
posicao
+
1
13.
return
acron
Moral da História: (1) Nem sempre o que parece é! (2) Vários são os caminhos que nos levam a Roma!
Este comentário foi removido pelo autor.
ResponderEliminarO programa está correcto. Deve estar a cometer algum erro na transcrição (aliás tem um na chamada pois apenas manda fazer o print e não chama o programa,...).
EliminarO método strip() serve para tirar os espaços em branco à esquerda e à direita de uma cadeia de caracteres. Quando fazemos o split por espaços em branco então não precisa realmente de usar o strip. Se o critério de divisão for outro, então em geral (depende do problema) precisa usar primeiro o strip. Acabei por escrever um programa mais geral.