file = open('funny_file.txt', 'r')
list = []
for i in file:
list.append(int(i[:-1]))
print(len([num for num in list for i in range(100) if num == 3**i]))
The result is good but can i make it in other easier way?
3 Réponses :
Je suppose que par "carré du 3", vous voulez dire des pouvoirs de trois. p>
Il y a des choses dans votre déclaration d'impression que je vous recommanderais de réviser. Généralement, lorsque vous souhaitez atteindre un résultat particulier, il est logique de créer une fonction distincte pour celui-ci qui encapsule cette fonctionnalité. Dans ce cas, cela pourrait être une fonction qui nous dit si la saisie est une puissance de trois. En utilisant le logarithme avec la base trois, vous devriez pouvoir proposer une implémentation de cette fonction. P>
Un moyen d'optimiser le code consiste à ignorer le calcul des numéros déjà explorés avant, comme ci-dessous:
file = open('funny_file.txt', 'r')
list = []
for i in file:
list.append(int(i[:-1]))
powerof_3_nums = []
not_power_of_3 = []
for num in list:
if num in powerof_3_nums:
continue
if num in not_power_of_3:
continue
for i in range(100):
if num == 3**i:
powerof_3_nums.append(num)
print(len(powerof_3_nums))
En supposant que le plus grand exposant est maintenant, à propos de votre code. Je ne comprends pas pourquoi faites-vous Sorties: < / strong> p> ^ qui est 100 code> (à partir de votre plage (100) code>). Vous pourriez faire un calcul assez 3 ^ 100 code> = 5153775207320113331036461129765621272702107522001 code>. Maintenant, ce nombre divisé par une puissance de 3 (plus petit que ce nombre) a un rappel de 0 fort>. Donc, vous pouvez écrire: 1 code> p> 27 code> p> p> p> p> p> P> P>
Pouvez-vous s'il vous plaît fournir des échantillons d'entrée et de sortie? C'est assez peu clair maintenant.
entrée: 40 30 120 33 145 27 64 24 201 100 343 5 7 et le résultat devrait être 2
Le seul carré de 3 est 9, voulez-vous dire des pouvoirs? Dans ce cas, vous pouvez simplement appliquer à plusieurs reprises
divmod (n, 3) code> au nombre tant que le reste est 0 et que la DIV est non nulle. Si vous trouvez un reste non-zéro, ce n'est pas un pouvoir, si vous atteignez une DIV de 1, alors c'est.Cette question est probablement mieux adaptée à Examen de codes Exchange de pile .
Vous avez raison, devrait être alimentant mon erreur
Une solution plus efficace utilisera probablement
math.log (num, 3) code>.D'abord! La sortie que vous fournissez dans le commentaire ci-dessus doit être 1. La seule puissance de 3 dans cette entrée est
27 code>. De plus, pouvons-nous supposer que vous n'obtiendrez pas une puissance de 3 passages que100 code> exponent?