[PYTHON] FizzBuzz mit regulären Ausdrücken usw. ohne Verwendung des Operators '%'

Einführung

Ich habe das Modul re überprüft, während ich die 51. Frage von Project Oiler gelöst habe, daher werde ich den FizzBuzz-Code anstelle des Memorandums schreiben. Im Folgenden habe ich versucht, (1) so viele reguläre Ausdrücke wie möglich zu verwenden und (2) den% -Operator nicht zu verwenden, auch wenn ich keine regulären Ausdrücke verwende.

Beurteilung von Vielfachen von 3

Für ein Vielfaches von 3 konnte ich mir kein Urteil mit einem regulären Ausdruck vorstellen. Um das Vielfache von 3 zu bestimmen, haben wir daher die Tatsache verwendet, dass das Endergebnis entweder 3, 6 oder 9 ist, wenn die Summe jeder Ziffer des Vielfachen von 3 wiederholt wird. Insbesondere wurde beschlossen, rekursiv anzurufen, bis die Summe eine Ziffer wurde. Wenn es eine Ziffer wird und die Zahl 3, 6 oder 9 ist, gibt es true zurück, andernfalls false.

def is_multiple_of_3(n):
  if len(str(n)) == 1:
    if str(n) in ['3', '6', '9']:
      return True
    else:
      return False
  else:
    return is_multiple_of_3( reduce(lambda x,y:int(x)+int(y), str(n)))

Beurteilung von Vielfachen von 5

Das Bestimmen eines Vielfachen von 5 ist einfach. Dies liegt daran, dass die erste Ziffer 0 oder 5 sein sollte. Es ist einfach, also habe ich es einfach mit re gemacht. Als Einschränkung trifft re.compile (). Match () nur auf Wortebene (es bestimmt, ob es vom Wortanfang an übereinstimmt, verwenden Sie also re.compile (). Search () Es scheint, dass Sie entweder der Zeichenfolge vorangehen müssen, mit der Sie schlagen möchten? *.

def is_multiple_of_5(n):
  #p = re.compile('(5|0)$')
  p = re.compile('\d*(5|0)$')
  if p.match(str(n)):
    return True
  else:
    return False

Ersetzen Sie mit regulären Ausdrücken

Als ich "Ersetzen durch reguläre Ausdrücke" googelte, wurde der Artikel über re () oben angezeigt. Wenn Sie reguläre Ausdrücke zum Ersetzen von Zeichen verwenden möchten, müssen Sie wahrscheinlich re sub verwenden.

Urteil von Vielfachen von 15

Wenn es ein Vielfaches von 3 und ein Vielfaches von 5 ist, ist es ein Vielfaches von 15, so dass keine besondere Beurteilung vorgenommen wurde. Ich habe jedoch versucht, kleine Tricks wie das Hinzufügen eines Rohlings am Ende von "Fizz" und das Ersetzen des Rohlings durch "Buzz" voll auszunutzen. Wenn dies funktioniert, sollte FizzBuzz ordnungsgemäß angezeigt werden.

Endgültiger Code

import re

def is_multiple_of_3(n):
  if len(str(n)) == 1:
    if str(n) in ['3', '6', '9']:
      return True
    else:
      return False
  else:
    return is_multiple_of_3( reduce(lambda x,y:int(x)+int(y), str(n)))

def is_multiple_of_5(n):
  #p = re.compile('(5|0)$')
  p = re.compile('\d*(5|0)$')
  if p.match(str(n)):
    return True
  else:
    return False

def main():
  for n in range(1,101):
    ret = str(n)
    if is_multiple_of_3(n):
      ret = re.sub('\d+', 'Fizz ', ret)
    if is_multiple_of_5(n):
      ret = re.sub('(\d+|\ )', 'Buzz', ret)
    ret.strip(' ')
    print ret
    
main()

Recommended Posts

FizzBuzz mit regulären Ausdrücken usw. ohne Verwendung des Operators '%'
Schreiben Sie FizzBuzz ohne "="
Zahlen mit regulären Ausdrücken extrahieren
Slackbot Memorandum ~ Anfrage mit regulären Ausdrücken ~
Umgang mit regulären Ausdrücken durch PHP / Python
Bei Verwendung regulärer Ausdrücke in Python
Hinter dem Flyer: Docker mit Python verwenden
[Python] Runden Sie nur mit dem Operator ab
Arbeiten mit OpenStack mit dem Python SDK
Ersetzen Sie Nicht-ASCII durch reguläre Ausdrücke in Python
Spielen Sie mit Dajare mithilfe der COTOHA-API
Python: Vereinfachte morphologische Analyse mit regulären Ausdrücken
Ich habe Hello World mit 64-Bit-OS + C-Sprache ohne Verwendung einer Bibliothek ausprobiert
Unterscheiden Sie zwischen Zahlen und Buchstaben mit regulären Ausdrücken
Python-Pandas: Suchen Sie mit regulären Ausdrücken nach DataFrame
[Python] Werden Sie die Datierung mit regulären Ausdrücken los
Entfernen Sie zusätzliche Zeichenfolgen in der URL mit kanonischem Ausdruck
Ändern Sie die Ausgabe, ohne den Code mit Argparse zu berühren