Tracks
/
Go
Go
/
Übungen
/
Partyroboter
Partyroboter

Partyroboter

Lernübung

Einführung

Pakete

In Go ist eine Anwendung in Pakete organisiert. Ein Paket ist eine Sammlung von Quelldateien, die sich im gleichen Ordner befinden. Alle Quelldateien in einem Ordner müssen am Anfang der Datei denselben Paketnamen haben. Üblicherweise werden Pakete genauso benannt wie der Ordner, in dem sie liegen.

package greeting

Go bietet eine umfangreiche Standardbibliothek aus Paketen, die du in deinem Programm mit dem Schlüsselwort import verwenden kannst. Pakete der Standardbibliothek werden über ihren Namen importiert.

package greeting

import "fmt"

Ein importiertes Paket wird dann über den Paketnamen angesprochen:

world := "World"
fmt.Sprintf("Hello %s", world)

Go entscheidet anhand der Deklaration, ob ein Element von Code in anderen Paketen aufgerufen werden kann. Damit eine Funktion, ein Typ, eine Variable, eine Konstante oder ein Strukturfeld von außen sichtbar ist (man nennt das exportiert), muss der Name mit einem Großbuchstaben beginnen.

package greeting

// Hello is a public function (callable from other packages).
func Hello(name string) string {
    return "Hello " + name
}

// hello is a private function (not callable from other packages).
func hello(name string) string {
    return "Hello " + name
}

String-Formatierung

Go bietet ein eingebautes Paket namens fmt (Formatpaket), das verschiedene Funktionen anbietet, um das Format von Ein- und Ausgabe zu bearbeiten. Die am häufigsten verwendete Funktion ist Sprintf, die Verben wie %s verwendet, um Werte in einen String einzusetzen, und diesen String zurückgibt.

import "fmt"

food := "taco"
fmt.Sprintf("Bring me a %s", food)
// Returns: Bring me a taco

In Go lassen sich Gleitkommazahlen bequem mit den Verben von Sprintf formatieren: %g (kompakte Darstellung), %e (Exponent) oder %f (ohne Exponent). Alle drei Verben erlauben es, die Breite des Felds und die numerische Position zu steuern.

import "fmt"

number := 4.3242
fmt.Sprintf("%.2f", number)
// Returns: 4.32

Eine vollständige Liste der verfügbaren Verben findest du in der Dokumentation des Formatpakets.

fmt enthält weitere Funktionen für die Arbeit mit Strings, zum Beispiel Println, das die übergebenen Argumente einfach auf der Konsole ausgibt, und Printf, das die Eingabe auf dieselbe Weise wie Sprintf formatiert, bevor es sie ausgibt.

Anleitung

Es war einmal ein exzentrischer Programmierer, der in einem seltsamen Haus mit vergitterten Fenstern lebte. Eines Tages nahm er über ein Online-Jobportal einen Auftrag an: Er sollte einen Partyroboter bauen. Der Roboter soll Gäste begrüßen und ihnen zu ihren Plätzen helfen. Die erste Version war sehr technisch und zeigte, dass dem Programmierer der Umgang mit Menschen fehlte. Einiges davon schaffte es auch in die nächste Version.

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

Implementiere die Funktion Welcome, die eine Begrüßungsnachricht mit dem übergebenen Namen zurückgibt:

Welcome("Christiane")
// => Welcome to my party, Christiane!

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

Implementiere die Funktion HappyBirthday, die eine Geburtstagsnachricht mit dem übergebenen Namen und Alter der Person zurückgibt. Leider ist der Programmierer ein kleiner Angeber, also muss der Roboter sein Wissen über den Geburtstag jedes Gastes unter Beweis stellen.

HappyBirthday("Frank", 58)
// => Happy birthday Frank! You are now 58 years old!

3. Gib Wegbeschreibungen

Implementiere die Funktion AssignTable, die Wegbeschreibungen gibt. Sie soll 5 Parameter akzeptieren.

  • 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 ist im Beispiel unten zu sehen.

Der Roboter gibt die Tischnummer in einem Format mit 3 Ziffern an. Ist die Zahl kürzer als 3 Ziffern, bekommt sie führende Nullen, bis sie 3 Ziffern hat (z. B. wird aus 3 die 003). Der Roboter nennt außerdem die Entfernung des Tisches. Zum Glück nur mit einer Genauigkeit von 1 Nachkommastelle.

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

Bereit, mit Partyroboter zu starten?

Melde dich bei Exercism an, um Go mit 34 Konzepte165 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.