Hi,
I have writen a code whit some functions and the program start by launching on of those functions.
The problem is that some of the variables in the functions need too be accessed by other functions. I know that I can use global "variable name" but is there a better way to do that?
I am thinking of using classes to make the variables accessible by other functions. Is that a good way to do it? The variable names is in swe so don't get too confused. The program is a mastermind game where the computer guesses the number.
import random
from kombi import alla_värden
jag_gissar = ("Jag gissar på {0}vad säger du?")
fel_svar = ("Dina svar hänge inte ihop")
fel = ("Fel inmatning")
huvud_meny = (""""Välkommen till MASTERMIND, välj ett alternativ ur menyn:
1. Nytt Spel
2. Jag vill gissa
3. Avsluta
Val: """)
welcome_dator = ("Välkommen till Mastermind Dator!")
think = ("Tänk på ett fyrsiffrigt tal med olika siffror")
def inkonsekvent(p, gissningar):
for gissning in gissningar:
res = kontrollera(gissning[0], p)
(rätt_plats, fel_plats) = gissning[1]
if res != [rätt_plats, fel_plats]:
return True # hänger inte ihop med tidigare svar
return False # hänger ihop med tidigare svar
def kontrollera(p1, p2):
R = 0
F = 0
for i in range(len(p1)):
if p1[i] == p2[i]:
R += 1
else:
if p1[i] in p2:
F += 1
return [R, F]
def ny_svar():
# visar gissningen och ber andvändaren om ett svar om vad av den som stämmer.
rätt_plats = 0
fel_plats = 0
#visa_gissning(nya_gissningen[0])
svar = str(input(jag_gissar.format(visa_gissning(nya_gissningen[0]))))
for i in svar:
if i == str("R") or i == str("r"):
rätt_plats += 1
elif i == str("F") or i == str("f"):
fel_plats += 1
return (rätt_plats, fel_plats)
def ny_svar_kontroll(värde_val):
rätt_plats, fel_plats = ny_svar()
if rätt_plats == antal_platser:
return(värde_val, (rätt_plats, fel_plats))
if not kontroll_svar((rätt_plats, fel_plats)):
print(fel)
return(värde_val, (-1, fel_plats))
gissningar.append((värde_val, (rätt_plats, fel_plats)))
värde_val = skapa_ny_gissning()
if not värde_val:
return(värde_val, (-1, fel_plats))
return(värde_val, (rätt_plats, fel_plats))
def kontroll_svar(a):
(rätt_plats, fel_plats) = a
if (rätt_plats + fel_plats > antal_platser) \
or (rätt_plats + fel_plats > len(värde)):
return True
if rätt_plats == 3 and fel_plats == 1:
return False
return True
def skapa_ny_gissning():
nästa_val = next(kombination)
while inkonsekvent(nästa_val, gissningar):
try:
nästa_val = next(kombination)
except StopIteration:
print(fel_svar)
return exit()
return nästa_val
def visa_gissningar():
print("Previous Guesses:")
for gissning in gissningar:
gissat_värde = gissning[0]
for c in gissat_värde:
print(c, end=" ")
for i in gissning[1]:
print(" %i " % i, end=" ")
print()
def visa_gissning(nya_gissningen):
formaterat = ""
for c in nya_gissningen:
c = str(c)
formaterat += c + str(" ")
return formaterat
def mastermind():
try:
val = int(input(huvud_meny))
if val == 1:
mastermind_dator()
elif val == 2:
mastermind_user()
elif val == 3:
exit()
except IOError:
print(fel_in)
def mastermind_dator():
värde = []
värde += range(1,10)
gissningar = []
antal_platser = 4
kombination = alla_värden(värde, antal_platser)
värde_val = next(kombination)
nya_gissningen = (värde_val, (0,0))
while (nya_gissningen[1][0] == -1) or (nya_gissningen[1][0] != antal_platser):
############ this is the problem!
nya_gissningen = ny_svar_kontroll(nya_gissningen[0])
mastermind()