Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2021-09-23T22:09:13+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Apport du FPGA / GPU, message #2377162021-09-23T22:09:13+02:00buffalo974/@buffalo974https://zestedesavoir.com/forums/sujet/15716/apport-du-fpga-gpu/?page=1#p237716<p>merci simbilou</p>Apport du FPGA / GPU, message #2377122021-09-23T17:49:49+02:00simbilou/@simbilouhttps://zestedesavoir.com/forums/sujet/15716/apport-du-fpga-gpu/?page=1#p237712<p>Bonjour,</p>
<p>Un FPGA ne fait pas de calcul en lui même, c’est un ensemble de LUT et de bascule que l’on peut câbler comme on veut pour réaliser à peut près n’importe quel circuit numérique. Le circuit numérique ainsi implémenté dans le FPGA lui fait bien le calcul que tu veux, et même séquentiellement si ça te chante (ce serait contre-productif mais possible).</p>
<p>La différente avec un GPU c’est que tu fais le circuit que tu veux, un GPU lui a un grand nombre de petit circuits particulièrement optimisés pour le calcul de rendu 3D. Ces circuits sont plus où moins indépendants les uns des autres ce qui permet de paralléliser beaucoup de calcul. Cela a été développé à la base pour accélérer le rendu 3D, mais ça reste très efficace si tes calculs ont les mêmes caractéristiques qu’un rendu 3D, c’est à dire si tu as toujours les mêmes calculs ou presque à faire sur un grand nombre de données indépendantes (paradigme <a href="https://fr.wikipedia.org/wiki/Single_instruction_multiple_data">SIMD</a>).</p>
<p>Je ne sais pas vraiment ce qu’est un NPU donc je ne peux pas répondre de manière pertinente.</p>
<p>De ma compréhension, l’apport des FPGA pour l’IA n’est pas très intéressant en dehors des phases de prototypage (comme de coutume avec les FPGA d’ailleurs…). Une fois les circuits nécessaires clairement identités, on fera des puces spécialisées type GPU, TPU, etc.. </p>
<p>L’ordinateur quantique ça n’existe pas encore en dehors de quelques essais en laboratoire et si on peut certainement trouver du contenu de qualité sur le sujet je suis de mon côté pas assez calé sur le sujet pour séparer le grain de l’ivraie.</p>
<p>Enfin pour tes questions bonus: il n’y a pas d’équivalent de langage d’assemblage pour un FPGA car on ne donne pas des instructions à une machine, on décrit un circuit. Après il est vrai que l’on décrit généralement les circuit avec un langage de plus haut niveau (un <a href="https://fr.wikipedia.org/wiki/Langage_de_description_de_mat%C3%A9riel">HDL</a>) et que au final on a un fichier binaire à aller charger dans le FPGA pour qu’il se comporte comme le circuit décrit. Les étapes successives pour passer du HDL au bitstream peuvent être vaguement mise en regard de celles nécessaire à l’élaboration d’un exécutable depuis son code source mais ce n’est qu’une analogie. Je veux bien essayer de m’y risquer si ça t’intéresse mais en vrai pour bien saisir ce qu’il se passe il faut suivre un cours d’électronique numérique.</p>Apport du FPGA / GPU, message #2377032021-09-23T13:21:23+02:00buffalo974/@buffalo974https://zestedesavoir.com/forums/sujet/15716/apport-du-fpga-gpu/?page=1#p237703<p>Salut,
j’ai compris que le FPGA faisait du calcul parallele.
Quelle difference avec un GPU ? NPU Neural Processing Unit ?
Apport pour l' IA et l’ordinateur quantique ?</p>
<p>et question bonus : quel est l' équivalent du langage d’assemblage et assembleur , linkeur , debuguer pour le FPGA ?</p>Optimiser mon code d'interface tkinter, message #2348992021-06-02T22:13:54+02:00Jeph/@Jephhttps://zestedesavoir.com/forums/sujet/15363/optimiser-mon-code-dinterface-tkinter/?page=1#p234899<p>Bonjour et bravo !</p>
<p>Je n’y suis pas pour grand chose <img src="/static/smileys/svg/clin.svg" alt=";)" class="smiley"></p>
<p>Pardon pour le message qui suit qui est un peu indigeste.</p>
<p>Quelques remarques :
1. C’est cool d’avoir mis le code sur git mais le but principal de l’outil est de permettre de suivre les changements des fichiers, en mettant des archives dessus ce n’est pas possible (il aurait fallu jamais compresser en zip et simplement ajouter l’ensemble des fichiers au fur et à mesure).</p>
<ol start="2">
<li>
<p>C’est bien d’avoir essayé de documenté un peu le code, c’est en faisant qu’on apprend !</p>
</li>
<li>
<p>En python c’est souvent le style de pep8 (<a href="https://www.python.org/dev/peps/pep-0008/">https://www.python.org/dev/peps/pep-0008/</a>) qui est utilisé pour la présentation du code. C’est intéressant de le suivre pour avoir un style de code uniforme lorsqu’on travaille à plusieurs (ce qui était le cas ici !). Il est tout à fait possible de configurer son éditeur de code pour avoir du linting automatique par rapport aux règles de pep8. En particulier <code>snake_case</code> plutôt que <code>camelCase</code>.</p>
</li>
<li>
<p>Au niveau du code en lui même : il y a beaucoup d’endroits où vous pourriez simplifier des éléments de code :</p>
</li>
</ol>
<p>Voilà quelques idées (dans la dernière version du code), je n’ai fait que regardé rapidement (mais c’est applicable à pleins d’autres endroits).</p>
<p>Dans <code>code_tarot_definition.py</code>
De manière générale il y a beaucoup de code dupliqué, peut-être qu’il aurait été intéressant de créer des variables globales pour les différentes cartes du jeu (au moins pour les listes sur lesquelles vous itérez systématiquement), à savoir : <code>color = ["D","H","C","S"]</code>,
<code>high_values = ["1","2","3","4","5","6","7","8","9","10","J","C","Q","K"]</code> et
<code>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]</code>.</p>
<p>Ainsi on peut transformer :</p>
<h5 id="1">1<a aria-hidden="true" href="#1"><span class="icon icon-link"></span></a></h5>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span></div><pre><code class="hljs language-py"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">cardDeck</span>():</span>
<span class="hljs-string">"""create and shuffle a deck of cards
Returns:
list: list of cards
"""</span>
color = [<span class="hljs-string">"D"</span>,<span class="hljs-string">"H"</span>,<span class="hljs-string">"C"</span>,<span class="hljs-string">"S"</span>]
high_values = [<span class="hljs-string">"1"</span>,<span class="hljs-string">"2"</span>,<span class="hljs-string">"3"</span>,<span class="hljs-string">"4"</span>,<span class="hljs-string">"5"</span>,<span class="hljs-string">"6"</span>,<span class="hljs-string">"7"</span>,<span class="hljs-string">"8"</span>,<span class="hljs-string">"9"</span>,<span class="hljs-string">"10"</span>,<span class="hljs-string">"J"</span>,<span class="hljs-string">"C"</span>,<span class="hljs-string">"Q"</span>,<span class="hljs-string">"K"</span>]
deck = [(x,y) <span class="hljs-keyword">for</span> y <span class="hljs-keyword">in</span> color <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> high_values]
<span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>, <span class="hljs-number">8</span>, <span class="hljs-number">9</span>, <span class="hljs-number">10</span>, <span class="hljs-number">11</span>, <span class="hljs-number">12</span>, <span class="hljs-number">13</span>, <span class="hljs-number">14</span>, <span class="hljs-number">15</span>, <span class="hljs-number">16</span>, <span class="hljs-number">17</span>, <span class="hljs-number">18</span>, <span class="hljs-number">19</span>, <span class="hljs-number">20</span>, <span class="hljs-number">21</span>]:
deck.append((str(x),<span class="hljs-string">"A"</span>))
deck.append((<span class="hljs-string">'fool'</span>, <span class="hljs-string">'A'</span>))
random.shuffle(deck)
<span class="hljs-keyword">return</span> deck
</code></pre></div>
<p>en</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span></div><pre><code class="hljs language-py">COLORS = [<span class="hljs-string">"D"</span>, <span class="hljs-string">"H"</span>, <span class="hljs-string">"C"</span>, <span class="hljs-string">"S"</span>]
HIGH_VALUES = [str(x) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> range(<span class="hljs-number">1</span>, <span class="hljs-number">11</span>] + [<span class="hljs-string">"J"</span>,<span class="hljs-string">"C"</span>,<span class="hljs-string">"Q"</span>,<span class="hljs-string">"K"</span>]
ATOUTS = [str(x) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> range(<span class="hljs-number">1</span>, <span class="hljs-number">22</span>)] + [<span class="hljs-string">"fool"</span>]
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">cardDeck</span>():</span>
deck = [(x,y) <span class="hljs-keyword">for</span> y <span class="hljs-keyword">in</span> COLORS <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> HIGH_VALUES] + [(x, <span class="hljs-string">"A"</span>) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> ATOUTS]
random.shuffle(deck)
<span class="hljs-keyword">return</span> deck
</code></pre></div>
<p>puis en profiter pour réutiliser <code>COLORS</code>, <code>HIGH_VALUES</code> et <code>ATOUTS</code> autant que possible.</p>
<p>De la même manière, il faut essayer de ne pas se répéter (<a href="https://fr.wikipedia.org/wiki/Ne_vous_r%C3%A9p%C3%A9tez_pas">https://fr.wikipedia.org/wiki/Ne_vous_r%C3%A9p%C3%A9tez_pas</a>)</p>
<p>Vous pouvez modifier :</p>
<h5 id="2">2<a aria-hidden="true" href="#2"><span class="icon icon-link"></span></a></h5>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span></div><pre><code class="hljs language-py"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">distribution</span>(<span class="hljs-params">listA, listP1, listP2, listP3, listP4, Deck</span>):</span>
<span class="hljs-keyword">if</span> listA == listP1:
<span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> [<span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>]:
<span class="hljs-keyword">for</span> y <span class="hljs-keyword">in</span> [<span class="hljs-number">0</span>, <span class="hljs-number">12</span>, <span class="hljs-number">24</span>, <span class="hljs-number">36</span>, <span class="hljs-number">48</span>, <span class="hljs-number">60</span>]:
listA.append(Deck[x + y])
<span class="hljs-keyword">if</span> listA == listP2:
<span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> [<span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>]:
<span class="hljs-keyword">for</span> y <span class="hljs-keyword">in</span> [<span class="hljs-number">0</span>, <span class="hljs-number">12</span>, <span class="hljs-number">24</span>, <span class="hljs-number">36</span>, <span class="hljs-number">48</span>, <span class="hljs-number">60</span>]:
listA.append(Deck[x + y])
<span class="hljs-keyword">if</span> listA == listP3:
<span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> [<span class="hljs-number">6</span>, <span class="hljs-number">7</span>, <span class="hljs-number">8</span>]:
<span class="hljs-keyword">for</span> y <span class="hljs-keyword">in</span> [<span class="hljs-number">0</span>, <span class="hljs-number">12</span>, <span class="hljs-number">24</span>, <span class="hljs-number">36</span>, <span class="hljs-number">48</span>, <span class="hljs-number">60</span>]:
listA.append(Deck[x + y])
<span class="hljs-keyword">if</span> listA == listP4:
<span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> [<span class="hljs-number">9</span>, <span class="hljs-number">10</span>, <span class="hljs-number">11</span>]:
<span class="hljs-keyword">for</span> y <span class="hljs-keyword">in</span> [<span class="hljs-number">0</span>, <span class="hljs-number">12</span>, <span class="hljs-number">24</span>, <span class="hljs-number">36</span>, <span class="hljs-number">48</span>, <span class="hljs-number">60</span>]:
listA.append(Deck[x + y])
<span class="hljs-keyword">return</span> listA
</code></pre></div>
<p>en</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span></div><pre><code class="hljs language-py"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">distribution</span>(<span class="hljs-params">listA, listP1, listP2, listP3, listP4, deck</span>):</span>
initial_x = [listP1, listP2, listP3, listP4].index(listA) * <span class="hljs-number">3</span>
<span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> [initial_x, initial_x + <span class="hljs-number">1</span>, initial_x + <span class="hljs-number">2</span>]:
<span class="hljs-keyword">for</span> y <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span>, <span class="hljs-number">5</span> * <span class="hljs-number">12</span> + <span class="hljs-number">1</span>, <span class="hljs-number">12</span>):
listA.append(deck[x + y])
<span class="hljs-keyword">return</span> listA
</code></pre></div>
<p>De manière générale, pas besoin de passer en entrée de votre fonction la liste où vous voulez ajouter des éléments. C’est parfois plus simple / pratique de la créer sur le champ.</p>
<p>(On suppose que player_id = 0 / 1 / 2 / 3)</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span></div><pre><code class="hljs language-py"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">distribution</span>(<span class="hljs-params">player_id, deck</span>):</span>
initial_x = player_id * <span class="hljs-number">3</span>
listA = []
<span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> [initial_x, initial_x + <span class="hljs-number">1</span>, initial_x + <span class="hljs-number">2</span>]:
<span class="hljs-keyword">for</span> y <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span>, <span class="hljs-number">5</span> * <span class="hljs-number">12</span> + <span class="hljs-number">1</span>, <span class="hljs-number">12</span>):
listA.append(deck[x + y])
<span class="hljs-keyword">return</span> listA
</code></pre></div>
<p>etc.</p>
<p>Puis plutôt que :</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span></div><pre><code class="hljs language-py"> p1 = card_sorted(distribution(p1, p1, p2, p3, p4, finalDeck))
p2 = card_sorted(distribution(p2, p1, p2, p3, p4, finalDeck))
p3 = card_sorted(distribution(p3, p1, p2, p3, p4, finalDeck))
p4 = card_sorted(distribution(p4, p1, p2, p3, p4, finalDeck))
</code></pre></div>
<p>on peut faire</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span></div><pre><code class="hljs language-py">p1, p2, p3, p4 = [distribution(player_id, deck) <span class="hljs-keyword">for</span> player_id <span class="hljs-keyword">in</span> range(<span class="hljs-number">0</span>, <span class="hljs-number">4</span>)]
</code></pre></div>
<h5 id="3">3<a aria-hidden="true" href="#3"><span class="icon icon-link"></span></a></h5>
<p>De manière générale, utiliser les compréhensions lorsque c’est possible :</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span></div><pre><code class="hljs language-py"> nb_sort = []
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> listB:
nb_sort_i = transformation[i]
nb_sort.append(nb_sort_i)
nb_sort.sort()
</code></pre></div>
<p>devient</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span></div><pre><code class="hljs language-py"> nb_sort = [transformation[i] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> listB]
nb_sort.sort()
</code></pre></div>
<p>Un article de ZdS qui donne explique quelques "directions" lorsqu’on programme en python <a href="https://zestedesavoir.com/articles/1079/les-secrets-dun-code-pythonique/">https://zestedesavoir.com/articles/1079/les-secrets-dun-code-pythonique/</a></p>
<p>Bonne continuation et bon apprentissage ! <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>Optimiser mon code d'interface tkinter, message #2348262021-06-01T15:08:18+02:00mathieu972/@mathieu972https://zestedesavoir.com/forums/sujet/15363/optimiser-mon-code-dinterface-tkinter/?page=1#p234826<p>Merci beaucoup pour votre aide ! Grace à cela nous avons eu une excellente note.
Voici le lien github si quelqu’un veut jeter un coup d’œil :
<a href="https://github.com/EENG-Tarot/S2-Optional-Project---Card-Game">https://github.com/EENG-Tarot/S2-Optional-Project—-Card-Game</a>
(soyez indulgent c’est notre premier semestre de python)</p>Optimiser mon code d'interface tkinter, message #2344762021-05-23T17:09:49+02:00Jeph/@Jephhttps://zestedesavoir.com/forums/sujet/15363/optimiser-mon-code-dinterface-tkinter/?page=1#p234476<p>Sauvegarder les images dans une liste contenue dans le scope englobant semble résoudre le problème pour les images mais je ne sais pas t’expliquer le pourquoi, peut-être une histoire d’image qui est garbage collectée (voir <a href="https://stackoverflow.com/questions/22200003/tkinter-button-not-showing-image">https://stackoverflow.com/questions/22200003/tkinter-button-not-showing-image</a>).</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span></div><pre><code class="hljs language-py">
<span class="hljs-keyword">from</span> tkinter <span class="hljs-keyword">import</span> *
root = Tk()
root.title(<span class="hljs-string">"title"</span>)
Label(root, text = <span class="hljs-string">"txtButton"</span>, font =(<span class="hljs-string">'Verdana'</span>, <span class="hljs-number">10</span>)).pack()
listA = [(<span class="hljs-number">1</span>, <span class="hljs-string">"H"</span>), (<span class="hljs-number">2</span>, <span class="hljs-string">"H"</span>), (<span class="hljs-number">3</span>, <span class="hljs-string">"H"</span>), (<span class="hljs-number">7</span>, <span class="hljs-string">"H"</span>), (<span class="hljs-number">8</span>, <span class="hljs-string">"H"</span>)]
images = []
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> listA:
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'H'</span>: shape = <span class="hljs-string">'coeur'</span>
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'D'</span>: shape = <span class="hljs-string">'carreau'</span>
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'C'</span>: shape = <span class="hljs-string">'treffles'</span>
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'S'</span>: shape = <span class="hljs-string">'pic'</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test</span>(<span class="hljs-params">a, b</span>):</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test2</span>():</span>
root.destroy()
<span class="hljs-keyword">with</span> open(<span class="hljs-string">"CardChoosen.txt"</span>, <span class="hljs-string">"w"</span>) <span class="hljs-keyword">as</span> f:
f.write(<span class="hljs-string">"('{}', '{}')"</span>.format(a, b))
<span class="hljs-keyword">return</span> test2
photo = PhotoImage(...)
images.append(photo)
button = Button(root, image = photo, command=test(i[<span class="hljs-number">0</span>], i[<span class="hljs-number">1</span>]))
button.pack(side = LEFT)
...
</code></pre></div>
<p>P.S non lié: de manière générale, pour rendre ton code plus propre peut-être est-il intéressant d’abstraire ta structure de carte dans une classe. Et le code du type :</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span></div><pre><code class="hljs language-py"> <span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'H'</span>: shape = <span class="hljs-string">'coeur'</span>
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'D'</span>: shape = <span class="hljs-string">'carreau'</span>
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'C'</span>: shape = <span class="hljs-string">'treffles'</span>
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'S'</span>: shape = <span class="hljs-string">'pic'</span>
</code></pre></div>
<p>dans des fonctions (ex: get_shape_from_shape_abbreviation).</p>Optimiser mon code d'interface tkinter, message #2344742021-05-23T16:55:05+02:00mathieu972/@mathieu972https://zestedesavoir.com/forums/sujet/15363/optimiser-mon-code-dinterface-tkinter/?page=1#p234474<p>d’accord je vais aller voir ça merci beaucoup ! </p>Optimiser mon code d'interface tkinter, message #2344732021-05-23T16:52:14+02:00Jeph/@Jephhttps://zestedesavoir.com/forums/sujet/15363/optimiser-mon-code-dinterface-tkinter/?page=1#p234473<p>Il y a, je pense un problème de closure dans ton code, même en cliquant sur les boutons (sans aucune photo) c’est systématiquement le même print qui est affiché.</p>
<p>Tu peux voir plus de détails sur ce cours : <a href="https://zestedesavoir.com/tutoriels/3163/variables-scopes-et-closures-en-python/">https://zestedesavoir.com/tutoriels/3163/variables-scopes-et-closures-en-python/</a></p>
<p>Tu peux fixer les variables en les passant en paramètres d’une fonction (qui renverra la fonction test()) pour pallier à ce problème (voir code ci-dessous, attention à utiliser des noms de variables plus explicites).</p>
<div class="hljs-code-div hljs-code-py"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span></div><pre><code class="hljs language-py"><span class="hljs-keyword">from</span> tkinter <span class="hljs-keyword">import</span> *
root = Tk()
root.title(<span class="hljs-string">"title"</span>)
Label(root, text = <span class="hljs-string">"txtButton"</span>, font =(<span class="hljs-string">'Verdana'</span>, <span class="hljs-number">10</span>)).pack()
listA = [(<span class="hljs-number">1</span>, <span class="hljs-string">"H"</span>), (<span class="hljs-number">2</span>, <span class="hljs-string">"H"</span>), (<span class="hljs-number">3</span>, <span class="hljs-string">"H"</span>), (<span class="hljs-number">7</span>, <span class="hljs-string">"H"</span>), (<span class="hljs-number">8</span>, <span class="hljs-string">"H"</span>)]
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> listA:
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'H'</span>: shape = <span class="hljs-string">'coeur'</span>
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'D'</span>: shape = <span class="hljs-string">'carreau'</span>
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'C'</span>: shape = <span class="hljs-string">'treffles'</span>
<span class="hljs-keyword">if</span> i[<span class="hljs-number">1</span>] == <span class="hljs-string">'S'</span>: shape = <span class="hljs-string">'pic'</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test</span>(<span class="hljs-params">a, b</span>):</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test2</span>():</span>
root.destroy()
<span class="hljs-keyword">with</span> open(<span class="hljs-string">"CardChoosen.txt"</span>, <span class="hljs-string">"w"</span>) <span class="hljs-keyword">as</span> f:
f.write(<span class="hljs-string">"('{}', '{}')"</span>.format(a, b))
<span class="hljs-keyword">return</span> test2
button = Button(root, command=test(i[<span class="hljs-number">0</span>], i[<span class="hljs-number">1</span>]))
button.pack(side = LEFT)
...
</code></pre></div>
<p>À priori le problème des images est dans la même veine.</p>Optimiser mon code d'interface tkinter, message #2344712021-05-23T16:28:32+02:00mathieu972/@mathieu972https://zestedesavoir.com/forums/sujet/15363/optimiser-mon-code-dinterface-tkinter/?page=1#p234471<p>Je vous remercie beaucoup pour votre réponse.
j’ai essayé ce que vous m’avez conseiller (en espérant avoir bien compris).</p>
<p>Cependant lorsque je fais tourner le code il n’y a plus d’affiché que la dernière carte :
(le reste sont des boutons vide)</p>
<p>def CardsInterface(listA, txtButton, txtTitle):</p>
<div class="hljs-code-div hljs-code-scheme"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span><span data-count="28"></span></div><pre><code class="hljs language-scheme">root = Tk()
root.title(<span class="hljs-name">txtTitle</span>)
Label(<span class="hljs-name">root</span>, text = txtButton, font =(<span class="hljs-symbol">'Verdana</span>', <span class="hljs-number">10</span>)).pack()
for i in listA:
if i[<span class="hljs-name">1</span>] == <span class="hljs-symbol">'H</span><span class="hljs-symbol">':</span> shape = <span class="hljs-symbol">'coeur</span>'
if i[<span class="hljs-name">1</span>] == <span class="hljs-symbol">'D</span><span class="hljs-symbol">':</span> shape = <span class="hljs-symbol">'carreau</span>'
if i[<span class="hljs-name">1</span>] == <span class="hljs-symbol">'C</span><span class="hljs-symbol">':</span> shape = <span class="hljs-symbol">'treffles</span>'
if i[<span class="hljs-name">1</span>] == <span class="hljs-symbol">'S</span><span class="hljs-symbol">':</span> shape = <span class="hljs-symbol">'pic</span>'
def test():
root.destroy()
with open(<span class="hljs-string">"CardChoosen.txt"</span>, <span class="hljs-string">"w"</span>) as f:
f.write(<span class="hljs-string">"('{}', '{}')"</span>.format(<span class="hljs-name">i</span>[<span class="hljs-name">0</span>], i[<span class="hljs-name">1</span>]))
photo = PhotoImage(<span class="hljs-name">file</span> =<span class="hljs-string">"{}\\{}_{}.png"</span>.format(<span class="hljs-name">shape</span>, i[<span class="hljs-name">0</span>], shape), height=300, width=198).subsample(<span class="hljs-name">3</span>)
button = Button(<span class="hljs-name">root</span>, image = photo, command=test)
button.pack(<span class="hljs-name">side</span> = LEFT)
root.mainloop()
with open(<span class="hljs-string">"CardChoosen.txt"</span>, <span class="hljs-string">"r"</span>) as f:
otherVariable = f.read()
print(<span class="hljs-name">otherVariable</span>)
for i in listA:
if str(<span class="hljs-name">i</span>) == otherVariable: return listA.index(<span class="hljs-name">i</span>)
</code></pre></div>
<p>#exemple</p>
<p>deck = [(’1', 'H’), (’2', 'H’), (’3', 'H’), (’7', 'H’), (’8', 'H’)]
print(CardsInterface(deck, 'test’, 'test’))</p>Optimiser mon code d'interface tkinter, message #2344702021-05-23T15:51:12+02:00Jeph/@Jephhttps://zestedesavoir.com/forums/sujet/15363/optimiser-mon-code-dinterface-tkinter/?page=1#p234470<p>Bonjour,</p>
<p>Au lieu de répéter le code que tu fais tu dois l’associer par rapport à la carte courante.</p>
<div class="hljs-code-div hljs-code-python"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span></div><pre><code class="hljs language-python"> <span class="hljs-keyword">if</span> i == (<span class="hljs-string">'1'</span>,<span class="hljs-string">'H'</span>):
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test</span>():</span>
root.destroy()
<span class="hljs-keyword">with</span> open(<span class="hljs-string">"CardChoosen.txt"</span>, <span class="hljs-string">"w"</span>) <span class="hljs-keyword">as</span> f:
f.write(<span class="hljs-string">"('1', 'H')"</span>)
photo1H = PhotoImage(file =<span class="hljs-string">"COEUR\\1_coeur.png"</span>, height=<span class="hljs-number">300</span>, width=<span class="hljs-number">198</span>).subsample(<span class="hljs-number">3</span>)
button1H = Button(root, image = photo1H, command=test)
button1H.pack(side = LEFT)
</code></pre></div>
<p>Dans l’idée tu transformes le code en quelque chose comme cela :</p>
<div class="hljs-code-div hljs-code-python"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span></div><pre><code class="hljs language-python"> shape = get_shape(i[<span class="hljs-number">1</span>]) // associer le signe de la carte à la chaine correspondante
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test</span>():</span>
root.destroy()
<span class="hljs-keyword">with</span> open(<span class="hljs-string">"CardChoosen.txt"</span>, <span class="hljs-string">"w"</span>) <span class="hljs-keyword">as</span> f:
f.write(<span class="hljs-string">"(i[0], i[1])"</span>)
photo = PhotoImage(file =<span class="hljs-string">"{}\\{}_{}.png"</span>.format(shape, i[<span class="hljs-number">0</span>], shape), height=<span class="hljs-number">300</span>, width=<span class="hljs-number">198</span>).subsample(<span class="hljs-number">3</span>)
button = Button(root, image = photo, command=test)
button.pack(side = LEFT)
</code></pre></div>
<p>En gros tu dois juste écrire une fonction qui à une valeur et un signe va avoir le comportement que tu souhaites (tu as un début d’idée dans le deuxième extrait de code). Puis appeler cette fonction pour chacune des cartes dans ta boucle for.</p>Optimiser mon code d'interface tkinter, message #2344682021-05-23T15:38:36+02:00mathieu972/@mathieu972https://zestedesavoir.com/forums/sujet/15363/optimiser-mon-code-dinterface-tkinter/?page=1#p234468<p>Bonjour,
pour un projet d’école je dois coder un tarot.
A un moment j’aimerai faire une def pour afficher à partir d’une liste de str, les cartes correspondantes. On aurait donc à cliquer sur la carte et la def devrait return le rang de cette carte dans la liste d’origine.</p>
<p>sachant que la listA est sous cette forme : listA = [(’1',’H'), (’2',’H'), (’K',’H')]
=> ce qui correspond à (as de coeur), (2 de coeur), (roi de coeur).</p>
<p>def CardsInterface(listA, txtButton, txtTitle):</p>
<div class="hljs-code-div hljs-code-scheme"><div class="hljs-line-numbers"><span data-count="1"></span><span data-count="2"></span><span data-count="3"></span><span data-count="4"></span><span data-count="5"></span><span data-count="6"></span><span data-count="7"></span><span data-count="8"></span><span data-count="9"></span><span data-count="10"></span><span data-count="11"></span><span data-count="12"></span><span data-count="13"></span><span data-count="14"></span><span data-count="15"></span><span data-count="16"></span><span data-count="17"></span><span data-count="18"></span><span data-count="19"></span><span data-count="20"></span><span data-count="21"></span><span data-count="22"></span><span data-count="23"></span><span data-count="24"></span><span data-count="25"></span><span data-count="26"></span><span data-count="27"></span><span data-count="28"></span><span data-count="29"></span><span data-count="30"></span><span data-count="31"></span><span data-count="32"></span><span data-count="33"></span><span data-count="34"></span><span data-count="35"></span><span data-count="36"></span></div><pre><code class="hljs language-scheme">root = Tk()
root.title(<span class="hljs-name">txtTitle</span>)
Label(<span class="hljs-name">root</span>, text = txtButton, font =(<span class="hljs-symbol">'Verdana</span>', <span class="hljs-number">10</span>)).pack()
for i in listA:
if i == (<span class="hljs-symbol">'1</span>',<span class="hljs-symbol">'H</span>'):
def test():
root.destroy()
with open(<span class="hljs-string">"CardChoosen.txt"</span>, <span class="hljs-string">"w"</span>) as f:
f.write(<span class="hljs-string">"('1', 'H')"</span>)
photo<span class="hljs-number">1</span>H = PhotoImage(<span class="hljs-name">file</span> =<span class="hljs-string">"COEUR\\1_coeur.png"</span>, height=300, width=198).subsample(<span class="hljs-name">3</span>)
button<span class="hljs-number">1</span>H = Button(<span class="hljs-name">root</span>, image = photo1H, command=test)
button<span class="hljs-number">1</span>H.pack(<span class="hljs-name">side</span> = LEFT)
if i == (<span class="hljs-symbol">'2</span>',<span class="hljs-symbol">'H</span>'):
def test():
root.destroy()
with open(<span class="hljs-string">"CardChoosen.txt"</span>, <span class="hljs-string">"w"</span>) as f:
f.write(<span class="hljs-string">"('2', 'H')"</span>)
photo<span class="hljs-number">2</span>H = PhotoImage(<span class="hljs-name">file</span> =<span class="hljs-string">"COEUR\\2_coeur.png"</span>, height=300, width=198).subsample(<span class="hljs-name">3</span>)
button<span class="hljs-number">2</span>H = Button(<span class="hljs-name">root</span>, image = photo2H, command=test)
button<span class="hljs-number">2</span>H.pack(<span class="hljs-name">side</span> = LEFT)
#if pour chacune des <span class="hljs-number">78</span> cartes !!!
root.mainloop()
with open(<span class="hljs-string">"CardChoosen.txt"</span>, <span class="hljs-string">"r"</span>) as f:
otherVariable = f.read()
print(<span class="hljs-name">otherVariable</span>)
for i in listA:
if str(<span class="hljs-name">i</span>) == otherVariable: return listA.index(<span class="hljs-name">i</span>)
</code></pre></div>
<p>La définition fonctionne mais comme vous pouvez le voir c’est vraiment pas optimisé car: </p>
<ul>
<li>il faut que je fasse un if pour les 78 cartes</li>
<li>pour obtenir la valeur de la carte sur laquelle j’ai cliqué je dois l’écrire sur un fichier texte puis la récupérée et enfin trouver son rang dans la liste d’origine</li>
</ul>
<p>J’aimerai donc savoir si quelqu’un saurait comment simplifier ce code ? Au moins pour que je n’ai pas à faire 8 lignes pour chaque carte ?</p>Création d'une map en html/css/js pour un jeu vidéo, message #2081822019-09-03T15:03:51+02:00Elaine/@Elainehttps://zestedesavoir.com/forums/sujet/12957/creation-dune-map-en-htmlcssjs-pour-un-jeu-video/?page=1#p208182<p>ah merci pour ta réponse Shikamarus_Shadows.</p>
<p>Si je résume ce que tu me dis de faire, c’est de passer par des div que j’empile de manière classique finalement. Pas de balise area ou map.
Je ne souhaite pas faire de déplacement donc pas de mouvement.</p>
<p>La map doit être créé en procédurale car chaque joueur aura sa carte personnalisée.</p>
<p>Merci pour le tuto d’image overlap.</p>Création d'une map en html/css/js pour un jeu vidéo, message #2081712019-09-03T13:32:03+02:00Shikamarus_Shadows/@Shikamarus_Shadowshttps://zestedesavoir.com/forums/sujet/12957/creation-dune-map-en-htmlcssjs-pour-un-jeu-video/?page=1#p208171<p><a href="http://www.corelangs.com/css/box/ontop.html">http://www.corelangs.com/css/box/ontop.html</a>
<a href="http://www.webdesigndev.com/position-one-image-image-css/">http://www.webdesigndev.com/position-one-image-image-css/</a>
Tiens ça devrait faire ton bonheur. Par contre pour pas avoir un truc dégueulasse blanc tout ça, va falloir jouer avec le rgba ( indice : le 'a' ).
J’ajoute que si tu n’as jamais fais de web, ou en tout cas pas suffisamment pour te sentir vraiment à l’aise dessus, tu devrais commencer par expérimenter hors du cadre de ton jeu. J’explicite :</p>
<ul>
<li>Essaie de faire bouger une image. A part</li>
<li>Essaie de créer la map. A part.</li>
<li>Essaie de superpositionner deux images. Ensuite ajoute cette mécanique à ta map</li>
<li>Inclus la mécanique de mouvement d’images pour la seconde image, celle du curseur pointant sur le joueur.
Tu verras que tu as déjà énormément de boulot rien qu’avec ça.
En tout cas bonne chance dans ton projet <img src="/static/smileys/heureux.png" alt=":D" class="smiley"></li>
</ul>
<p>Shika</p>Création d'une map en html/css/js pour un jeu vidéo, message #2081622019-09-03T11:27:35+02:00Elaine/@Elainehttps://zestedesavoir.com/forums/sujet/12957/creation-dune-map-en-htmlcssjs-pour-un-jeu-video/?page=1#p208162<p>Bonjour,</p>
<p>Je viens à vous car je suis actuellement en train de coder un jeu par navigateur et je me heurte à un problème.
Je souhaiterais faire une carte diviser en 25 cases par 25 (un carré donc). Je vais résumer les contraintes :</p>
<ul>
<li>Dimension de 25 carrés par 25</li>
<li>Une image par carré qui représente un type de décor (forêt, plaine, eau, ville)</li>
<li>Une image en forme de pointeur qui se superpose pour indiquer la position du joueur sur un carré donné</li>
</ul>
<p>Je ne sais pas tellement par où commencer et je ne sais pas non plus superposer deux images en css si c’est possible. Avez-vous des tuyaux pour démarrer ce chantier ?</p>
<p>Si vous avez besoin de plus de précisions n’hésitez pas. Il y aurai bien les balises map et area. Suis je dans la bonne voie ?</p>flightradar24, où récupére-t-il les infos ?, message #2010982019-03-30T01:10:44+01:00zeqL/@zeqLhttps://zestedesavoir.com/forums/sujet/12217/flightradar24-ou-recupere-t-il-les-infos/?page=1#p201098<p>La base de données de la FAA est disponible : <a href="https://registry.faa.gov/aircraftinquiry/Aircraft_Inquiry.aspx">https://registry.faa.gov/aircraftinquiry/Aircraft_Inquiry.aspx</a></p>
<p>L’autorité de régulation islandaise met aussi la base à disposition : <a href="https://www.icetra.is/aviation/aircraft/register/">https://www.icetra.is/aviation/aircraft/register/</a></p>
<p>Pour les dessous de Flightradar24, regarde plutôt : <a href="https://fr.flightaware.com/adsb/">https://fr.flightaware.com/adsb/</a> <img src="/static/smileys/clin.png" alt=";)" class="smiley"></p>flightradar24, où récupére-t-il les infos ?, message #2002632019-03-11T23:56:52+01:00SpaceFox/@SpaceFoxhttps://zestedesavoir.com/forums/sujet/12217/flightradar24-ou-recupere-t-il-les-infos/?page=1#p200263<p>Ça il faudrait leur demander directement, mais je pense que le crowdsourcing concerne l’envoi de positions d’avions à Flightradar24 et pas leur utilisation. Beaucoup de fonctionnalités « avancées » sont payantes.</p>flightradar24, où récupére-t-il les infos ?, message #2002622019-03-11T23:54:23+01:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/12217/flightradar24-ou-recupere-t-il-les-infos/?page=1#p200262<blockquote>
<p>Je ne suis pas sûr de ce que tu entends par « privé ».</p>
</blockquote>
<p>Je voudrais savoir quels sont ses bases de données (CrowdSourcing) utilisaient en source. Si je souhaite afficher un avion quel service dois-je utiliser ?</p>
<hr>
<p>J’aimerais faire une petite application pour les voyageurs. Avant le départ, l’application va calculer en fonction de l’heure de départ et de l’historique des trajets sa position probable à une heure donnée, ainsi si on regarde dans le hublot dans un ciel semi-nuageux, on peut deviner la ville où on se situe. <img src="/static/smileys/heureux.png" alt=":D" class="smiley"></p>flightradar24, où récupére-t-il les infos ?, message #2002592019-03-11T23:31:28+01:00SpaceFox/@SpaceFoxhttps://zestedesavoir.com/forums/sujet/12217/flightradar24-ou-recupere-t-il-les-infos/?page=1#p200259<p>Je ne suis pas sûr de ce que tu entends par « privé ». Cf <a href="https://fr.wikipedia.org/wiki/Automatic_dependent_surveillance-broadcast">ceci pour les détails</a>, <a href="https://en.wikipedia.org/wiki/Flightradar24#Tracking">ceci pour le cas particulier de Flightradar24</a>, et si j’en crois ce dernier lien ta propre documentation pour l’appareil qui est installé en ton sein (c’est un standard chez Airbus).</p>flightradar24, où récupére-t-il les infos ?, message #2002582019-03-11T23:28:31+01:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/12217/flightradar24-ou-recupere-t-il-les-infos/?page=1#p200258<p>Ces ADS-B sont privés ?</p>flightradar24, où récupére-t-il les infos ?, message #2002572019-03-11T22:58:19+01:00SpaceFox/@SpaceFoxhttps://zestedesavoir.com/forums/sujet/12217/flightradar24-ou-recupere-t-il-les-infos/?page=1#p200257<p><a href="https://fr.wikipedia.org/wiki/Flightradar24">Via les transpondeurs (données récupérées via <em>crowdsourcing</em>) et des base de données d’informations publiques en ce qui concerne les vols commerciaux et les données sur les avions</a><sup id="fnref-1-mtJxOe8cN"><a href="#fn-1-mtJxOe8cN" class="footnote-ref">1</a></sup>.</p>
<div class="footnotes">
<hr>
<ol>
<li id="fn-1-mtJxOe8cN">
<p>Systèmes ADS-B, qui est techniquement un transpondeur, ou FLARM, qui n’en est pas techniquement un mais qui permet quand même ce genre de suivi.</p>
<a href="#fnref-1-mtJxOe8cN" class="footnote-backref" title="Retourner au texte de la note 1">↩</a>
</li>
</ol>
</div>flightradar24, où récupére-t-il les infos ?, message #2002562019-03-11T22:54:07+01:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/12217/flightradar24-ou-recupere-t-il-les-infos/?page=1#p200256<p>Bonjour,</p>
<p>Je voudrais savoir où est-ce que l’application flightradar24 (ou équivalent) récupère leurs informations ?</p>
<p>Bon vol,</p>
<p>A.</p>