msmsms Posted September 7, 2021 at 03:30 PM Report Share #623633 Posted September 7, 2021 at 03:30 PM Boa tarde Tenho de criar uma função para calcular o tempo que um repetidor leva a contar números inteiros de 1 até 100 000 000 (100 milhões) Tive a ideia de fazer um repetidor FOR mas não sei fazer a contagem do tempo e nem sei se é possível fazer uma estimativa sem que seja preciso fazer o repetidor ir de 1 até 100 000 000 milhões, Existe algum atalho que me permita obter o output mais cedo ou tenho mesmo de fazer o FOR de 1 até 100 000 000 e esperar? Ainda que tenha de esperar qual método do python me permite ir contando o tempo, Tenho estado a estudar a função time só que ainda não se fez luz. Segue o código que tenho feito até este momento. def calcular_tempo(): for i in range (1, 100000000): print (i) calcular_tempo() Link to comment Share on other sites More sharing options...
AshKetshup Posted September 7, 2021 at 05:20 PM Report Share #623638 Posted September 7, 2021 at 05:20 PM (edited) Boa tarde @msmsms, Consegues usar o modulo time: import time E antes de começares a contagem guardares numa variavel o tempo atual e quando terminares guardares numa outra também o tempo atual: def calcular_tempo(): inicio = time.time() for i in range(0, 100000000): print(i) fim = time.time() # Podes retornar o valor calculado e usar posteriormente: return fim - inicio # Ou então podes mostrar no ecrã: print("O tempo que demorou foi: " + (fim - inicio)) Espero ter ajudado! Fica bem. Edited September 7, 2021 at 05:27 PM by AshKetshup misspelling 1 Report Mas façam o que fizerem nunca façam: sudo apt remove python Link to comment Share on other sites More sharing options...
thoga31 Posted September 7, 2021 at 05:27 PM Report Share #623639 Posted September 7, 2021 at 05:27 PM Recomendaria não fazer o output. A operação de output tem um custo elevado em termos de desempenho e irá produzir um tempo bastante maior do que se o ciclo for percorrido sem ela. def calcular_tempo(): inicio = time.time() for i in range(0, 100000000): continue # <--- NÃO fazer output fim = time.time() # Podes returnar o valor calculado e usar posteriormente: return fim - inicio Cumprimentos. 1 Report Knowledge is free! Link to comment Share on other sites More sharing options...
Rui Carlos Posted September 7, 2021 at 05:46 PM Report Share #623640 Posted September 7, 2021 at 05:46 PM 19 minutos atrás, thoga31 disse: Recomendaria não fazer o output. A operação de output tem um custo elevado em termos de desempenho e irá produzir um tempo bastante maior do que se o ciclo for percorrido sem ela. def calcular_tempo(): inicio = time.time() for i in range(0, 100000000): continue # <--- NÃO fazer output fim = time.time() # Podes returnar o valor calculado e usar posteriormente: return fim - inicio Cumprimentos. Esperaria que o compilador fosse suficientemente inteligente para passar o ciclo à frente nesse caso (pelo menos numa linguagem como o C seria). Convém ter alguma computação rápida, mas não trivial no ciclo (algo como x = (x + i) % 2 deve ser suficiente), e no final fazer output do valor. . Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
msmsms Posted September 7, 2021 at 06:27 PM Author Report Share #623646 Posted September 7, 2021 at 06:27 PM Obrigado a todos. 1- Acham que consigo obter o tempo final em 24h com python sem fazer o print? 2 - Porquê que no final se tem de fazer a conta de (fim - inicio) e não apenas imprimir o valor de fim. o tempo não é unicamente expresso em segundos mas sim horas. minutos e segundos? quando faço: import time inicio = time.time() print(inicio) O valor que é apresentado na consola é: 1631039120.337897 Presumo que seja segundos certo? Link to comment Share on other sites More sharing options...
thoga31 Posted September 7, 2021 at 07:34 PM Report Share #623647 Posted September 7, 2021 at 07:34 PM 1 hora atrás, msmsms disse: Porquê que no final se tem de fazer a conta de (fim - inicio) e não apenas imprimir o valor de fim. Não basta saber a que horas o processo acabou para saber quanto tempo demorou. O tempo que demora é a diferença (subtração) entre a hora em que acabou (fim) e a hora em que começou (inicio). Eu agora digo-te que o meu processo acabou às 20:15:34 e pergunto-te quanto tempo demorou. Como sabes a resposta se eu não te disser quando arranquei o processo? Knowledge is free! Link to comment Share on other sites More sharing options...
thoga31 Posted September 7, 2021 at 07:37 PM Report Share #623648 Posted September 7, 2021 at 07:37 PM (edited) Esqueci-me de responder ao resto. 1 hora atrás, msmsms disse: Acham que consigo obter o tempo final em 24h com python sem fazer o print? Acabei de testar e demorou cerca de 8 segundos no meu computador (usando o cálculo proposto pelo @Rui Carlos para usar no ciclo). P.S.: Usando continue ao invés do cálculo, demorou cerca de 1 segundo e meio. O interpretador de Python não aparenta optimizar, pelo que assim simplificamos as operações Assembly realizadas ao mínimo essencial de iterar um contador. 1 hora atrás, msmsms disse: Presumo que seja segundos certo? As unidades do valor são segundos, sim. Edited September 7, 2021 at 07:45 PM by thoga31 Adição de P.S. Knowledge is free! Link to comment Share on other sites More sharing options...
AshKetshup Posted September 7, 2021 at 07:52 PM Report Share #623649 Posted September 7, 2021 at 07:52 PM (edited) Acrescentando ao que o @thoga31 disse: O que a função time.time() nos dá é o numero de segundos que passou desde o epoch (corresponde a 1 de Janeiro de 1970) foi definido por Dennis Ritchie e Ken Thompson que construiram o sistema UNIX. Para obteres o tempo que passou entre 2 momentos tens de subtrair o tempo final pelo tempo inicial. Se quiseres aprender mais sobre o epoch tens aqui o link: https://www.maketecheasier.com/what-is-epoch-time/ Edited September 7, 2021 at 07:54 PM by AshKetshup Mas façam o que fizerem nunca façam: sudo apt remove python Link to comment Share on other sites More sharing options...
msmsms Posted September 7, 2021 at 09:01 PM Author Report Share #623651 Posted September 7, 2021 at 09:01 PM Muito obrigado Aqui com o meu CPU levou 3 segundos mas acho bastante estranho que a aplicação tenha passado por 100 000 000 números em tão pouco tempo. Esperava que levasse várias horas, Link to comment Share on other sites More sharing options...
msmsms Posted September 7, 2021 at 09:09 PM Author Report Share #623652 Posted September 7, 2021 at 09:09 PM 3 horas atrás, Rui Carlos disse: Esperaria que o compilador fosse suficientemente inteligente para passar o ciclo à frente nesse caso (pelo menos numa linguagem como o C seria). Convém ter alguma computação rápida, mas não trivial no ciclo (algo como x = (x + i) % 2 deve ser suficiente), e no final fazer output do valor. . Não consegui captar bem o que é o teu valor da variável x e como essa expressão se relaciona com o tempo... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now