Tracks
/
Crystal
Crystal
/
Übungen
/
Partyroboter
Partyroboter

Partyroboter

Lernübung

Einführung

Crystal hat einen Typ namens String, mit dem Text dargestellt wird. Crystal-Strings sind Folgen von Unicode-Zeichen. Strings sind unveränderlich, das heißt, sie können nach ihrer Erstellung nicht mehr geändert werden. Das bedeutet, dass bei jeder Änderung eines Strings ein neuer String erstellt wird; der ursprüngliche String bleibt also unverändert.

Um einen String zu definieren, verwendest du doppelte Anführungszeichen ".

"Hello World"

Verkettung

Um zwei Strings zu verketten, verwendest du den +-Operator. Der +-Operator gibt einen neuen String zurück, der die beiden Strings kombiniert.

hello = "Hello"
hello + " World"
# => "Hello World"

Umwandlung zwischen Strings und Zahlen

Die Methode to_i wandelt einen String in eine Ganzzahl um. Alternativ kannst du die Methode to_f verwenden, um eine Gleitkommazahl zu erhalten. Wenn sich der String nicht in eine Zahl umwandeln lässt, wird ein ArgumentError ausgelöst.

"1".to_i
# => 1

"1.0".to_f
# => 1.0

"Hello".to_i
# => ArgumentError: Invalid integer: Hello

Eine Ganzzahl oder Gleitkommazahl kannst du mit der Methode to_s in einen String umwandeln.

1.to_s
# => "1"

1.0.to_s
# => "1.0"

Interpolation

Die Interpolation ist eine praktische Möglichkeit, Strings zu kombinieren und Ausdrücke in Strings einzubetten. Um einen String zu interpolieren, verwendest du das Zeichen #, gefolgt von geschweiften Klammern {} mit dem Ausdruck in den Klammern.

name = "World"
"Hello #{name}!"
# => "Hello World!"

Crystal wandelt das Ergebnis des Ausdrucks automatisch in einen String um.

"Hello #{1 + 1}!"
# => "Hello 2!"

Größe

Wenn du die Anzahl der Zeichen in einem String wissen möchtest, kannst du die Methode size verwenden, die die Länge des Strings als Ganzzahl zurückgibt. Die Größe eines Strings ist eine gespeicherte Eigenschaft des Strings, sie muss also nicht bei jedem Aufruf der Methode neu berechnet werden, was sie sehr schnell macht.

"Hello World".size
# => 11

Indexierung

Beim Indexieren möchtest du ein bestimmtes Zeichen aus einem String erhalten. Um ein Zeichen aus einem String zu erhalten, kannst du die bekannte Notation mit eckigen Klammern verwenden.

Note

[] ist als Instanzmethode von String implementiert, wobei der Index das Argument der Methode ist.

Das erste Zeichen in einem String steht bei Crystal an Index 0.

"Hello World"[0]
# => 'H'

"Hello World"[6]
# => 'W'

Um ein Zeichen vom Ende eines Strings zu erhalten, kannst du die Länge des Strings minus eins nehmen, um den Index des letzten Zeichens zu bekommen; für das vorletzte Zeichen nimmst du die Länge des Strings minus zwei, und so weiter. Dafür gibt es eine Abkürzung: Verwende einfach einen negativen Index, bei dem das letzte Zeichen an Index -1 steht, das vorletzte an Index -2, und so weiter.

name = "Hello World"
name[name.size - 1]
# => 'd'

name[-1]
# => 'd'

Escape-Sequenzen

Manche Zeichen lassen sich nicht direkt in einem String schreiben; stattdessen musst du eine Escape-Sequenz verwenden. Wenn du zum Beispiel doppelte Anführungszeichen in einem String verwenden möchtest, musst du sie maskieren. Du kannst das Zeichen \ verwenden, um eine Escape-Sequenz zu schreiben, gefolgt von dem Zeichen, das du maskieren möchtest.

Das sind die Sonderzeichen in Crystal:

Wert Beschreibung
\a Alarm
\b Rücktaste
\e Escape
\f Seitenvorschub
\n Zeilenvorschub oder Neue Zeile
\r Wagenrücklauf
\t Horizontaler Tabulator
\v Vertikaler Tabulator
\\ Backslash
\' Einfaches Anführungszeichen
\" Doppeltes Anführungszeichen
\377 Oktales ASCII-Zeichen
\xFF Hexadezimales ASCII-Zeichen
\uFFFF Hexadezimales Unicode-Zeichen
puts "Hello \"World\""
# => Hello "World"

puts "Hello \nWorld"
# => Hello
# => World

Mehrzeilige Strings

Um einen mehrzeiligen String zu schreiben, verwendest du dieselbe Syntax wie für einen einzeiligen String, machst aber für jede Zeile, die der String enthalten soll, einen Zeilenumbruch.

"Hello
World"
# => "Hello\nWorld"

Anleitung

Es war einmal ein exzentrischer Programmierer, der in einem seltsamen Haus mit vergitterten Fenstern lebte. Eines Tages nahm er einen Auftrag von einer Online-Jobbörse an, um einen Partyroboter zu bauen. Der Roboter soll Menschen begrüßen und ihnen zu ihren Plätzen helfen. Die erste Ausgabe war sehr technisch und zeigte, dass es dem Programmierer an menschlicher Interaktion mangelte. Einiges davon schaffte es auch in die nächste Ausgabe.

1. Begrüße einen neuen Gast auf der Party

Implementiere die Methode welcome, die unter Verwendung des angegebenen Namens eine Willkommensnachricht zurückgibt:

PartyRobot.welcome("Christiane")
# => Welcome to my party, Christiane!

2. Begrüße einen neuen Gast auf der Party, der heute Geburtstag hat

Implementiere die Methode happy_birthday, die unter Verwendung des angegebenen Namens und Alters der Person eine Geburtstagsnachricht zurückgibt. Leider ist der Programmierer ein kleiner Angeber, deshalb muss der Roboter sein Wissen über den Geburtstag jedes Gastes unter Beweis stellen.

PartyRobot.happy_birthday("Frank", 58)
# => Happy birthday Frank! You are now 58 years old!

3. Gib Wegbeschreibungen

Implementiere die Funktion assign_table, die eine Wegbeschreibung liefert. Sie sollte 5 Parameter annehmen.

  • Der Name des neuen Gastes, der begrüßt werden soll (String)
  • Die Tischnummer (Int)
  • Der Name des Sitznachbarn (String)
  • Die Richtung, in der der Tisch zu finden ist (String)
  • Die Entfernung zum Tisch (Float64)

Das genaue Format des Ergebnisses siehst du im folgenden Beispiel.

Der Name des Sitznachbarn sollte auf den ersten und letzten Buchstaben des Namens verkürzt werden. Aus Frank wird Fk, aus Christian wird Cn und so weiter.

Der Roboter gibt die Tischnummer an. Der Roboter erwähnt auch die Entfernung zum Tisch. Zum Glück nur mit einer Genauigkeit, die auf 1 Stelle begrenzt ist.

PartyRobot.assign_table("Christiane", "on the left", 27, 23.7834298, "Frank")
# =>
# Welcome to my party, Christiane!
# You have been assigned to table 27. Your table is on the left, exactly 23.8 meters from here.
# You will be sitting next to Fk.
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Crystal Exercism

Bereit, mit Partyroboter zu starten?

Melde dich bei Exercism an, um Crystal mit 26 Konzepte142 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.