Alphabet nummerieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Jan163
User
Beiträge: 11
Registriert: Donnerstag 23. April 2020, 09:58

Hallo zusammen!
Ich bin auf der Suche nach einem Programm, welches mir einen Text in Zahlen umwandelt. Die Zahlen sollen der jeweiligen Nummer des Buchstaben im Alphabet entsprechen. Also nein, ich suche nicht die Befehle chr() oder ord() :wink:

Es sollte ungefähr in Python Shell so ablaufen:
Geben Sie einen Satz ein
" Hallo "
Ausgabe des Programms:
8, 1, 12, 12, 15

Kennt jemand von euch zufällig solch ein Programm? :D
LG
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Nein, also Du suchst doch `ord`.
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jan163: Wobei `ord()` hier tatsächlich nützlich sein könnte.

So ein Programm ist mir nicht bekannt, das kann man sich aber leicht selbst schreiben. Einfach eine Schleife über die Zeichenkette (in Kleinbuchstaben gewandelt), schauen ob das aktuelle Zeichen zwischen "a" und "z" liegt (inklusive beider Endpunkte) und falls ja in die entsprechende Zahl umwandeln. Die sich aus dem `ord()`-Wert berechnen lässt. Die in einer Liste sammeln, und am Ende mit ", " und der `join()`-Methode auf Zeichenketten zum Ergebnis zusammenfügen.

Der Benutzer wird ja nach einem *Satz* gefragt. Wie soll denn da beispielsweise mit Leer- und Satzzeichen umgegangen werden?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

Jan163 hat geschrieben: Montag 8. Juni 2020, 11:24 Kennt jemand von euch zufällig solch ein Programm? :D
Ja,

Code: Alles auswählen

echo -n "haLlOä" | iconv -t ascii//TRANSLIT | perl -ne 'for(split//){$_=lc;$_=(ord)-96 ." ";print}' 
8 1 12 12 15 1 5 
… … ;)
Zuletzt geändert von nezzcarth am Montag 8. Juni 2020, 12:21, insgesamt 2-mal geändert.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Du kannst aber auch umständlich ein Dictionary schreiben, bei dem jedem Buchstaben eine Zahl zugewiesen wird. Aber ich halte hier auch ord() für die bessere Wahl. Um von dem ord() Wert auf den Index im Alphabet zu kommen musst du nur 96 abziehen (bei Kleinbuchstaben).
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Eine Lösung in Hy (ein in Python implementierter Lisp-Dialekt):

Code: Alles auswählen

#!/usr/bin/env hy3

(setv LETTER-OFFSET (dec (ord "a")))

(defn letter? [character] (<= "a" character "z"))

(defn letter->number [letter] (- (ord letter) LETTER-OFFSET))

(defmain [&rest args]
  (setv sentence (-> (input "Geben Sie einen Satz ein:\n") (.lower)))
  (->> (filter letter? sentence)
       (map letter->number)
       (map str)
       (.join ", ")
       (print)))
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das ist eine Aufgabe die auch mein guter alter C64 in BASIC erledigen kann. 😎

Code: Alles auswählen

   10 O=ASC("A")-1:PRINT "GEBEN SIE EINEN SATZ EIN:":INPUT S$:N=LEN(S$)
   20 FOR I=1 TO N:C$=MID$(S$,I,1):IF C$<"A" OR C$>"Z" THEN 50
   30 IF I>1 THEN PRINT ",";
   40 PRINT STR$(ASC(C$)-O);
   50 NEXT
Testlauf:

Code: Alles auswählen

RUN
GEBEN SIE EINEN SATZ EIN:
? HALLO
 8, 1, 12, 12, 15
READY.
Edit: Bugfix.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten