【问题标题】:How to create variables in a loop without knowing the number of variables needed in advance?如何在不知道预先需要的变量数量的情况下在循环中创建变量?
【发布时间】:2022-01-17 22:32:35
【问题描述】:

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

游戏本身:

  • 用户选择想玩的玩家人数(最少1人)

  • 用户为每个玩家分配一定数量的代币(就像一个生命系统)

  • 然后,第一个玩家将从 1 到 6 “掷”3 个骰子。

  • 计算 3 个骰子的总分,然后我们询问玩家是否想再次掷 1、2 或 3 个骰子。 (目标是尽可能接近或等于 21)。

  • 可以连续掷几次骰子。 (其他投掷计入总数)

  • 如果玩家的总分高于 21,则玩家将失去一个代币。

  • 玩家可以通过指示 0 来停止轮到。

循环通过将手传递给第二个玩家来完成其工作。

当玩家完成比赛后,我们会查看比分。 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("<------------------------------------------------------------------->");

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

提前感谢您的帮助。

【问题讨论】:

  • 考虑使用玩家字典,您可以在其中动态添加任意数量的玩家并存储他们的相关信息。
  • 感谢您的回复!好的,我会这样看,从未使用过,但它似乎确实能够解决我的问题。 (也感谢 Skully 编辑我的问题)

标签: python random


【解决方案1】:

由于您知道将有多少玩家在玩,您可以为每个玩家创建一个字典来存储所需的信息。

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

【讨论】:

  • 谢谢,这正是我想要的!使用字典是解决方案。
猜你喜欢
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多