Zuerst nehmen wir an, dass Sie eine Datei haben sample.txt
genannt mit folgendem Inhalt:
CDEF
ABC
FIJK
SCRIPT
Hier wird das Skript zu erreichen, was (glaube ich) Sie sind nach:
with open('so.txt', 'r') as file:
lines = [x.replace('\n', '') for x in file.readlines()]
print "lines: ", lines
lines.sort()
print "lines sorted: ", lines
sums = [sum([ord(letter.lower()) - 96 for letter in line]) for line in lines]
print "sums: ", sums
products = [x * (sums.index(x) + 1) for x in sums]
print "products: ", products
total = sum(products)
print "total: ", total
OUTPUT
012.351.
Die Ausgabe des obigen Code:
lines: ['CDEF', 'ABC', 'FIJK']
lines sorted: ['ABC', 'CDEF', 'FIJK']
sums: [6, 18, 36]
products: [6, 36, 108]
total: 150
ERKLÄRUNG
(1) öffnen so.txt
als schreibgeschützte Datei, und speichert es als eine Variable: file
.
with open('so.txt', 'r') as file:
(2) Nehmen Sie jede Linie in file
und alle Zeilenumbrüche entfernen und sie in eine Liste drehen.
lines = [x.replace('\n', '') for x in file.readlines()]
(3) Sortieren Sie die Liste.
lines.sort()
(4) Dies ist ein wenig schwierig, da es ein paar Dinge tut.
sums = [sum([ord(letter.lower()) - 96 for letter in line]) for line in lines]
Also, machen wir es in zwei Komponenten brechen:
sums = [<do_something_here with line> for line in lines]
Dieser Code ein list comprehension genannt wird. Es erstellt eine neue Liste mit jedem Element der lines
Liste und macht etwas. Es entspricht in etwa:
sums = []
for line in lines:
sums.append(<do_something_here with line>)
Also, mit der line
Variable (die einen String wäre), wir, dass auch als Liste und iterieren es in einer anderen Liste Verständnis behandeln:
[ord(letter.lower()) - 96 for letter in line]
Für jede letter
in der line
Zeichenfolge wandelt es es in Kleinbuchstaben um, macht es zu einer ASCII-Ordinalzahl und subtrahiert 96
, damit es mit a == 1
beginnt. Sie können eine Liste von all ASCII numbers here sehen.
Schließlich, mit einer Liste, die jetzt Zeichenfolgen in Zahlen konvertiert wird, wenden wir sum()
auf diese Liste an.
Wir haben jetzt:
[6, 18, 36]
(5) Wir nehmen diese Liste der sums
und andere Liste Verständnis geben. Dieses Mal besteht das Ziel darin, jede Zahl zu nehmen und sie mit ihrer index
zu multiplizieren. Sie können den Index eines Elements abrufen, indem Sie aufrufen. Wie folgt:
products = [x * (sums.index(x) + 1) for x in sums]
(6) Schließlich alles, was wir tun müssen, ist die Summe, die letzte Liste, die wir wieder mit der sum()
Methode.
total = sum(products)
Ich hoffe, ich habe die Frage beantwortet, die Sie wollten.
Sie brauchen keine Wörterbücher. Listen sind hier dein Freund. Und insbesondere nach "Listenverständnis" suchen. Das ist was du willst. Willkommen in der Gemeinschaft. Sind Sie auf der Suche nach dem Code, um dies zu erreichen, oder nur Vorschläge für den Anfang? –
Hallo! @Ahop. Wenn es dich nicht stört. Ich hoffe, ich kann vielleicht einen Beispielcode bekommen. Vielleicht könnte es mich umleiten. Vielen Dank! – wadestrikers