Dies ist @aimof von Iridge Co., Ltd. Ich habe eine Mob-Programmier-Lernsitzung in Iridge veranstaltet (hauptsächlich für junge Leute), daher werde ich sie zusammenfassen, wenn ich darüber berichte. Dieses Mal habe ich allgemeinen Code (FizzBuzz) anstelle von Produktionscode verwendet. Dieser Artikel ist eine Neufassung eines in Iridge freigegebenen Dokuments.
Da wir frei ein- und ausgehen konnten, gab es einige Schwankungen, aber die Anzahl der Personen lag bei 4 bis 5 und wir führten 2 Stunden lang durch. Es gibt drei Mitglieder, die von Anfang bis Ende teilgenommen haben.
Es war gut, Missverständnisse oder Fehler sofort zu bemerken, denn es wäre eine Form des Denkens mit allen anderen als dem Fahrer, nicht nur mit dem Fahrer. (Obwohl es einige Fehler gab, die nicht behoben wurden: siehe unten).
Ich denke, die Mitglieder konnten mit einem Gefühl der Einheit zusammenarbeiten.
Hier ist das Thema dieses Mal vorbereitet.
FizzBuzz mit zusätzlichen Anforderungen bei jedem Abschluss
Für Zahlen von 1 bis 100
Zeichnen Sie eine aus den im Voraus vorbereiteten Anforderungen und fügen Sie die Anforderungen hinzu.
Dieses Mal habe ich beschlossen, eine Schachtel und einen Stift zu platzieren und sie zu bitten, ihre Anforderungen frei zu schreiben. Verschiedene Dinge, von Grundanforderungen bis zu schwierigen, wurden gesammelt.
Von hier aus werde ich Ihnen die Atmosphäre beim Schreiben des eigentlichen Codes erzählen.
for i in range(1, 101):
if i % (3 * 5) == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
Kein Kommentar erforderlich? Es ist ein gewöhnlicher Fizz Buzz.
Ich gab auf.
Ich habe es auf einmal gezogen, weil es als Geschichte enthalten war. Es ist sehr schmerzhaft, weil die grundlegende Syntax wie if, def, for eingeschränkt ist. Weiter schnell.
Später wurde mir eine interne Lösung mitgeteilt. (Es ist Python2.7)
i = 1
while i <= 100:
print "Fizz" * (not i % 3) + "Buzz" * (not i % 5) or i
i = i + 1
def has_six_different_num(values):
char_set = set()
for value in values:
if type(value) is int:
for char in str(value):
char_set.add(char)
if 6 <= len(char_set):
return True
else:
return False
values = list()
for i in range(1, 101):
value = ""
if i % (3 * 5) == 0:
value = "FizzBuzz"
elif i % 3 == 0:
value = "Fizz"
elif i % 5 == 0:
value = "Buzz"
else:
value = i
values.append(value)
if len(values) > 10:
del values[0]
if has_six_different_num(values):
value = "ok"
values[-1] = "ok"
print(value)
Es ist ziemlich lang geworden. Der Code ist bereits eine Überarbeitung wert. Wenn ich Code schreiben würde, würde ich sagen, dass es wirklich unangenehm ist, zweimal zu drehen ...
Ich habe die Anforderung so gezeichnet, als ob mir gesagt worden wäre, ich solle das Double für die Anweisung korrigieren. Alle lachten ungewollt über das gute Timing.
Hier sind die Ergebnisse.
def has_six_different_num(values):
return 7 <= len(set(list("".join(values))))
values = list()
for i in range(1, 30001):
value = ""
if i % (3 * 5) == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
value = i
values.append(str(value))
if has_six_different_num(values[-10:]):
value = "ok"
values[-1] = "ok" # <-Dies ist ein Fehler
if value:
print(value)
Es war ziemlich erfrischend. Da es schwierig ist, das 100-fache zu beschleunigen, hat sich die auszugebende Anzahl auf 30.000 erhöht. Es wurde von 0,044 Sekunden auf 0,028 Sekunden erhöht.
7 <= len(set(list("".join(values))))
Ich habe viel aus diesem Teil gelernt.
Gibt true zurück, wenn 7 Arten von Zeichen einschließlich leerer Zeichenfolgen verwendet werden.
Eigentlich dieser Codefehler. Ich habe es gerade in den Kommentaren geschrieben. Wenn Sie hier keine leere Zeichenfolge ersetzen, werden die beiden Zeichen von ok als Zahlenbeurteilung behandelt.
def has_six_different_num(values):
return 7 <= len(set(list("".join(values))))
values = list()
for i in range(30000, 0, -1):
value = ""
if i % (3 * 5) == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
value = i
values.append(str(value))
if has_six_different_num(values[-10:]):
value = "ok"
values[-1] = "ok"
if value:
print(value)
Ändern Sie einfach die Reichweite. Ich habe den Fehler noch nicht bemerkt.
rm -Rf ~
aus, wenn ein Laufzeitfehler auftrittEs ist für meine Bequemlichkeit weg. Es ist ein Firmencomputer ... Der Laufzeitfehler ist übrigens danach nie mehr aufgetreten!
Führen Sie diesen Befehl niemals aus. Das Folgende des Home-Verzeichnisses wird gelöscht.
Als ich mich daran gewöhnt habe, hat die Geschwindigkeit, mit der der Fahrer aus Mobs Bemerkungen raten kann, zugenommen. Es scheint, dass die Zeile sofort verschwindet, nachdem ich gesagt habe, dass ich sie löschen möchte.
Ich habe vergessen, den Code für diese Anforderung zu speichern, daher werde ich ihn im nächsten Abschnitt zusammenfassen.
import json
num = int(input())
def has_six_different_num(values):
return 7 <= len(set(list("".join(values))))
values = list()
output_values = list()
for i in range(num, 0, -1):
value = ""
if i % 3 == 0:
value += "Fizz"
if i % 5 == 0:
value += "Buzz"
if i % 7 == 0:
value += "Foo"
if i % 11 == 0:
value += "Bar"
if not value:
value = i
if type(value) is str:
values.append("")
else:
values.append(str(value))
if has_six_different_num(values[-10:]):
value = "ok"
values[-1] = ""
output_values.append(value)
print(json.dumps(output_values))
Dies ist das Endergebnis. Der Fehler wurde ebenfalls behoben.
Es war eine Lernsitzung (Probesitzung) für Mob-Programmierung, aber um ehrlich zu sein, es hat mir mehr Spaß gemacht, als ich erwartet hatte. Dieses Mal habe ich einen Code mit einem starken Ereignischarakter geschrieben, daher denke ich, dass das Gefühl, dass jeder verrückt war, stärker war als gewöhnlich.
Wir haben jedoch auch das Feedback erhalten, dass wir den Produktionscode verwenden möchten, wenn es einen nächsten gibt. Es macht Spaß, den Code, mit dem ich im Unternehmen Probleme habe, vorzubereiten und als Material für die Lernsitzung zu verwenden. (Das Problem ist, dass Sie den Code nicht auf Qiita veröffentlichen können.)
Neben dem ursprünglichen Zweck war es ein großer Verdienst, dass ich nichts Angemessenes tun konnte, da dies zur Organisation meiner eigenen Gedanken führte.
Ich denke, diesmal war es gut, dass die Anforderungen steigen werden. Der Grund ist, dass es klein entwickelt ist und Refactoring sehr wichtig ist.
Ich persönlich denke, dass es großartig wäre, wenn wir interessantere Lernsitzungen in Iridge abhalten könnten. Wenn wir eine interessante Lernsitzung haben, werden wir sie erneut auf Qiita veröffentlichen!
Recommended Posts