Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

[Dúvida] argumento em númeral romano

Olá, Estou com dúvidas quanto ao argumento para classe Filme. Quero inserir o arqumento para que o resultado saia "Rambo III", porém devido ao argumento na classe Programa ter a função .title() para o argumento "nome", o print continua saindo "Rambo Iii".

class Programa:
    def __init__(self, nome, ano):
        self._nome = nome.title()
        self.ano = ano
        self._likes = 0
class Filme(Programa):
    def __init__(self, nome, ano, duracao):
        super().__init__(nome, ano)
        self.duracao = duracao

    def __str__(self):
        return f'{self._nome} - {self.ano} - {self.duracao} min - {self._likes}'
rmb = Filme("rambo III", 1999, 160)

Rambo Iii - 1999 - 160 min - 1


Tentei utilizar na forma de variável, mas também não funcionou.

rambo = "III".upper()
rmb = Filme("rambo "+rambo, 1999, 160)

Rambo Iii - 1999 - 160 min - 1


Desde já agradeço a atenção.

5 respostas

Oi, Rafael

Está retornando exatamente como foi pedido em "self._nome = nome.title()"

O método "title()" retorna uma string onde o primeiro caractere de cada palavra é maiúsculo.

Olá,

Talvez não tenha me expressado direito. Minha questão é como adicionar além do title(), para o arqumento "nome", uma forma de garantir que números romanos saiam em caractere maiúsculo.

Exemplo: Rambo Iii - Os dois ultimos algarimos romanos saem minúsculo, ficando somente cada letra de inicio das strings em maiúsculo.

Como eu quero que o print saia: Rambo III - Neste caso, a função .title() seria aplicada somente para a string "Rambo", e para a string em algarismo romano "III", estaria aplicado uma função de saída de todos os caracteres em maiúsculo.

Conforme demonstrado, não consegui aplicar a função .upper() para obter este resultado.

Desde já agradeço a atenção.

Oi,

Eu entendi!

Vc conseguiu aplicar "upper()", mas depois usa o "title()"

A solução é remover o "title()" ou usar "Rambo 3"

solução!

Ou criar uma outra função só para formatar o nome


class Programa:
    def __init__(self, nome, ano):
        self._nome = self._formata_titulo(nome)
        self.ano = ano
        self._likes = 0
    
    def _formata_titulo(self, nome):
        partes = nome.split()
        retorno = partes[0] if partes[0].isupper() else partes[0].title()
        partes.pop(0)
        for parte in partes: 
            retorno += " "
            retorno += parte if parte.isupper() or len(parte) <= 3 else parte.title()
        return retorno
        
class Filme(Programa):
    def __init__(self, nome, ano, duracao):
        super().__init__(nome, ano)
        self.duracao = duracao

    def __str__(self):
        return f'{self._nome} - {self.ano} - {self.duracao} min - {self._likes}'
        
rmb = Filme("rambo III", 1999, 160)

print(rmb)

Obrigado pelo retorno. Vou tentar aplicar os exemplos, apesar de fugir do exercício proposto no curso.