Ir para conteúdo
Fórum Script Brasil

hkotsubo

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Tudo que hkotsubo postou

  1. Se for para substituir apenas um caractere por outro, pode usar str.maketrans para criar uma tabela de tradução, e depois use o método translate para aplicá-la à sua string: table = str.maketrans('abcdefg', 'mateus!') x = 'abcdefg' print(x.translate(table)) # mateus! Outra opção é ter um dicionário que mapeia cada caractere para o que será substituído: chars = { 'a': 'm', 'b': 'a', 'c': 't', 'd': 'e', 'e': 'u', 'f': 's', 'g': '!' } x = 'abcdefg' # se existe no dicionário chars, substitui; senão, mantém o mesmo caractere print("".join([chars[c] if c in chars else c for c in x])) # outra opção: print("".join([chars.get(c, c) for c in x])) # chars.get(c, c) retorna a substituição, caso exista, ou o próprio caractere caso não exista no dicionário
  2. Pra que essa complicação toda? Use um while e pronto: while True: # faz tudo que você quer aqui (escolha 3 números, etc) resp = input('\nDo you want to restart the program? [y/n] > ') if resp == 'n': break # não quer continuar, sai do while Repare também que não precisa fazer str("y"), pois um texto entre aspas já é uma string (no caso acima eu usei 'n', já que ele interrompe o loop se digitar "n" - se digitar "y", ele simplesmente continua o loop). Não tem necessidade nenhuma de usar os.execl (isso executa um novo programa, mas pra que isso, se com o while dá pra continuar no mesmo programa?) --- Só pra constar, se digitar qualquer coisa que não seja "n", ele também continua o loop. Se quiser ser mais restrito ainda e validar, poderia ser algo assim: def quer_continuar(): while True: resp = input('\nDo you want to restart the program? [y/n] > ') if resp in ('y', 'n'): # se é uma das opções válidas, retorna return resp else: # opção inválida print('Type only "y" or "n"') while True: # faz tudo que você quer aqui (escolha 3 números, etc) if quer_continuar() == 'n': break # não quer continuar, sai do while
  3. O tópico é antigo, mas acho que dá pra incrementar/melhorar um pouco... Repare que o cálculo segue uma sequência lógica: pega o total de segundos e divide por 86400 (a quantidade de segundos em um dia), o resultado (descontando as casas decimais) é o total de dias pega o resto da divisão por 86400, assim tem-se a "sobra" (a quantidade de segundos que não é suficiente para completar um dia) depois divide esse resultado por 3600 (a quantidade de segundos em uma hora), o resultado (descontando as casas decimais) é o total de horas pega o resto da divisão por 3600, assim tem-se a "sobra" (a quantidade de segundos que não é suficiente para completar uma hora) depois divide esse resultado por 60 (a quantidade de segundos em um minuto), o resultado (descontando as casas decimais) é o total de minutos pega o resto da divisão por 60, assim tem-se a "sobra" (a quantidade de segundos que não é suficiente para completar um minuto) A princípio daria para usar divmod, que já retorna ao mesmo tempo o resultado da divisão (sem as casas decimais) e o resto: segundos = int(input('quantidade total de segundos:')) dias, segundos = divmod(segundos, 86400) horas, segundos = divmod(segundos, 3600) minutos, segundos = divmod(segundos, 60) print(f'{dias} dias, {horas} horas, {minutos} minutos e {segundos} segundos') Mas se quiser generalizar, podemos usar um dicionário contendo as unidades que queremos extrair: tempo_total = 32456876 unidades = { 'dias': 86400, 'horas': 3600, 'minutos': 60, 'segundos': 1 } # inicializa todas as unidades com zero resultado = dict.fromkeys(unidades.keys(), 0) for unidade, qtd in unidades.items(): if tempo_total == 0: break # se já zerou, não precisa continuar resultado[unidade], tempo_total = divmod(tempo_total, qtd) # 375 dias, 15 horas, 47 minutos, 56 segundos print(', '.join(f'{qtd} {unidade}' for unidade, qtd in resultado.items())) A partir do Python 3.7 é garantido que as chaves de um dicionário estão na ordem em que foram inseridas, então as unidades já estarão na ordem correta. Assim fica mais flexível, pois bastaria alterar o dicionário de unidades para obter resultados diferentes. Por exemplo, se eu quisesse também o total de semanas, bastaria mudar para: unidades = { 'semanas': 86400 * 7, 'dias': 86400, 'horas': 3600, 'minutos': 60, 'segundos': 1 } E o resultado seria: "53 semanas, 4 dias, 15 horas, 47 minutos, 56 segundos". Ou ainda, se o tempo_total fosse a quantidade de milissegundos, bastaria trocar para: # agora é a quantidade de milissegundos tempo_total = 32456876294 unidades = { 'semanas': 86400000 * 7, 'dias': 86400000, 'horas': 3600000, 'minutos': 60000, 'segundos': 1000, 'milissegundos': 1 } # O resto do código é igual... # A saída é: # 53 semanas, 4 dias, 15 horas, 47 minutos, 56 segundos, 294 milissegundos
×
×
  • Criar Novo...