Avatar billede Hudlommen Nybegynder
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..?
Avatar billede Hudlommen Nybegynder
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")
Avatar billede Slettet bruger
18. oktober 2011 - 16:02 #2
Jeg er også lige gået igang med Python.
Men det ligner du har programmet til consolvindue.
Så der skal self dukke en sort dos-box op.
Det vil der altid gøre når man gemmer som .py
Hvis du vil programmet et vidue/frame så skal du gemme som .pyw

prøv at indsætte raw_input() til slut i programmet.
Det burde standse det fra at lukke.
Avatar billede j4k0b Nybegynder
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester