Je viens vers vous pour un petit coup de main concernant un exercice sur France ioi (jeu de dames).
Voici les explications de l'exercice:
Votre programme doit afficher un damier de taille 40×40. Assurez-vous bien que la case tout en haut à gauche contienne un « O », comme c'est le cas dans le damier ci-dessus.
Exemple:
OXOX
XOXO
OXOX
XOXO
Voici mon code:
for loop in range(20):
for loop in range(20):
print("OX", end = "")
print()
for loop in range(10):
for loop in range(20):
print("XO", end = "")
print()
for loop in range(10):
for loop in range(20):
print("OX", end = "")
print()
J'ai utiliser les conseils, mais je n'arrive pas à comprendre ou ça bloque.
Bizarrement, les autres exercice ne mon pas poser de problème même les suivants. Mais le fait de crée un damier, me pose problème.
D'autre j'aimerais comprendre mes erreurs et mieux comprendre la méthodologie.
On t'a donné des façons «avancées» de répondre à la question, l'astuce étant de faire la somme des indices modulo 2. On dirait que tu ne sais pas ce que c'est l'instruction if. Sans elle, on ne peut pas faire grand chose. Tu peux néanmoins procéder comme suit :
- avec une boucle for, tu produis un code qui affiche juste la ligne 1
- avec une boucle for, tu produis un code qui affiche juste la ligne 2
- tu places les deux lignes de code précédentes dans une boucle for qui les répètera 20 fois donc for loop in range(20).
Pour la ligne 1, tu fais une boucle for pour afficher par paquet de 2 lettres ("OX"), idem pour la ligne 2 mais "XO". Et c'est d'ailleurs ce que ton code essaye de faire. Tu gères bien l'absence de saut de ligne.
Si on est complètement débutant en programmation et qu'on ne dispose pas de la boucle for, l'exercice n'a rien d'évident.
Le \n est de trop je crois, et les deux variables loop c'est bof.
Sinon j'aurais plutôt fait ça mais ça reviens au même :
for a in range(40):
for b in range(40):
if (a + b) % 2 == 0:
print("O", end="")
else:
print("X", end="")
print()
Pour les "loop" j'avoue, c'est un copié collé tout pourrit j'ai même pas fais gaffe ^^. Le "\n" vieille habitude.
---
IIRaziel le "%" tu peux le traduire par des conditions simples pour alterner les actions une ligne sur deux. Tu pourrais faire la même chose avec un entier X que t'incrémentes à chaque fois que tu passe dans ta boucle, si c'est égal à "2" alors tu fais ton autre action et tu remet X à 1.
x = 1
for i in range(40):
for j in range(20):
if(x == 1):
print("OX", end="")
else:
print("XO", end="")
x = x+1
if(x > 2):
x = 1
print()
Pour ce qui est du "in enumerate" oublie pour le moment, c'est ma faute j'étais fatigué j'ai compliqué pour rien. Tu boucles déjà sur des entiers donc c'est strictement inutile dans ce cas.
- Edité par WorstDevEver 30 juillet 2019 à 8:58:20
Maintenant que c'est fini on peut s'amuser à faire des oneliners
for a in range(1600):print("OX"[a%2],end="\n"[:a%40==39])
Ce n'est pas exactement ce que j'entendrais par une oneliner qui devrait être une expression tandis que tu as une instruction (for). Et je ne suis pas sûr que telle quelle on puisse la transformer en expression si facilement. En outre, le code sera très lent si n est grand (par exemple n=5000 au lieu de n=40) car tu vas afficher un caractère vide 24995000 de fois.
Personnelement j'aurais écrit qqchose qui s'approche du code standard pour résoudre l'exo ce qui aurait donné
print('\n'.join(''.join("OX"[(i+j)%2] for i in range(n)) for j in range(n)))
Ah oui, du coup ça c'est mieux (ou la version liste si tu préfère) :
for a in range(1600):print("OX"[(a+a//40)%2],end="\n"[:a%40==39])
Le problème c'est que ce code ne marche que pour n pair. Si n est impair, on a le même problème que plus haut, les lignes ne sont pas alternées. C'est vrai que l'exo ne parlait que de n =40 mais dans ce cas là, il suffirait d'écrire le oneliner :
Je suis débutante, par contre je pensais vraiment que ce code serait suffisant :
for loop in range(20):
for loop in range(20):
print("OX", end ="")
print()
print("XO", end ="")
print()
Pourquoi ne lance t'il pas la boucle entière et pourquoi dois je ajouter un nouveau "for"?
Sur le forum, il faut placer ton code dans des balises spéciales, bouton </> de l'éditeur.
Tel que tu as écrit ton code :
for loop in range(20):
for loop in range(20):
print("OX", end ="")
print()
print("XO", end ="")
print()
Si je te comprends bien, tu veux que soit répétées dans une boucle for les lignes 5 et 9 mais pas la ligne 9. Ce n'est pas possible. Python comprend que tu veux boucler la ligne 7 20 fois et qu'ensuite tu veux afficher un saut de ligne 9. Après tu as indenté sans raison syntaxique (une indentation a toujours lieu après le séparateur deux points, ce n'est pas le cas dans ton code). Bien sûr, tu pourrais indenter la ligne 7 mais alors tu n'aurais pas la bonne sortie.
Remarque purement théorique ... Est-ce que 2 slicing seront plus lent qu'un seul slicing?
- Edité par PierrotLeFou 15 septembre 2022 à 0:09:01
Le Tout est souvent plus grand que la somme de ses parties.
France ioi - Jeu de dames
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Try->Fail->Learn->Converge to success :
Découverte Python Doc Tkinter Les chaînes de caractères
Try->Fail->Learn->Converge to success :
Découverte Python Doc Tkinter Les chaînes de caractères
SyntaxError (parenthèse mal placée)
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Try->Fail->Learn->Converge to success :
Découverte Python Doc Tkinter Les chaînes de caractères
Découverte Python Doc Tkinter Les chaînes de caractères
Le Tout est souvent plus grand que la somme de ses parties.
Python c'est bon, mangez-en.
Le Tout est souvent plus grand que la somme de ses parties.