Unmittelbar nach der Funktionsdefinition können Sie in Python so etwas wie "Foo Bar Buzz" in Python einfügen, um die Funktion zu beschreiben. Dies wird als "docstring" bezeichnet. doctest spricht über die Verwendung dieser "Dokumentzeichenfolge", um die Funktionsweise von Funktionen zu testen.
Ich muss eine Funktion schreiben. Ich habe mich für "fizzbuzz" entschieden, weil es zu normal ist wie "Fakultät". In Python gibt es eine Bindung namens "one liner", und ich habe versucht, den Code [hier] zu verwenden (http://stackoverflow.com/questions/6890037/python-fizzbuzz-in-one-line).
fizzbuzz.py
def fizzbuzz(n):
"""
This function returns a list whose elements are
converted into fizzbuzz form.
>>> fizzbuzz(10)
[1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz']
>>> len(fizzbuzz(9))
9
>>> fizzbuzz(10) + 1
Traceback (most recent call last):
File "/Users/yourname/python/fizbuzz.py", line 32, in <module>
fizzbuzz(10) + 1
TypeError: can only concatenate list (not "int") to list
"""
for i in range(1,n+1): res.append("FizzBuzz"[(i**2)%3*4:8--(i**4)%5] or i)
return res
if __name__ == '__main__':
import doctest
doctest.testmod()
Um es ein wenig zu erklären, wird die Zeichenkette "FizzBuzz" geschnitten und gedruckt. Die gewünschte Zeichenfolge wird ausgeschnitten, indem die Zahl links und rechts durch ":" getrennt angepasst wird. Zusamenfassend
case(i):
ich bin[Vielfaches von 3]Und[Vielfaches von 5]:
"FizzBuzz"[0:8]
ich bin[Vielfaches von 3]Und[Kein Vielfaches von 5]:
"FizzBuzz"[0:4]
ich bin[Kein Vielfaches von 3]Und[Vielfaches von 5]:
"FizzBuzz"[4:8]
ich bin[Kein Vielfaches von 3]Und[Kein Vielfaches von 5]:
"FizzBuzz"[4:4] /* Empty String => None */
Das ist. Um dies zu erreichen, bereiten Sie 0 für Vielfache von "3", 4 "für andere, 8 für Vielfache von" 5 "und 4" für andere vor. Da es sich um einen Einzeiler handelt, bemühe ich mich sehr um den Überschuss, aber ich denke, es ist in Ordnung, eine separate Funktion zu erstellen.
Ich habe es übrigens simuliert, als ich den zurückzugebenden Wert erhöht habe.
**********************************************************************
File "/Users/hiroberry/python/foo.py", line 8, in __main__.fizzbuzz
Failed example:
len(fizzbuzz(9))
Expected:
10
Got:
9
**********************************************************************
1 items had failures:
1 of 3 in __main__.fizzbuzz
***Test Failed*** 1 failures.
[Finished in 0.1s]
Es ist auf einen Blick offensichtlich. Es wäre zu bequem.
Ich habe ein spezielles Beispiel gemacht, das nicht funktioniert, und es ausprobiert. Rückverfolgung Die folgenden Aussagen scheinen nicht genau übereinzustimmen. Anscheinend schaue ich nur auf die Anweisung "TypeError: kann nur ...".
Recommended Posts