Immédiatement après la définition de la fonction, vous pouvez mettre quelque chose comme `` foo bar buzz '' '' en python pour décrire la fonction. Cela s'appelle «docstring». doctest est une histoire que vous pouvez également tester le fonctionnement d'une fonction en utilisant cette docstring
.
Je dois écrire une fonction. J'ai choisi «fizzbuzz» parce que c'est trop normal comme «factoriel». Il existe une liaison ʻone liner` en python, et j'ai essayé d'utiliser le code ici.
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()
Pour expliquer un peu, la chaîne de caractères "FizzBuzz" est découpée et imprimée. La chaîne souhaitée est coupée en ajustant le nombre à gauche et à droite séparés par :
. en bref
case(i):
je suis[Multiple de 3]Et[Multiple de 5]:
"FizzBuzz"[0:8]
je suis[Multiple de 3]Et[Pas un multiple de 5]:
"FizzBuzz"[0:4]
je suis[Pas un multiple de 3]Et[Multiple de 5]:
"FizzBuzz"[4:8]
je suis[Pas un multiple de 3]Et[Pas un multiple de 5]:
"FizzBuzz"[4:4] /* Empty String => None */
C'est. Pour y parvenir, préparez 0 pour des multiples de «3, 4» pour les autres, 8 pour des multiples de «5» et 4 »pour les autres. Puisqu'il s'agit d'une ligne unique, je fais de gros efforts avec le surplus, mais je pense qu'il n'y a rien de mal à créer une fonction distincte.
Au fait, je l'ai simulé lorsque j'ai augmenté la valeur à retourner.
**********************************************************************
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]
C'est évident en un coup d'œil. Ce serait trop pratique.
J'ai fait un exemple spécial qui ne fonctionne pas et je l'ai essayé. Traceback Les déclarations suivantes ne semblent pas nécessairement correspondre exactement. Apparemment, je ne regarde que la déclaration «TypeError: can only ...».
Recommended Posts