如何在事先不知道所需变量数量的情况下在循环中创建变量?
How to create variables in a loop without knowing the number of variables needed in advance?
我目前正在 Python 做一个学生项目。
游戏本身:
用户选择想玩的玩家人数(最少1人)
用户分配一定数量的token用于每个玩家(如生命系统)
然后,第一个玩家将“扔”3 个骰子,从 1 - 6。
计算 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("<------------------------------------------------------------------->");
如您所见,在我的代码中我根本不管理令牌和总分,但有程序的一般方面。
提前感谢您的帮助。
因为您知道将有多少玩家参加比赛,您可以为每个玩家创建一个字典来存储所需的信息。
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
我目前正在 Python 做一个学生项目。
游戏本身:
用户选择想玩的玩家人数(最少1人)
用户分配一定数量的token用于每个玩家(如生命系统)
然后,第一个玩家将“扔”3 个骰子,从 1 - 6。
计算 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("<------------------------------------------------------------------->");
如您所见,在我的代码中我根本不管理令牌和总分,但有程序的一般方面。
提前感谢您的帮助。
因为您知道将有多少玩家参加比赛,您可以为每个玩家创建一个字典来存储所需的信息。
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