Mr. K studiert Python [Mathe-Puzzle](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 & hvrand = 6299120 & hvlocint = & hvlocphy = 100009242 & hvtargid = pla-526233948639 & psc = 1 & th = 1 & psc = 1) Bringen Sie es und versuchen Sie es. Ich sagte.
Das Problem besteht darin, den Mindestwert von 10 oder mehr in der Anzahl der Zyklen (eine Zahl wie 12321) in einer beliebigen Dezimal-, Binär- und Oktalzahl zu finden.
Bitte finden Sie heraus, wohin Sie gehen können.
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)
Ich suche nach der richtigen Antwort, also ist es ein guter Job.
Überprüfen Sie statt eines Durchgangs zuerst die Anzahl der Dezimalsätze bis zu 1000 und dann, ob die Anzahl der gefundenen Sätze oktal oder binär ist. Ich glaube, ich habe es geschafft, indem ich verschiedene Gedanken und Fehler gemacht habe.
Aber K-kun, der erkannte, dass er es mit einem Durchgang schaffen konnte, reparierte es.
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
Dies ist ein ziemlich unkomplizierter Ablauf
Es gibt verschiedene Möglichkeiten, in binäre oder oktale Zeichenfolgen zu konvertieren, und ich denke, dass Ks Methode in Ordnung ist, aber ich habe sie in "{: o}" .format (number) "geändert. Ich denke nicht, dass dies das Niveau ist, auf dem die Methode besser ist.
Das Geheimnisvollste ist der Rückgabewert der Prüffunktion. Wenn es sich um eine Funktion handelt, die einfach überprüft, ob sie so oft vorhanden ist, ist es meiner Meinung nach besser, True / False zurückzugeben.
Die Überreste von "umgekehrt" (str (num)) ", die versuchten, die Zeichen in umgekehrter Reihenfolge zu finden, obwohl es sich um eine Rezitation handelte. Daher brauchen Sie das nicht, oder?
Ich habe versucht, diesen Treffer zu beheben.
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
Das Programm, das Sie kommentiert haben, war einfacher und verständlicher, daher werde ich es hinzufügen.
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