Es ist ein Herausforderungsrekord von 100 Sprachverarbeitungsklopfen 2015. Die Umgebung ist Ubuntu 16.04 LTS + Python 3.5.2 : : Anaconda 4.1.1 (64-Bit). Klicken Sie hier, um eine Liste der vergangenen Schläge anzuzeigen (http://qiita.com/segavvy/items/fb50ba8097d59475f760).
Brechen Sie den Satz "Hi He Lied, weil Bor Fluor nicht oxidieren konnte. Neue Nationen könnten auch die Friedenssicherheitsklausel unterzeichnen. Arthur King Can." In die Wörter 1, 5, 6, 7, 8, 9, 15, 16, Das 19. Wort ist das erste Zeichen, und die anderen Wörter sind die ersten beiden Zeichen. Erstellen.
Der fertige Code:
main.py
# coding: utf-8
num_first_only = (1, 5, 6, 7, 8, 9, 15, 16, 19)
target = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
result = {}
words = target.split(' ')
for (num, word) in enumerate(words, 1):
if num in num_first_only:
result[word[0:1]] = num
else:
result[word[0:2]] = num
print(result)
Ausführungsergebnis:
Terminal
{'K': 19, 'S': 16, 'He': 2, 'Al': 13, 'B': 5, 'Mi': 12, 'C': 6, 'O': 8, 'Li': 3, 'N': 7, 'Na': 11, 'H': 1, 'Si': 14, 'P': 15, 'Ne': 10, 'Ca': 20, 'Ar': 18, 'F': 9, 'Be': 4, 'Cl': 17}
Das? Nur Mg (Magnesium) mit der Ordnungszahl 12 ist seltsam. Es ist Mi.Nr. Das Wort an der entsprechenden Position lautet jedoch Might, sodass das Programm korrekt zu sein scheint.
Es ist praktisch, dass enumerate ()
die Startnummer angeben kann. Wenn Sie aus der Mitte eines erweiterten iterierbaren Elements aufzählen möchten, scheint der Code einfach zu sein.
Ich habe festgestellt, dass sich das Ergebnis jedes Mal ändert, wenn ich dieses Programm ausführe.
Ausführungsergebnis 2
{'B': 5, 'Al': 13, 'Be': 4, 'Cl': 17, 'P': 15, 'Si': 14, 'Ca': 20, 'Ne': 10, 'O': 8, 'K': 19, 'S': 16, 'Li': 3, 'He': 2, 'Na': 11, 'C': 6, 'Ar': 18, 'Mi': 12, 'H': 1, 'F': 9, 'N': 7}
Ausführungsergebnis 3
{'B': 5, 'He': 2, 'H': 1, 'C': 6, 'Be': 4, 'Si': 14, 'O': 8, 'F': 9, 'P': 15, 'Ca': 20, 'Al': 13, 'Ne': 10, 'Li': 3, 'K': 19, 'S': 16, 'Ar': 18, 'Cl': 17, 'Mi': 12, 'Na': 11, 'N': 7}
Ausführungsergebnis 4
{'Cl': 17, 'Si': 14, 'Al': 13, 'C': 6, 'Ca': 20, 'O': 8, 'He': 2, 'N': 7, 'F': 9, 'Ar': 18, 'Na': 11, 'Mi': 12, 'H': 1, 'P': 15, 'Be': 4, 'Ne': 10, 'Li': 3, 'B': 5, 'S': 16, 'K': 19}
Die Speicherreihenfolge im Wörterbuch ist genau die gleiche, daher ist das Verhalten sehr interessant. Ändert sich die Hash-Funktion bei jeder Ausführung? Aber für was? Oh, vielleicht ändert sich zum Zeitpunkt von "print ()" die Reihenfolge aufgrund des Einflusses der verwendeten Adresse? Abgesehen davon war ich als C-Programmierer besorgt über die interne Implementierung, da ich einen Kompromiss zwischen Leistungsabfall aufgrund von Kollision und Anstieg des Speicherverbrauchs der Hash-Tabelle aufgrund von Vermeidung hatte. Ich werde. Ich habe gehört, dass Python in C implementiert ist, daher würde ich gerne einen Blick darauf werfen, wenn ich Zeit habe. Das ist alles für den fünften Schlag. Wenn Sie Fehler haben, würde ich mich freuen, wenn Sie darauf hinweisen könnten.
Recommended Posts