J'étais en train de résoudre la collection de problèmes de niveau supérieur de Paiza, mais je n'avais pas de réponse modèle, alors je l'ai fait moi-même avec des explications. Le langage est Python3.
Exemple de problème de contrôle des compétences de Paiza Fizz Buzz (équivalent au rang C de Paiza) https://paiza.jp/works/mondai/skillcheck_sample/fizz-buzz?language_uid=python3 Vous pouvez enregistrer paiza gratuitement immédiatement, je vous recommande donc de vous inscrire pour le moment.
Programmons le problème suivant!
L'entier N est donné en entrée.
Afficher les entiers de 1 à N dans l'ordre de 1.
Cependant, le numéro que vous essayez d'afficher est
・ Quand c'est un multiple de 3 et un multiple de 5, "Fizz Buzz" ・ Quand c'est un multiple de 3, "Fizz" ・ Quand c'est un multiple de 5, "Buzz"
Veuillez afficher >> au lieu du numéro.
Valeur à saisir
L'entrée est donnée dans le format suivant.
N
N est un entier supérieur ou égal à 1 et inférieur ou égal à N.
Valeur d'entrée Un saut de ligne est inséré à la fin de la dernière ligne. La chaîne est transmise à partir de l'entrée standard.
Sortie attendue
À la fin, commencez une nouvelle ligne et n'incluez pas de caractères supplémentaires ou de lignes vides.
Conditions
Dans tous les cas de test, les conditions suivantes sont remplies.
・ 1 ≤ N ≤ 100 ・ N est un entier
Exemple d'entrée 1
5
Exemple de sortie 1
1 2 Fizz 4 Buzz
Exemple d'entrée 2
20
Exemple de sortie 2
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 Fizz Buzz 16 17 Fizz 19 Buzz
La valeur d'entrée est une valeur entière comprise entre 0 et 100. Après avoir reçu la valeur d'entrée à l'aide de la fonction d'entrée, ** conversion de type ** du type str en type int à l'aide de la fonction int.
fizz-buzz_1.py
n = int(input())
Recherchez ensuite les nombres que vous devriez afficher à la place. Cette fois, nous utiliserons la ** fonction range ** car nous n'avons besoin de rechercher que les entiers de 1 à n dans l'ordre. À ce stade, vous devez faire attention à la manière de spécifier la ** plage ** de la fonction de plage.
Si vous entrez deux arguments avec la fonction range, le premier argument sera ~~ begin ~~ start et le second argument sera ~~ end ~~ stop. À ce stade, l'argument d'arrêt ~~ end ~~ n'inclut pas le nombre lui-même et spécifie de sortir l'entier précédent.
En d'autres termes, la sortie de «range (1, 5)» est 1,2,3,4 et ** 5 n'est pas inclus. ** **
Si vous voulez sortir 1,2,3,4,5, vous devez spécifier range (1, 5 + 1)
.
range_sample.py
print(list(range(1,5))) # [1,2,3,4]
print(list(range(1,6))) # [1,2,3,4,5]
Dans ce cas, nous voulons une valeur entière de 1 à n, alors passez ** 1, n + 1 ** comme argument à la fonction de plage. Lorsqu'il est combiné avec l'instruction for, cela ressemble à ceci.
fizz-buzz_2.py
n = int(input())
for i in range(1, n+1):
print(i)
"""
n =À 5,
1
2
3
4
5
"""
Ensuite, déterminez les nombres à convertir en fizzBuzz. Pour cela, utilisez% (un opérateur algébrique pour trouver le reste).
Si n est divisé par 3 et que le reste est égal à zéro, alors n est un multiple de 3. Si le reste de n divisé par 5 est égal à zéro, alors n est un multiple de 5. Si le reste de n divisé par 15 est égal à zéro, alors n est un multiple de 3 et un multiple de 5.
Un multiple de 3 et un multiple de 5 signifie un multiple de ** 15.
Cette fois, l'instruction if-elif est utilisée pour le jugement.
À ce stade, il est nécessaire de prêter attention à la ** ordonnance de jugement **. Pour déterminer si ~~ n est un multiple de 3 ou 5, Si vous l'écrivez avant de juger s'il s'agit d'un multiple de 15, cela ne fonctionnera pas. ~~ Pour déterminer si> n est un multiple de 3 ou 5, Si vous l'écrivez avant de juger s'il s'agit d'un multiple de> 15, vous devez en imaginer un peu.
Il existe une méthode signalée par @shiracamus, veuillez la vérifier dans la section commentaires ci-dessous. Cette fois, je voudrais le résoudre selon l'ordre du jugement.
if_sample.py
#Mauvais code
n = 15
if n%3 == 0:
print("n est un multiple de 3.")
elif n%5 == 0:
print("n est un multiple de 5.")
elif n%15 == 0:
print("n est un multiple de 3 et un multiple de 5.")
else:
print("n n'est ni un multiple de 3 ni un multiple de 5.")
#n est un multiple de 3.
Si n est un multiple de 15, il sera déterminé comme étant un multiple de 3 ou 5 au lieu d'un multiple de 15. Gardez à l'esprit qu'il sera traité dans l'ordre du haut.
Alors, tout d'abord, déterminez s'il s'agit d'un multiple de 15. Après cela, cela fonctionne bien pour déterminer s'il s'agit d'un multiple de 5 ou d'un multiple de 3.
fizz-buzz_3.py
n = 15
if n%15 == 0:
print("n est un multiple de 3 et un multiple de 5.")
elif n%5 == 0:
print("n est un multiple de 5.")
elif n%3 == 0:
print("n est un multiple de 3.")
else:
print("n n'est ni un multiple de 3 ni un multiple de 5.")
#n est un multiple de 3 et un multiple de 5.
En général, lors de l'écriture d'une instruction if-elif, il semble que cela fonctionne souvent bien si les conditions plus étroites sont écrites en premier.
fizz-buzz.py
n = int(input())
for i in range(1, n+1):
if i%15==0:
print("Fizz Buzz")
elif i%5==0:
print("Buzz")
elif i%3==0:
print("Fizz")
else:
print(i)
https://qiita.com/KoyanagiHitoshi/items/3286fbc65d56dd67737c
Je vais vous expliquer en détail où j'ai été pris dans le passé. Cela a peut-être été détourné et difficile à comprendre, mais N'hésitez pas à commenter si vous avez des inquiétudes.