IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Aidez un noob à finir son premier script


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Aidez un noob à finir son premier script
    Bonjour/bonsoir,

    comme vous pouvez le voir, je suis nouveau ici. Je me présente en quelques mots: je suis titulaire d'un bac L et étudiant en philo. J'au beau m'intéresser depuis toujours aux ordinateurs, je me suis rendu compte sur le tard que je ne savais quasiment rien de leur fonctionnement (j'aime mettre ça sur le dos de Windows)
    Je pars de loin (toute une adolescence gâchée à bouquiner au lieu de me rapprocher de mon vrai amour - les machines) et j'ai commencé à m'intéresser au ba-ba la programmation; en tant que L le Python est un langage qui m'a immédiatement attiré pour sa lisibilité; tous les bouts de code me semblaient visuellement rébarbatifs jusqu'au mal de ventre, mais le Python au contraire me semblait presque mignon (mon rêve ultime est d'écrire un programme en LOLCODE un jour, mais avant ça il va déjà falloir apprendre à programmer et c'est pas de la tarte!), c'est pourquoi je me retrouve sur ce forum précis. J'ai conscience qu'il y a bon nombre de ressources en ligne sur le Python, et d'excellente qualité pour la plupart, ça se sent et c'est un plaisir à apprendre. Mais néanmoins je galère, ce domaine n'a aucun rapport avec ma formation et j'en sais surtout que je n'en sais rien: c'est pourquoi je me permet de poster ici, je crois que pour ma problématique précise l'aide d'êtres humains me sera plus précieuse que les encyclopédies en ligne ^^. En outre mes rares potes qui touchent un peu à la prog ne jurent que par C et ont été incapables de m'aider.

    Trêve de blabla: j'ai naturellement du mal à écrire mon premier script, bien que l'idée soit claire dans ma tête. Le but est de résumer la table de push de Sklansky & Chubukov au poker, pour ceux à qui ça parle. Sinon, concrètement, il s'agit d'attribuer une valeur (x) à chaque main possible au texas hold'em, puis d'appliquer un calcul [(x / 2) / y] où y est le nombre de joueurs suivants, de sorte qu'en indiquant au script ma main (x) et le nombre de joueurs (y), il puisse me m'indiquer la décision mathématiquement raisonnable: "si tu as moins de Z grosses blindes tu devrais push/fold/call". Pour l'instant je bloque sur le push, mais j'ai bon espoir d'arriver à intégrer le reste une fois que cette base tournera.

    Pour ça, j'ai d'abord voulu créer un dictionnaire où chaque main de hold'em (string/clé ? je sais pas trop) correspond à une valeur numérique. Puis demander un input de main, du même format. Vérifier que l'input corresponde bien à une entrée du dictionnaire. Puis, en en déduisant x, demander le nombre y de joueurs à suivre. Et enfin, appliquer [(x / 2) / y]. C'est l'idée de base, ça me semble pas sorcier, mais pourtant je sens que je galère sur des choses simples telles que la syntaxe.

    Donc voici mon ébauche pour le moment. Je souligne & gras les parties sur lesquelles je doute le plus. Merci par avance à ceux qui prendront le temps de me lire, de m'éclairer et critiquer. J'espère que la simplicité de la tâche à accomplir & la probable naïveté dans mon code vous détendra au lieu de vous irriter j'ai un peu navigué sur le forum et ça n'a pas l'air d'un endroit pour néophytes, mais d'un autre côté, je n'ai pas trouvé de meilleur endroit francophone où tenter ma chance!

    PoF.py
    /!\ sautez à la fin, le début-milieu n'est que le dictionnaire, a priori inintéressant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    #!/usr/bin/env python
    
    nlh_hands = dict()
    nlh_hands['AA'] = 999999999
    nlh_hands['KK'] = 953.99547
    nlh_hands['AKs'] = 554.50999
    nlh_hands['QQ'] = 478.0082
    nlh_hands['AKo'] = 331.88718
    nlh_hands['JJ'] = 319.21359
    nlh_hands['AQs'] = 274.211119
    nlh_hands['TT'] = 239.82102
    nlh_hands['AQo'] = 192.67022
    nlh_hands['99'] = 191.41393
    nlh_hands['AJs'] =183.22134
    nlh_hands['88'] = 159.29689
    nlh_hands['ATs'] = 138.91308
    nlh_hands['AJo'] =136.31047  
    nlh_hands['77'] = 134.84771
    nlh_hands['66'] = 115.34853
    nlh_hands['ATo'] =  106.26471
    nlh_hands['A9s'] = 104.12479
    nlh_hands['55'] = 98.62987
    nlh_hands['A8s'] = 89.86565
    nlh_hands['KQs'] = 86.6277
    nlh_hands['44'] = 81.97959
    nlh_hands['A9o'] =  81.7172
    nlh_hands['A7s'] = 79.17591
    nlh_hands['KJs'] = 72.62126
    nlh_hands['A5s'] =72.29213
    nlh_hands['A8o'] = 70.95651
    nlh_hands['A6s'] = 70.74453
    nlh_hands['A4s'] = 66.65053
    nlh_hands['33'] = 65.44082
    nlh_hands['KTs'] = 62.80556
    nlh_hands['A7o'] =  62.74775
    nlh_hands['A3s'] = 62.27532
    nlh_hands['KQo'] = 58.77166
    nlh_hands['A2s'] = 58.14199
    nlh_hands['A5o'] = 56.54209
    nlh_hands['A6o'] =  56.15123
    nlh_hands['A4o'] = 51.93949
    nlh_hands['KJo'] = 50.83879
    nlh_hands['QJs'] = 49.51544
    nlh_hands['A3o'] = 48.44544
    nlh_hands['22'] = 48.05412
    nlh_hands['K9s'] = 47.81236
    nlh_hands['A2o'] = 45.17234
    nlh_hands['KTo'] = 44.94654
    nlh_hands['QTs'] = 43.80946
    nlh_hands['K8s'] = 39.91081
    nlh_hands['K7s'] = 37.33065
    nlh_hands['JTs'] = 36.10652
    nlh_hands['K9o'] = 35.75415
    nlh_hands['K6s'] = 34.89
    nlh_hands['QJo'] = 32.81682
    nlh_hands['Q9s'] = 32.51971
    nlh_hands['K5s'] = 32.30333
    nlh_hands['K8o'] = 30.47389
    nlh_hands['K4s'] = 30.16328
    nlh_hands['QTo'] = 29.7164
    nlh_hands['K7o'] = 28.54118
    nlh_hands['K3s'] = 28.38181
    nlh_hands['K2s'] = 26.73084
    nlh_hands['Q8s'] = 26.71855
    nlh_hands['K6o'] = 26.67571
    nlh_hands['J9s'] = 25.71252
    nlh_hands['K5o'] = 24.68097
    nlh_hands['Q9o'] = 23.41954
    nlh_hands['JTo'] = 23.08525
    nlh_hands['K4o'] = 22.84502
    nlh_hands['Q7s'] = 22.68524
    nlh_hands['T9s'] = 22.49148
    nlh_hands['Q6s'] = 21.78516
    nlh_hands['K3o'] = 21.78516
    nlh_hands['J8s'] = 20.63624
    nlh_hands['Q5s'] = 20.32186
    nlh_hands['K2o'] = 19.99942
    nlh_hands['Q8o'] = 19.81933
    nlh_hands['Q4s'] = 18.91635
    nlh_hands['J9o'] = 17.79938
    nlh_hands['Q3s'] = 17.73401
    nlh_hands['T8s'] = 17.46571
    nlh_hands['J7s'] = 17.19452
    nlh_hands['Q7o'] = 17.07734 
    nlh_hands['Q2s'] = 16.64103
    nlh_hands['Q6o'] = 16.29514
    nlh_hands['98s'] = 15.29334
    nlh_hands['Q5o'] = 15.03498
    nlh_hands['J8o'] = 14.86776
    nlh_hands['T9o'] = 14.83221
    nlh_hands['J6s'] = 14.7186
    nlh_hands['T7s'] = 14.19943
    nlh_hands['J5s'] = 14.04842
    nlh_hands['Q4o'] = 13.66217
    nlh_hands['J4s'] = 12.95547
    nlh_hands['J7o'] = 12.66604
    nlh_hands['Q3o'] = 12.50323
    nlh_hands['97s'] = 12.25142
    nlh_hands['T8o'] = 12.15698
    nlh_hands['J3s'] = 12.04034
    nlh_hands['T6s'] = 11.92109
    nlh_hands['Q2o'] = 11.30295
    nlh_hands['J2s'] = 11.13873
    nlh_hands['87s'] = 11.11055
    nlh_hands['J6o'] = 10.78068
    nlh_hands['98o'] = 10.27126
    nlh_hands['T7o'] = 10.20476
    nlh_hands['96s'] = 10.09767
    nlh_hands['J5o'] = 9.98729
    nlh_hands['T5s'] = 9.9469
    nlh_hands['T4s'] = 9.26007
    nlh_hands['86s'] = 8.99475
    nlh_hands['J4o'] = 8.90624
    nlh_hands['T6o'] = 8.57196
    nlh_hands['97o'] = 8.57096
    nlh_hands['T3s'] = 8.41572
    nlh_hands['76s'] = 8.31842
    nlh_hands['95s'] = 8.26104
    nlh_hands['J3o'] = 7.91472
    nlh_hands['T2s'] = 7.50573
    nlh_hands['87o'] = 7.50573
    nlh_hands['85s'] = 7.23917
    nlh_hands['96o'] = 7.07415
    nlh_hands['T5o'] = 6.92096
    nlh_hands['J2o'] = 6.88577
    nlh_hands['75s'] = 6.59416
    nlh_hands['94s'] = 6.58364
    nlh_hands['T4o'] = 6.20739
    nlh_hands['65s'] = 6.20739
    nlh_hands['86o'] = 6.09984
    nlh_hands['93s'] = 6.05899
    nlh_hands['84s'] = 5.69277
    nlh_hands['95o'] = 5.65083
    nlh_hands['T3o'] = 5.48042
    nlh_hands['76o'] = 5.43913
    nlh_hands['92s'] = 5.35930
    nlh_hands['74s'] = 5.1092
    nlh_hands['54s'] = 4.85029
    nlh_hands['T2o'] = 4.83225
    nlh_hands['85o'] = 4.81223
    nlh_hands['64s'] = 4.76922
    nlh_hands['83s'] = 4.46381
    nlh_hands['94o'] = 4.34578
    nlh_hands['75o'] = 4.2698
    nlh_hands['82s'] = 4.129
    nlh_hands['73s'] = 4.018
    nlh_hands['93o'] = 4.0002
    nlh_hands['65o'] = 3.972
    nlh_hands['53s'] = 3.851
    nlh_hands['63s'] = 3.777
    nlh_hands['84o'] = 3.737
    nlh_hands['92o'] = 3.5852
    nlh_hands['43s'] = 3.4021
    nlh_hands['74o'] = 3.3662
    nlh_hands['72s'] = 3.2215
    nlh_hands['54o'] = 3.2212
    nlh_hands['64o'] = 3.1703
    nlh_hands['52s'] = 3.115
    nlh_hands['62s'] = 3.0548
    nlh_hands['83o'] = 2.9948
    nlh_hands['42s'] = 2.7962
    nlh_hands['82o'] = 2.7958
    nlh_hands['73o'] = 2.7319
    nlh_hands['53o'] = 2.6402
    nlh_hands['63o'] = 2.5913
    nlh_hands['32s'] = 2.5674
    nlh_hands['43o'] = 2.366
    nlh_hands['72o'] = 2.2433
    nlh_hands['52o'] = 2.1816
    nlh_hands['62o'] = 2.1397
    nlh_hands['42o'] = 1.9761
    nlh_hands['32o'] = 1.8253
    
    def PoF():
    	print "This is NashWizard. Pick your hand!"
    	hand = raw_input("Unless pairs, specify, strongest card first, if suited or offsuit. F.e. 33, A3o, J8s.")
    	if hand in nlh_hands == True:
    		huslas = raw_input("How many people to speak after you? (1-9, 1 is default)") 
    		def gg(): (hand / 2) / int(huslas)
    		if huslas == [1, 9]:
    			print "If you have less than %gg() big blinds you should PUSH!"
    		elif huslas == 0:
    			huslas = 1
    			print "If you have less than %gg() big blinds you should PUSH!"
    		else:
    			print "Woops, you have minimum 1 opponent, 9 maximum, try again please!"
    	else:
    		print "Start with the strongest card and specify if suited or offsuit. 79, 79o, 97 wont work, 97o will."
    
    PoF()
    Environnement: GNU/linux i386
    Erreur: le script arrive au premier raw_input, et peu importe ce que j'entre, il saute à la fin "you must start with..."

    J'ai pû m'emmêler les pinceaux entre python 2 et 3 vu que je n'ai jamais attention aux versions qu'utilisaient les tutos; mais surtout je sens qu'il faut faire quelque chose pour signifier que le premier raw_input doit correspondre à un objet dans le dictionnaire, seulement aucune idée de quoi. J'ai souligné ce qui me semble douteux. "if hand in nlh_hands == True:" m'a l'air particulièrement fautif, il a l'air de tout le temps être false, j'imagine qu'il faudrait à la fois que je précise que nlh_hands est un dictionnaire, et que "hand" est de même nature que les objets du dictionnaire... Pour l'autre point, j'ignore comment traduire "no-input" autrement que par 0 mais j'ignore si ça marche comme ça? Et j'ignore si le résultat de la fonction gg() ne sera pas sous forme "integer" vu qu'il y a un int() dans la formule ainsi qu'un objet "hand" de nature inconnue.. alors que je souhaiterais plutôt un résultat avec décimales.

    Bref merci d'avoir pris le temps, et en recherche d'indices!

    Barenziah

    /e: mini erreur de retranscription du code

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Comme tu débutes, je pars du principe que tu utilises Python 3.

    Tu peux simplifier l'écriture du dictionnaire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    nlh_hands = {'AA': 999999999,
                 'KK': 953.99547,
                 'AKs': 554.50999,
                 ...
                 '32o': 1.8253}
    Ici, aussi tu peux simplifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        if hand in nlh_hands:
    input remplace raw_input et si tu attends une valeur convertible en numérique, il faut anticiper une erreur d'entrée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            huslas = 0
            while not huslas:
                val = input("How many people to speak after you? (1-9, 1 is default)") or 1
                huslas = int(val)
            except ValueError:
                print('Woops, you have minimum 1 opponent, 9 maximum, try again please!')
    Les fonctions imbriquées doivent être justifiées. Ce n'est pas le cas ici. Il faut aussi passer à cette fonction les éléments dont elle a besoin et faire en sorte qu'elle retourne l'information nécessaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def compute(hand, players):
        return hand / 2 / players
    Quand tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		if huslas == [1, 9]:
    tu compares huslas à une liste contenant un 1 et un 9. Huslas n'est pas une liste mais un entier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		if 0 < huslas < 10:
    Tu peux supprimer ce bloc devenu inutile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		elif huslas == 0:
    			huslas = 1
    			print "If you have less than %gg() big blinds you should PUSH!"
    on l'a remplacé par or 1 avec l'input.

    Maintenant le formatage de ta chaîne demande un peu plus que ta formule magique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        print("If you have less than %s big blinds you should PUSH!" 
                % compute(nlh_hands[hand], husla))

    Ce sera loin d'être parfait comme ça, mais je te laisse le soin de résoudre les détails.


    Edit: j'ai modifié la boucle while.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Mmh, je vois que j'avais bel et bien embrouillé python 2 et 3, entre autres...

    Merci pour cette réponse détaillée, ça me donne de bonnes bases pour recommençer quelque chose de plus propre =). J'avais tenté la version simplifiée du dictionnaire à la base mais j'avais plein de syntax errors alors empiriquement j'ai réécrit en version lourde, et je n'ai plus eu de problème avec le dico, même si c'est sûrement pas génial..

    Je vais prendre le temps de bien comprendre et de bricoler ces différents points, puis je repasserais update ce post pour tenir informé ceux qui veulent de mon succès/ nouvelles difficultés.

    Merci encore d'avoir pris le temps de répondre, c'est encourageant!

Discussions similaires

  1. Tester son premier EJB
    Par jeoff dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 22/06/2006, 10h55
  2. [Débutant] ::. Premier script
    Par cyrill.gremaud dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 01/06/2006, 15h40
  3. Premier Script
    Par spiderman69 dans le forum Langage
    Réponses: 1
    Dernier message: 26/09/2005, 18h09
  4. [Mail] Comment créer son premier page en PHP
    Par gymac dans le forum Langage
    Réponses: 3
    Dernier message: 07/09/2005, 22h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo