M. K étudie Python [puzzle mathématique](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3% 83% 9E% E8% 84% B3% E3% 82% 92% E9% 8D% 9B% E3% 81% 88% E3% 82% 8B% E6% 95% B0% E5% AD% A6% E3% 83% 91% E3% 82% BA% E3% 83% AB-% E3% 82% B7% E3% 83% B3% E3% 83% 97% E3% 83% AB% E3% 81% A7% E9% AB% 98 % E9% 80% 9F% E3% 81% AA% E3% 82% B3% E3% 83% BC% E3% 83% 89% E3% 81% 8C% E6% 9B% B8% E3% 81% 91% E3 % 82% 8B% E3% 82% 88% E3% 81% 86% E3% 81% AB% E3% 81% AA% E3% 82% 8B70% E5% 95% 8F-% E5% A2% 97% E4% BA% 95-% E6% 95% 8F% E5% 85% 8B / dp / 479814245X / ref = asc_df_479814245X /? Tag = jpo-22 & linkCode = df0 & hvadid = 295723231663 & hvpos = 1o1 & hvnetw = g & hvrando = 6299120 & hvlocint = & hvlocphy = 100009242 & hvtargid = pla-526233948639 & psc = 1 & th = 1 & psc = 1) Apportez-le et essayez ceci. J'ai dit.
Le problème est de trouver la valeur minimale de 10 ou plus dans le nombre de cycles (un nombre tel que 12321) dans l'un des nombres décimaux, binaires et octaux.
Veuillez découvrir où vous pouvez aller.
D = list()
E = list()
F = list()
def checker(num):
a = str(num)
b = list(reversed(a))
c = len(b)
for j in range(c//2):
if b[j] != b[-j-1]:
return None
return num
for i in range(10,1000):
d = checker(i)
if d != None:
D.append(d)
for i in D:
e = checker(str(oct(i))[2:])
if e != None:
E.append(int(e,8))
for i in E:
f = checker(str(bin(i))[2:])
if f != None:
F.append(int(f,2))
print(F)
Je cherche la bonne réponse, donc c'est un bon travail.
Au lieu d'un passage, vérifiez d'abord le nombre de phrases décimales jusqu'à 1000, puis vérifiez si le nombre de fois trouvé est octal ou binaire. Je suppose que je l'ai fait en le mettant en faisant diverses pensées et erreurs.
Mais K-kun, qui s'est rendu compte qu'il pouvait le faire en une seule passe, l'a corrigé.
number = 10
result_list = []
def checker(num):
a = list(reversed(str(num)))
for j in range(len(a)//2):
if a[j] != a[-j-1]:
return None
return num
while True:
if checker(number) != None and checker(str(oct(number))[2:]) != None and checker(str(bin(number))[2:]) != None:
result_list.append(number)
print(number)
break
else:
number += 1
C'est un flux assez simple
Il y a différentes manières de convertir en chaînes de caractères binaires ou octales, et je pense que la méthode de K est bonne, mais je l'ai changée en " {: o} ".format (nombre)
.
Je ne pense pas que ce soit le niveau de quelle méthode est la meilleure.
La chose la plus mystérieuse est la valeur de retour de la fonction checker. Si c'est une fonction qui vérifie simplement si c'est le nombre de fois, je pense qu'il vaut mieux retourner True / False.
Le reste inversé (str (num))
qui a essayé de trouver les caractères dans l'ordre inverse même s'il s'agissait d'une récitation. En conséquence, vous n'en avez pas besoin, non?
J'ai essayé de réparer ce coup.
def checker(num_str):
for j in range(len(num_str)//2):
if num_str[j] != num_str[-j-1]:
return False
return True
number = 10
while True:
if (checker(str(number)) and
checker( "{:o}".format(number)) and
checker( "{:b}".format(number))) :
print(number)
break
number += 1
Le programme que vous avez commenté était plus simple et plus facile à comprendre, je vais donc l'ajouter.
from itertools import count
def is_palindrome(text):
return text == text[::-1]
for number in count(10):
if (is_palindrome(f"{number}")
and is_palindrome(f"{number:o}")
and is_palindrome(f"{number:b}")):
print(number)
break
Recommended Posts