I am learning to program in python and at the moment I am creating a Blackjack game for 2-3 players, for this I made four modules but when importing the variables to the main module I get an import error, despite the fact that I have returned the variables I need.
On the other hand, in addition to that error, I would like to know if I have any other error and if you could help me correct it; It would be very useful to me.
This the complete code:
main.py
import time
from ganador import ganador_2J
from ganador import ganador_3J
from jugadores import número_jugadores
from jugadores import nombre_jugadores
from turnos import turno
continuar=1
while continuar!=0:
print("Juego de Blackjack")
print("")
if número_jugadores==2:
print(f" Hola jugadores, vamos a empezar la partida de Blackjack.")
time.sleep(3)
jugador_1= 0
jugador_2= 0
for i in range(número_jugadores):
print(f"Inicia el Jugador #{i+1}:")
time.sleep(3)
if i==0:
jugador_1=turno(nombre_jugadores[i])
print(f"Turno Finalizado. Espera a tu Oponente...\n")
time.sleep(3)
print("")
else:
jugador_2 =turno(nombre_jugadores[i])
print(f"Turno Finalizado.\n")
time.sleep(3)
print("Eligiendo Ganador")
time.sleep(5)
print("")
time.sleep(3)
ganador_2J(jugador_1,jugador_2,nombre_jugadores)
continuar=int(input(f"\n¿Desean iniciar una nueva partida?\n1. Si\n0. No\n"))
del nombre_jugadores[:]
print("")
elif(número_jugadores==3):
print(f"Hola jugadores, vamos a empezar la partida de Blackjack.")
time.sleep(3)
jugador_1=0
Jugador_2=0
jugador_3=0
for i in range(número_jugadores):
print(f"Inicia el Jugador numero {i+1}")
time.sleep(3)
if i==0:
jugador_1=int(turno(nombre_jugadores[i]))
print(f"Turno Finalizado. Espera a tus oponentes...\n")
time.sleep(3)
print("")
elif(i==1):
jugador_2=int(turno(nombre_jugadores[i]))
print(f"Turno finalizado. Espera a tu oponente...\n")
time.sleep(3)
print("")
else:
jugador_3=int(turno(nombre_jugadores[i]))
print(f"Turno finalizado.\n")
time.sleep(3)
print("Eligiendo al ganador...")
time.sleep(5)
print("")
time.sleep(3)
ganador_3J(jugador_1,jugador_2,jugador_3,nombre_jugadores)
continuar=input(f"\n¿Desean iniciar una nueva partida?\n1. Si\n0. No\n")
del nombre_jugadores[:]
print("")
letters.py
def cartas():
""" Esta función permite generar el mazo de cartas. """
valor_cartas=[2,3,4,5,6,7,8,9,10,"J","Q","K","A"]
palos=["Picas","Corazones","Diamantes","Tréboles"]
mazo_de_cartas=[]
for valor in valor_cartas:
for palo in palos:
carta=f"{valor} de {palo}"
mazo_de_cartas.append(carta)
return(mazo_de_cartas)
winner.py
import time
def ganador_2J(J1,J2,nombre_jugadores):
""" Esta función permite determinar al ganador de una partida de Blackjack de dos jugadores. """
print("")
time.sleep(3)
if J1>J2:
print(f"El ganador es {nombre_jugadores[0]} con un total de {J1} puntos.")
elif J2>J1:
print(f"El ganador es {nombre_jugadores[1]} con un total de {J2} puntos.")
elif J1==J2:
print(f"Hay un empate, ambos jugadores hicieron {J1} puntos.")
else:
print(f"Ambos jugadores perdieron!")
def ganador_3J(J1,J2,J3,nombre_jugadores):
""" Esta función permite determinar al ganador de una partida de Blackjack de tres jugadores. """
print("")
time.sleep(3)
if J1>J2 and J1>J3:
print(f"El ganador es {nombre_jugadores[0]} con un total de {J1} puntos.")
elif J2>J1 and J2>J3:
print(f"El ganador es {nombre_jugadores[1]} con un total de {J2} puntos.")
elif J3>J1 and J3>J2:
print(f"El ganador es{nombre_jugadores[2]} con un total de {J3} puntos.")
elif J1==J2 and J1!=J3 and J2!=J3:
print (f"Hay un empate entre {nombre_jugadores[0]} y {nombre_jugadores[1]}, ambos hicieron {J1} puntos.")
elif J2==J3 and J2!=J1 and J3!=J1:
print (f"Hay un empate entre {nombre_jugadores[1]} y {nombre_jugadores[2]}, ambos hicieron {J2} puntos.")
elif J1==J3 and J1!=J2 and J3!=J2:
print (f"Hay un empate entre {nombre_jugadores[0]} y {nombre_jugadores[2]}, ambos hicieron {J1} puntos.")
elif J1==J2 and J2==J3:
print(f"Hay un empate, los tres jugadores hicieron {J1} puntos.")
else:
print(f"Los tres jugadores perdieron!")
players.py
def jugadores():
""" Esta función permite ingresar el número y el nombre de cada uno. """
número_jugadores=int(input(f"Ingrese el número de jugadores:"))
nombre_jugadores=[]
print("")
for i in range(número_jugadores):
nombre_jugador=input(f"Ingrese el nombre del jugador {i+1}:")
nombre_jugadores.append(nombre_jugador)
return(número_jugadores, nombre_jugadores,nombre_jugador)
shifts.py
import random
import time
def turno(mazo_de_cartas,nombre_jugador):
total=0
elección=1
número_carta=1
cartas_jugador=[]
print(f"Turno de {nombre_jugador}:")
while elección!=0 and total<21:
valor_carta=0
print (f"\nCarta #{número_carta}:")
time.sleep(3)
carta=random.choice(mazo_de_cartas)
print(f"[carta]")
if carta[:1] in (10,"J","Q","K"):
cartas_jugador.append(carta)
valor_carta=int(10)
elif carta[:1] in (2,3,4,5,6,7,8,9):
cartas_jugador.append(carta)
valor_carta=int(carta[:1])
elif carta[:1]=="A":
cartas_jugador.append(carta)
valor_carta=int(input(f"¿Qué valor quieres que tenga la carta, 1 u 11?:"))
while valor_carta!=1 or valor_carta!=11:
if valor_carta==1:
valor_carta=int(1)
elif valor_carta==11:
valor_carta=int(11)
else:
valor_carta=int(input(f"¿Qué valor quieres que tenga la carta, 1 u 11?:"))
total+=valor_carta
time.sleep(3)
if(número_carta>1):
print(f"Puntaje= {total}\n")
if(total<21):
respuesta=2
while respuesta==2:
respuesta=int(input(f"¿Qué deseas hacer?:\n1. Pedir otra carta\n2. Mirar tus cartas\n3. Finalizar el turno\n"))
if(respuesta==1):
número_carta+=1
elif(respuesta==2):
print(f"Cartas: {cartas_jugador}\n")
time.sleep(3)
else:
elección=0
return(total)
elif total==21:
cartas_jugador.append(carta)
print(f"Has hecho un Blackjack!")
return(total)
else:
print(f"Has perdido!")
return(0)
When I run the program I get the following:
Traceback (most recent call last):
File "main.py", line 7, in <module>
from jugadores import número_jugadores
ImportError: cannot import name 'número_jugadores' from 'jugadores' (/home/runner/Taller-03/jugadores.py)
Edit:
#Módulo main
import time
from ganador import ganador_2J
from ganador import ganador_3J
import jugadores
from turnos import turno
continuar=1
while continuar!=0:
print("Juego de Blackjack")
print("")
número_jugadores=int(input(f"Ingrese el número de jugadores:"))
resultado_tupla=jugadores(número_jugadores)
Now when I run the program I get the following:
Juego de Blackjack
Ingrese el número de jugadores:3
Traceback (most recent call last):
File "main.py", line 19, in <module>
resultado_tupla=jugadores(número_jugadores)
TypeError: 'module' object is not callable
Edit 2:
import time
from ganador import ganador_2J
from ganador import ganador_3J
from jugadores import jugadores
from turnos import turno
continuar=1
while continuar!=0:
print("Juego de Blackjack")
print("")
número_jugadores=int(input(f"Ingrese el número de jugadores:"))
jugadores(número_jugadores)
if número_jugadores==2:
print(f" Hola jugadores, vamos a empezar la partida de Blackjack.")
time.sleep(3)
jugador_1= 0
jugador_2= 0
for i in range(número_jugadores):
print(f"Inicia el jugador {i+1}:")
time.sleep(3)
if i==0:
jugador_1=turno(nombre_jugadores[i])
#Ahora el problema radica en la parte jugador_1=turno(nombre_jugadores[i]), creo que es porque a la función turno le asigné dos argumentos anteriormente
When I run the program now I get the following:
Juego de Blackjack
Ingrese el número de jugadores:2
Ingrese el nombre del jugador 1:A
Ingrese el nombre del jugador 2:B
Hola jugadores, vamos a empezar la partida de Blackjack.
Inicia el jugador 1:
Traceback (most recent call last):
File "main.py", line 36, in <module>
jugador_1=turno(nombre_jugadores[i])
NameError: name 'nombre_jugadores' is not defined
I think I don't quite understand what you're trying to do, so if it's not the following, please correct me. From your comment I understand that you prefer to obtain the number of players from the main and once you have this value send it to the function
jugadores
.If so, I recommend that you simply obtain
input
the number of players with a in your main and pass it as a parameter to your function.Where now your players function will receive a parameter
I hope it is this and if we are seeing!
PS: I see you have accents in the code, be careful.
PD2: Out of curiosity, why do you return the list
nombre_jugadores
and also laternombre_jugador
?