Ma fonction ne marche pas

Résolu/Fermé
JFL - Modifié le 17 janv. 2022 à 14:45
 JFL - 13 janv. 2022 à 20:42
Bonjour,

Je suis débutant en python et me familiarise avec les fonctions . Qui pourrait m'aider car ma fonction jeu ne donne aucune réponse et je ne vois pas ce qui cloche.

Merci d'avance.

import random

s = 2001
random.seed(s)

a = 0
b = 1
c = 2
d = 1
e= 0

coup_o= random.randint(0,2)
coup_j=(a,b,c,d,e)

def jeu ():
    score_o = 0
    score_j = 0  
    # calculscore
    if coup_j == 0 and coup_o == 2 or coup_j == 1 and coup_o == 0 or coup_j == 2 and coup_o == 1:
            score_j = score_j + 1
            print ("gagne",score_j)
    elif coup_j == 0 and coup_o== 1 or coup_j == 1 and coup_o == 3 or coup_j == 2 and coup_o == 0:
            score_ordi = score_ordi + 1
            print ("perd",score_ordi + score_j)
    elif coup_j == 0 and coup_o == 0 or coup_j == 1 and coup_o == 1 or coup_j == 2 and coup_o == 2:
            score_j = score_j
            print("egal",score_o + score_j)
    return 

for i in coup_j:
    jeu()


Configuration: Windows / Firefox 95.0
A voir également:

3 réponses

yg_be Messages postés 22781 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 mai 2024 1 481
Modifié le 13 janv. 2022 à 19:07
bonjour,
merci de préciser le langage quand tu utilises les balises de code, comme expliqué: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ton code ne donne aucune réponse parce que ton
if
ne couvre pas toutes les combinaisons.
Pour t'en convaincre, ajoute
    else:
        print("autre")
avant la ligne où il y a le
return
:
1
yg_be Messages postés 22781 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 13 mai 2024 1 481
13 janv. 2022 à 19:13
SI j'étais toi, je ferais deux autres choses également:

1) ajouter ceci tout au début de la fonction:
    print("coups:" + str(coup_o) + " et "+str(coup_j))


2) commencer par des exercices plus simples
1
jee pee Messages postés 39713 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 13 mai 2024 9 270
13 janv. 2022 à 19:15
Bonjour,

Tu as une boucle for i et tu ne passes pas i à ta fonction, et tu ne l'utilises pas. Tu prends coup_j qui est une liste, pas une valeur unique, ce devrait être i.

Les 2 totaux des scores ne devraient pas être dans la boucle, par contre le coup_o devrait être dans la boucle pour être lancé à chaque fois.

PS : Pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
<> ▼
permet d'appliquer au code, suivant une liste de valeurs, le format correspondant à sa nature (C, Python, Shell, ...).
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
Merci pour tes suggestions. Effectivement je ne sais pas comment m'en sortir pour faire une boucle quand on a affaire à un tuple avec une série de valeurs à tester successivement. Où puis je trouver une méthode à appliquer.
0
jee pee Messages postés 39713 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 13 mai 2024 9 270
Modifié le 13 janv. 2022 à 20:57
Pour apprendre à savoir ce que fait ton programme, par où il passe, et ce que cotient chaque variable, il faut mettre des print, des fois après chaque ligne, c'est cela faire du debug quand le programme ne fonctionne pas comme on veut.

Ta boucle
for i in coup_j:
    jeu() 
est correcte, i va prendre une par une les valeurs de la liste coup_j. Mais alors dans ta fonction, ce n'est pas coup_j qu'il faut utiliser, mais i, qui est le jeu du joueur

0
Ah ok c'est top: enfin je réalise merci encore pour tes explications.
0