[PYTHON] Programmieranfänger (Schüler der Mittelstufe) Optimieren Sie den erstellten Algorithmus

Mathe-Puzzle

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.

K-Kun's Refactoring-Version

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

Beginnen Sie mit dem Kochen

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

Programmieranfänger (Schüler der Mittelstufe) Optimieren Sie den erstellten Algorithmus
Ich habe versucht, den Code des Python-Anfängers (Schüler der Mittelstufe) zu überarbeiten.
Ich habe versucht, den Code des Python-Anfängers (Schüler der Mittelstufe) in objektorientiertes Knuspriges umzuwandeln
Junior High School Komitee
Die Kombinationsgenerierung von Python-Anfängern (Schüler der Mittelstufe) lag diagonal darüber (Kombinationsgenerierung durch rekursive Verarbeitung)
Junior High School Committee (Network X Version)
Skript von "Programmierbuch ab Grund- und Mittelschülern"
[Python] Ein Schüler der Mittelstufe implementierte Perceptron und versuchte, Iris zu klassifizieren.