如何在事先不知道所需变量数量的情况下在循环中创建变量?

How to create variables in a loop without knowing the number of variables needed in advance?

我目前正在 Python 做一个学生项目。

游戏本身:

循环通过将手牌传给第二个玩家来完成它的工作。

选手打完后,我们看比分。 21 点或最接近的玩家在本轮获胜,其他人必须给“银行”一个标记。 (所以超过21的玩家本轮自动失去2个代币)。

当只有一名玩家还剩一个标记时,游戏停止。


我的问题

我看不出如何将玩家的总分和他们各自的代币存储在变量中。由于用户决定玩家数量,我无法预测变量。

我的代码

#Programme : Blackjack
#Auteur : Antoine Bauduffe MP

#Import
from random import randrange

#Variable(s) :
verifJoueur = False;
verifJeton = False;
verifRelance = False;
i = 1;
n = 1;
y = 1;
relance = 1;
scoreTotal = 0;
DN = 0;
ScoreJoueur = [];

#Interface :
print("\n");
print("<------------------------------------------------------------------->");
print("<---------------------------- BLACKJACK ---------------------------->");
print("<------------------------------------------------------------------->");

#Boucle demandant le nombre de joueur
while verifJoueur == False:
    try:
        nbJoueur = int(input("Veuillez indiquer le nombre de joueur : "));
        int(nbJoueur);
        if nbJoueur >= 1:
            verifJoueur = True;
        else:
            print("\n")
            print("[Un joueur est requis pour lancer une partie !]")
    except ValueError:
        print("\n")
        print("[Indiquer un nombre de joueur correct !]");
        
#Boucle demandant le nombre de jeton par joueur
while verifJeton == False:
    try:
        nbJetonsParJoueur = int(input("Veuillez indiquer le nombre de jeton par joueur (Pas plus de 10) : "));
        int(nbJetonsParJoueur);
        if nbJetonsParJoueur >= 1 and nbJetonsParJoueur <= 10:
            verifJeton = True;
        else:
            print("\n")
            print("[Les joueurs ne peuvent pas avoir moins de 1 jeton ni plus de 10 jetons !]")
    except ValueError:
        print("\n")
        print("[Indiquer un nombre de jeton correct !]");

#Résumé des paramètres
print("\n");
print("<------------------------------------------------------------------->");
print("Lancement d'une partie pour " + str(nbJoueur) + " joueur(s), possedant chacun " + str(nbJetonsParJoueur) + " jeton(s).");
print("<------------------------------------------------------------------->");
print("\n")

#Boucle des joueurs
while i <= nbJoueur:
    print("<----------------------- Tour du joueur " +  str(i) + " : ------------------------>");

    print(str(n) + "°) Lancement de dés : ");
    for x in range(0, 3):
        DN = randrange(1, 7);
        print("--> " + str(DN));
        scoreTotal = scoreTotal + DN;
    print("Total : " + str(scoreTotal));
    
    #Boucle qui vérifié les relances ou non
    while verifRelance == False:
        try:
            if scoreTotal > 21:
                verifRelance = True;
                print('\n')
                print("<------------------------------------------------------------------->");
                print("Votre score dépasse 21 ! Vous perdez un jeton !")
                print("<------------------------------------------------------------------->");
                print('\n');
                print("<---------------- Fin du tour pour le joueur " +  str(i) + " ---------------->");
                print("<---------------- Score du joueur " +  str(i) + " : " + str(scoreTotal) + " ---------------->");
                print("\n");
                break;
            else:
                relance = int(input("Relancer ? Indiquer le nombre de dés à relancer [0 pour ne pas relancer] : "));
                int(relance);
                if relance >= 0 and relance <= 3:
                    if relance == 0:
                        verifRelance = True;
                        print('\n');
                        print("<---------------- Fin du tour pour le joueur " +  str(i) + " ---------------->");
                        print("<---------------- Score du joueur " +  str(i) + " : " + str(scoreTotal) + " ---------------->");
                        print("\n");
                        break;
                    if relance == 1:
                        print("\n");
                        n = n + 1;
                        print(str(n) + "°) Lancement de dés : ");
                        DN = randrange(1, 7);
                        print("--> " + str(DN));
                        scoreTotal = scoreTotal + DN;
                        print("Total : " + str(scoreTotal));
                    if relance == 2:
                        print("\n");
                        n = n + 1;
                        print(str(n) + "°) Lancement de dés : ");
                        for x in range(0, 2):
                            DN = randrange(1, 7);
                            print("--> " + str(DN));
                            scoreTotal = scoreTotal + DN;
                        print("Total : " + str(scoreTotal));
                    if relance == 3:
                        print("\n");
                        n = n + 1;
                        print(str(n) + "°) Lancement de dés : ");
                        for x in range(0, 3):
                            DN = randrange(1, 7);
                            print("--> " + str(DN));
                            scoreTotal = scoreTotal + DN;
                        print("Total : " + str(scoreTotal));
                else:
                    print("\n")
                    print("[Indiquer un nombre compris entre [0 - 3] !]")
        except ValueError:
            print("\n")
            print("[Indiquer un nombre de dés valide !]");
            
    # Réinitialisation pour le joueur suivant
    n = 1
    verifRelance = False;
    scoreTotal = 0
    i = i + 1;

#Résultat de la manche
print("\n");
print("<------------------------------------------------------------------->");
print("Chaque joueur à terminé son tour ...")
print("Voyons qui gagne cette manche !")
print("<------------------------------------------------------------------->");

如您所见,在我的代码中我根本不管理令牌和总分,但有程序的一般方面。

提前感谢您的帮助。

因为您知道将有多少玩家参加比赛,您可以为每个玩家创建一个字典来存储所需的信息。

num_players = 5 # <- user input
tokens = 3 # <- user input
players = {}

for i in range(1, num_players + 1):
    players[i] = {
        'tokens': tokens,
        'score': 0
    }

print(players)
# {1: {'tokens': 3, 'score': 0}, 2: {'tokens': 3, 'score': 0}, 3: {'tokens': 3, 'score': 0}, 4: {'tokens': 3, 'score': 0}, 5: {'tokens': 3, 'score': 0}}

您可以移除一个标记并添加玩家 2 的骰子结果,如下所示:

dice_result = 8 # <- calculate
players[2]['tokens'] = players[2]['tokens'] -1
players[2]['score'] = players[2]['score'] + dice_result