24. september 2011 - 12:42
Der er
3 kommentarer
Et simpelt python spørgsmål
Hey, jeg begyndte at programmere i python igår, og er kommet op med et meget lille spil.
Nåmen i selve python shell der fungere det fint, men når jeg gemmer det som "spil.py" og åbner det udefra så popper der en sort dos-box op og lukker ned hurtigere end man kan nå at se noget.
Nogle der har et godt forslag til hvorfor? Jeg har raw_input både i starten og slutningen af mit program, og begge dele, samt alt koden, springer den åbenbart bare over..?
24. september 2011 - 12:43
#1
her kan i lige se koden.
Alt forklaringen er til en ven jeg har der skal bestå noget python gøjl i skolen og jeg skal hjælpe ham.
import random
# Her bliver kortene lavet på en liste
# over_2 er et parameter for om der skal vælges en ny spiller, valget er sat til at være tilfældigt.
kort = [1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13]
over_2 = 0
spiller1_point = 0
spiller2_point = 0
spiller3_point = 0
spiller4_point = 0
point = 1
# En lille intro
raw_input("Hojere eller lavere, tryk enter for at fortsatte")
# Valg af antal af spillere og deres navne.
# spiller_valg er en liste lavet for at spillet kan vælge en tilfældig næste spiller.
antal_spillere = input("Vælg antal spillere: ")
if antal_spillere == 1:
spiller1 = raw_input("Skriv navnet på spiller 1: ")
print "spiller 1 er: " + spiller1
x = 1
over_2 = 0
if antal_spillere == 2:
spiller1 = raw_input("Skriv navnet på spiller 1: ")
print "spiller 1 er: " + spiller1
spiller2 = raw_input("Skriv navnet på spiller 2: ")
print "spiller 2 er: " + spiller2
spiller_valg = [0, 1, 2]
over_2 = 1
if antal_spillere == 3:
spiller1 = raw_input("Skriv navnet på spiller 1: ")
print "spiller 1 er: " + spiller1
spiller2 = raw_input("Skriv navnet på spiller 2: ")
print "spiller 2 er: " + spiller2
spiller3 = raw_input("Skriv navnet på spiller 3: ")
print "spiller 3 er: " + spiller3
spiller_valg = [0, 1, 2, 3]
over_2 = 1
if antal_spillere == 4:
spiller1 = raw_input("Skriv navnet på spiller 1: ")
print "spiller 1 er: " + spiller1
spiller2 = raw_input("Skriv navnet på spiller 2: ")
print "spiller 2 er: " + spiller2
spiller3 = raw_input("Skriv navnet på spiller 3: ")
print "spiller 3 er: " + spiller3
spiller4 = raw_input("Skriv navnet på spiller 4: ")
print "spiller 4 er: " + spiller4
spiller_valg = [0, 1, 2, 3, 4]
over_2 = 1
# Her vælges hvem der starter, givet at der er mere end 1 spiller.
if over_2 == 1:
i = random.randint(1, antal_spillere)
x = spiller_valg.pop(i)
if x == 1:
print spiller1 + " starter"
elif x == 2:
print spiller2 + " starter"
elif x == 3:
print spiller3 + " starter"
elif x == 4:
print spiller4 + " starter"
# Spillet starter.
# randomiser er et tilfældigt tal mellem 0 og 51.
# print t sørger for at det første kort bliver vist.
randomiser = random.randint(0, len(kort)-1)
tidligere_kort = kort.pop(randomiser)
print tidligere_kort
# Koden til selve spillet, spillet forsætter så længe der er over 0 kort/tal i bunken/listen.
while len(kort) >= 1:
valg = raw_input("Hojere eller lavere? H/L: ")
randomiser = random.randint(0, len(kort)-1)
naeste_kort = kort.pop(randomiser)
print naeste_kort
if "h" in valg:
if naeste_kort >= tidligere_kort:
print "Rigtig"
if x == 1:
spiller1_point = spiller1_point + point
elif x == 2:
spiller2_point = spiller2_point + point
if x == 3:
spiller3_point = spiller3_point + point
elif x == 4:
spiller4_point = spiller4_point + point
point = point + 1
elif naeste_kort <= tidligere_kort:
print "Forkert"
if over_2 == 0:
point = 1
# Der bliver valgt en ny spiller ved først at tage en spiller ud fra listen,
# og derefter proppe den tidligere spiller ind på listen igen så han ikke bliver
# valgt til at spille lige efter sig selv.
# s bliver midlertidigt den nye spiller og x puttes tilbage i spiller_valg
if over_2 == 1:
point = 1
i = random.randint(1, antal_spillere-1)
s = spiller_valg.pop(i)
spiller_valg[1:1] = [x]
if s == 1:
print ""
print "Det er nu " + spiller1 + "s tur"
if s == 2:
print ""
print "Det er nu " + spiller2 + "s tur"
if s == 3:
print ""
print "Det er nu " + spiller3 + "s tur"
if s == 4:
print ""
print "Det er nu " + spiller4 + "s tur"
x = s
if "l" in valg:
if naeste_kort >= tidligere_kort:
print "Forkert"
if over_2 == 0:
point = 1
if over_2 == 1:
point = 1
i = random.randint(1, antal_spillere-1)
s = spiller_valg.pop(i)
spiller_valg[1:1] = [x]
if s == 1:
print ""
print "Det er nu " + spiller1 + "s tur"
if s == 2:
print ""
print "Det er nu " + spiller2 + "s tur"
if s == 3:
print ""
print "Det er nu " + spiller3 + "s tur"
if s == 4:
print ""
print "Det er nu " + spiller4 + "s tur"
x = s
elif naeste_kort <= tidligere_kort:
print "Rigtig"
if x == 1:
spiller1_point = spiller1_point + point
elif x == 2:
spiller2_point = spiller2_point + point
if x == 3:
spiller3_point = spiller3_point + point
elif x == 4:
spiller4_point = spiller4_point + point
point = point + 1
tidligere_kort = naeste_kort
# Den samlede score når der ikke er flere kort tilbage.
# De mange tomme prints er for at det skal se bedre ud.
# Der er sat `` uden om spiller_point da det er et tal og spiller er string
# `` omdanner tal til string så det kan arbejde sammen.
if antal_spillere == 1:
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print spiller1 + " " + `spiller1_point`
if antal_spillere == 2:
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print spiller1 + " " + `spiller1_point`
print spiller2 + " " + `spiller2_point`
if antal_spillere == 3:
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print spiller1 + " " + `spiller1_point`
print spiller2 + " " + `spiller2_point`
print spiller3 + " " + `spiller3_point`
if antal_spillere == 4:
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print ""; print ""; print ""; print ""; print "";
print spiller1 + " " + `spiller1_point`
print spiller2 + " " + `spiller2_point`
print spiller3 + " " + `spiller3_point`
print spiller4 + " " + `spiller4_point`
raw_input ("Tryk enter for at afslutte spillet")
13. marts 2012 - 09:12
#3
Beklager hvis svaret kommer for sent :-)
Uden at have kigget på din kildekode overhovedet, kan jeg oplyse, at hvis der er en syntax error i dit script, så er det den der udskrives til stderror lige før programmet lukkes. Du kan evt. åbne kommandopromten (Kør => "cmd"), navigere til mappen hvor scriptet ligger, og så kalde scriptet ved filens navn.
På den måde undgår du at skulle bruge raw_input, da konsollen ikke lukker når programmet gør det