Ir para o conteúdo
RPereira93

Escolher perguntas aleatoriamente.Como fazer?

Mensagens Recomendadas

RPereira93    0
RPereira93

Olá pessoal

Eu fiz o jogo Quem quer ser milionário só que lembrei me de inserir mais perguntas, além das 15 perguntas que já tinha para os 15 níveis, eu queria saber de uma maneira de poder inserir mais para cada nível e escolher aleatoriamente as perguntas para cada nível.

Alguém me pode ajudar?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RPereira93    0
RPereira93
def pergunta1(euros_pergunta):                    #Pergunta 1
   print "Qual era o cognome do rei português D.Afonso II ?"
   print "a) O conquistador"
   print "b) O venturoso"                   
   print "c) O Africano"
   print "d) O gordo"

   a = raw_input ("Resposta:")

   if (a=='d'):
       return euros_pergunta       
   else:
       return 0                     

def pergunta2(euros_pergunta):                    #Pergunta 2
   print "Como se chama na vida real o conhecido 'Mr.Bean'?"
   print "a) Johnny English"
   print "b) Roger Barclay"
   print "c) Rowan Atkinson"
   print "d) Simon Baker"

   a = raw_input ("Resposta:")

   if (a=='c'):
       return euros_pergunta
   else:
       return 0


def pergunta3(euros_pergunta):                    #Pergunta 3
   print "Quem desenhou o elevador de Santa Justa em Lisboa?"
   print "a) Gustavo Eiffel"
   print "b) Menier de Ponsard"
   print "c) Frank Lloyd"
   print "d) Charles Renni Mackintosh"

   a = raw_input ("Resposta:")

   if (a=='b'):
       return euros_pergunta
   else:
       return 0

def pergunta4(euros_pergunta):                    #Pergunta 4
   print "Na mitologia, que figura corresponde a Dionísio?"
   print "a) Baco"
   print "b) jupiter"
   print "c) Nereu"
   print "d) Narciso"

   a = raw_input ("Resposta:")

   if (a=='a'):
       return euros_pergunta
   else:
       return 0

def pergunta5(euros_pergunta):                    #Pergunta 5
   print "Qual destes paises tem na sua bandeira as mesmas cores que a bandeira francesa?"
   print "a) Belgica"
   print "b) Alemanha"
   print "c) Camarões"
   print "d) Holanda"

   a = raw_input ("Resposta:")

   if (a=='d'):
       return euros_pergunta
   else:
       return 0

def pergunta6(euros_pergunta):                    #Pergunta 6
   print "Durante um jogo de Andebol, quantos jogadores tem em campo cada uma das equipas?"
   print "a) 7"
   print "b) 5"
   print "c) 6"
   print "d) 8"

   a = raw_input ("Resposta:")

   if (a=='a'):
       return euros_pergunta
   else:
       return 0

def pergunta7(euros_pergunta):                    #Pergunta 7
   print "Onde se situa o vulcão Vesúvio?"
   print "a) Grécia"
   print "b) México"
   print "c) Itália"
   print "d) Venezuela"

   a = raw_input ("Resposta:")

   if (a=='c'):
       return euros_pergunta
   else:
       return 0

def pergunta8(euros_pergunta):                    #Pergunta 8
   print "Que século ficou conhecimento por 'Século das Luzes'? "
   print "a) Século XX"
   print "b) Século XVIII"
   print "c) Século XV"
   print "d) Século XIII"

   a = raw_input ("Resposta:")

   if (a=='b'):
       return euros_pergunta
   else:
       return 0

def pergunta9(euros_pergunta):                    #Pergunta 9
   print "Castelo Branco é uma capital de distrito..."
   print "a) Da Beira Baixa"
   print "b) Da Beiro Alta"
   print "c) Do Minho"
   print "d) Do Alto Alentejo"

   a = raw_input ("Resposta:")

   if (a=='a'):
       return euros_pergunta
   else:
       return 0


def pergunta10(euros_pergunta):                    #Pergunta 10
   print "Em que museu é possivel ver a 'Mona Lisa' de Leonardo da Vinci?"
   print "a) Prado"
   print "b) Tate Gallery"
   print "c) Louvre"
   print "d) Guibenklan"

   a = raw_input ("Resposta:")

   if (a=='c'):
       return euros_pergunta
   else:
       return 0


def pergunta11(euros_pergunta):                    #Pergunta 11
   print "Qual for a canção portuguesa mais bem classificada numa final do Festival da Eurovisão"
   print "a) Bem Bom"
   print "b) Não Sejas Mau para Min"
   print "c) Silêncio e tanta Gente"
   print "d) O Meu Coração Não Tem Cor"

   a = raw_input ("Resposta:")

   if (a=='d'):
       return euros_pergunta
   else:
       return 0


def pergunta12(euros_pergunta):                    #Pergunta 12
   print "Que planeta do nosso sistema solar tem a famosa Grande Mancha Vermelha na sua atmosfera"
   print "a) júpiter"
   print "b) Saturno"
   print "c) Urano"
   print "d) Vénus"

   a = raw_input ("Resposta:")

   if (a=='a'):
       return euros_pergunta
   else:
       return 0


def pergunta13(euros_pergunta):                    #Pergunta 13
   print "Em que ano foi fundado a Universidade de Aveiro?"
   print "a) 1960"
   print "b) 1970"
   print "c) 1973"
   print "d) 1963"

   a = raw_input ("Resposta:")

   if (a=='c'):
       return euros_pergunta
   else:
       return 0


def pergunta14(euros_pergunta):                    #Pergunta 14
   print "Qual é a banda que toca a musica 'Stairway to Heaven'?"
   print "a) Guns n´Roses"
   print "b) Bon jovi"
   print "c) Aerosmith"
   print "d) Led Zeppelin"

   a = raw_input ("Resposta:")

   if (a=='d'):
       return euros_pergunta
   else:
       return 0


def pergunta15(euros_pergunta):                    #Pergunta 15
   print "Quantos paises existem no Planeta Terra?"
   print "a) 195"
   print "b) 190"
   print "c) 200"
   print "d) 194"

   a = raw_input ("Resposta:")

   if (a=='a'):
       return euros_pergunta
   else:
       return 0

##################################################################################################################

#Inicio


print "Bem-Vindo ao Quem quer ser milionário"

lista_niveis = [100, 200, 300, 500, 1000, 2000, 4000, 8000, 16000, 32000, 64000, 150000, 250000, 500000, 1000000]

print "Níveis dos Prémios"

for index in range(0,len(lista_niveis),1):
   print "Níveis:",lista_niveis[index], "€"


inicio = raw_input ("Deseja iniciar o jogo? (s/n)")

index = 0

while (inicio == "s" or inicio == "S"):

#Pergunta 1

   resultado = pergunta1(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 0€"
       break
   else:
       print "Ganhou 100€"

   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 2

   resultado = pergunta2(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 0€"
       break
   else:
       print "Ganhou 200€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break
#Pergunta 3

   resultado = pergunta3(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 0€"
       break
   else:
       print "Ganhou 300€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 4
   resultado = pergunta4(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 0€"
       break
   else:
       print "Ganhou 500€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 5
   resultado = pergunta5(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 0€"
       break
   else:
       print "Ganhou 1000€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 6
   resultado = pergunta6(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 1000€"
       break
   else:
       print "Ganhou 2000€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 7
   resultado = pergunta7(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 1000€"
       break
   else:
       print "Ganhou 4000€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 8
   resultado = pergunta8(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 1000€"
       break
   else:
       print "Ganhou 8000€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 9
   resultado = pergunta9(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 1000€"
       break
   else:
       print "Ganhou 16000€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 10
   resultado = pergunta10(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 1000€"
       break
   else:
       print"Ganhou 32000€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 11
   resultado = pergunta11(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 32000€"
       break
   else:
       print "Ganhou 64000€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break


#Pergunta 12
   resultado = pergunta12(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 32000€"
       break
   else:
       print "Ganhou 150000€"

   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 13
   resultado = pergunta13(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 32000€"
       break
   else:
       print "Ganhou 250000€"


   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 14
   resultado = pergunta14(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 32000€"
       break
   else:
       print "Ganhou 500000€"
   cont = raw_input ("Deseja continuar o jogo? (s/n)")

   if (cont == "n" or cont == "N"):
       break

#Pergunta 15
   resultado = pergunta15(lista_niveis[index])         
   if resultado == 0:
       print "Final do jogo: ganhou 32000€"
       break
   else:
       print "Parabens ganhou o prémio final de 1 Milhao de euros"
       break


print "Fim do jogo"

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Pedro C.    15
Pedro C.

Da maneira que estás a fazer cada vez que pretendes aumentar as possibilidades do jogo tens necessariamente de aumentar consideravelmente o código. Eu não sei bem quais são as regras deste jogo mas posso tentar indicar-te que tipo de restruturações podes fazer.

Uma coisa que reparei é que tens vários níveis e assumo que quanto maior o nível maior a dificuldade da pergunta. Assim seria bom teres um objecto que te guardasse as várias possibilidades de perguntas em cada nível. Vou tomar como exemplo as tuas primeiras três perguntas, metê-las dentro de uma lista correspondente à dificuldade 1, e meter a lista dentro de um dicionário:

dic={1: ['Qual era o cognome do rei portugues D.Afonso II ?\na) O conquistador\nb) O venturoso\nc) O Africano\nd) O gordo\n',"Como se chama na vida real o conhecido 'Mr.Bean'?\na) Johnny English\nb) Roger Barclay\nc) Rowan Atkinson\nd) Simon Baker","Quem desenhou o elevador de Santa Justa em Lisboa?\na) Gustavo Eiffel\nb) Menier de Ponsard\nc) Frank Lloyd\nd) Charles Renni Mackintosh\n"]}

# Vou fazer print da primeira pergunta da dificuldade 1 do dicionário:
print dic[1][0]
Qual era o cognome do rei portugues D.Afonso II ?
a) O conquistador
b) O venturoso
c) O Africano
d) O gordo

Se eu quiser gerar aleatóriamente uma pergunta de dificuldade 1 então faço:

import random
# Estou a gerar um número inteiro de 0 a 2 inclusive porque a lista de perguntas que meti no dicionário só tem
# 3 posições: 0, 1 e 2. Vou fazer esta operação três vezes:
index=random.randint(0,2)
print dic[1][index]
Qual era o cognome do rei portugues D.Afonso II ?
a) O conquistador
b) O venturoso
c) O Africano
d) O gordo

index=random.randint(0,2)
print dic[1][index]
Quem desenhou o elevador de Santa Justa em Lisboa?
a) Gustavo Eiffel
b) Menier de Ponsard
c) Frank Lloyd
d) Charles Renni Mackintosh

index=random.randint(0,2)
print dic[1][index]
Quem desenhou o elevador de Santa Justa em Lisboa?
a) Gustavo Eiffel
b) Menier de Ponsard
c) Frank Lloyd
d) Charles Renni Mackintosh

Agora repara que organizando a tua informação em objectos tu não precisas de fazer uma função para cada pergunta. Precisas sim de fazer uma função cujo o argumento seja a dificuldade e a própria função gerar uma pergunta e pedir pela resposta correspondente. Se tiveres um objecto semelhante ao das perguntas mas desta com as respostas então a própria função saberá avaliar se a resposta está correcta ou não. Espero ter ajudado.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RPereira93    0
RPereira93

já estou a fazer em txt mas agora como é que faço para saber as posiçoes por exemplo:

Tenho esta pergunta no bloco de notas e pretendo saber a posição onde está o "d" que é a resposta da pergunta.

pergunta:Qual era o cognome do rei português D.Afonso II ?\ a) O conquistador \ :P O venturoso\ c) O Africano\ d) O gordo\d

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Pedro C.    15
Pedro C.

O ideal seria criares uma organização no ficheiro à qual possas aceder facilmente. Por exemplo, imaginando que o que está dentro de um ficheiro "perguntas.txt" é isto:

1

Qual era o cognome do rei portugues D.Afonso II ?

a) O conquistador

b) O venturoso

c) O Africano

d) O gordo

2

Quem desenhou o elevador de Santa Justa em Lisboa?

a) Gustavo Eiffel

b) Menier de Ponsard

c) Frank Lloyd

d) Charles Renni Mackintosh

Com o seguinte código conseguirias ler o ficheiro e saber onde se encontrava a pergunta 2 por exemplo:

path=r'perguntas.txt'
# Abrir o ficheiro das perguntas.
fid=open(path,'r')
# Ler todas as linhas do ficheiro para dentro de uma lista.
perguntas=fid.readlines()
# Agora quero ver em que posiçao da lista está a pergunta 2.
ind=perguntas.index('2\n')
# Se sei a posiçao da pergunta 2 que é ind+1 então
# facilmente tiro a posiçao de qualquer uma das respostas
# e das perguntas. Pergunta da posiçao 2 é:
print perguntas[ind+1]
# a) estará em ind+2
print perguntas[ind+2]
# c) em ind+4
print perguntas[ind+4]

Quando estás a ler informação de um ficheiro para dentro de uma lista deves lembrar-te que ele está a passar strings. Além disso se houver mudança de linha ele irá ler inclusive o sinal de mudança de linha (geralmente '\n') para dentro da string. Por esse motivo eu estou à procura, no código acima, da posição na qual se encontra a string '2\n'. O resultado deste código foi:

Quem desenhou o elevador de Santa Justa em Lisboa?

a) Gustavo Eiffel

c) Frank Lloyd

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Outra ideia seria, a partir do formato de ficheiro dado pelo Pedro C., leres o ficheiro todo e dividí-lo pela linha em branco (ou seja, onde tens 2 \n seguidos). Posto isto, tens n blocos (id+perguntas+resposta) com o seguinte formato:

id
pergunta
a) resposta a
b) resposta b
c) resposta c
d) resposta d

Com isto, podes criar uma lista de perguntas desta maneira por exemplo:

#vou assumir que existe uma variavel blocos = ["1\nPergunta\na) resposta a\nb) resposta b\nc) resposta c\nd) resposta d", ...]
perguntas = []

for bloco in blocos:
    id, pergunta, resp_a, resp_b, resp_c, resp_d = bloco.split('\n') #vou assumir que as perguntas estão por ordem crescente no ficheiro
    perguntas.append({'pergunta': pergunta, 'resp_a': resp_a, 'resp_b': resp_b, 'resp_c': resp_c, 'resp_d': resp_d})

Com isto, para acederes à pergunta 3 e à respota b p.e., basta fazeres:

print perguntas[3-1]['pergunta'], ": ", perguntas[3-1]['resp_b']

A partir daqui julgo que consegues ver perfeitamente o caminho a seguir.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RPereira93    0
RPereira93

ola pessoal

o que quer dizer este erro?

 

pergunta[6] = pergunta[6].strip("\n")

IndexError: list index out of range

ele as vezes na consola aparece isto outras vezes não da nd disto, será problema do próprio programa? :S

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    611
thoga31

Quer dizer que o índice não está dentro dos limites. Isto é, tens pergunta[6], mas o limite de pergunta é inferior a 6.

Por exemplo, tenho a variável lista com 10 elementos, ou seja, vai de 0 a 9. Se tentar fazer lista[10], dará esse erro, pois só tenho elementos de lista[0] a lista[9].

Compreendes? :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RPereira93    0
RPereira93

ao imprimir o pergunta[6] da-me a resposta da pergunta

eu tou a fazer o kem ker ser milionario e as perguntas estao nu .txt e eu tenho assim as perguntas:

Pergunta de 8000€:\Que rio passa por baixo da Ponte de D.Luís I?\a) Rio Douro\:) Rio Minho\c) Rio Côa\d) Rio Tejo\a

e o pergunta[6] é a posição "a" neste caso

so n entendo o pk k faz akele erro :S

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Juntei os 2 tópicos.

Efectivamente o a é a 7a posição, posição 6 (pois começa no 0). Qual é o código que tens para ler o .txt e tratar a informação?

EDIT:

ao imprimir o pergunta[6] da-me a resposta da pergunta

Então pergunta é o que leste já dividido... não?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
RPereira93    0
RPereira93

Vou inserir parte do codigo que inseri para cada nivel e as perguntas que estao no .txt

        score1 = 1500
        ficheiro = open ('qqsm_200.txt', 'r')                       
        listaLinhas = ficheiro.readlines()                          
        index_pergunta = random.randint(0,len(listaLinhas)-1)      
        pergunta = listaLinhas[index_pergunta].split("\\")          
        pergunta[6] = pergunta[6].strip("\n")                        

        resposta = raw_input(pergunta[0]+"\n"+pergunta[1]+"\n"+pergunta[2]+"\n"+pergunta[3]+"\n"+pergunta[4]+"\n"+pergunta[5]+"\n Resposta: ")

        if resposta == pergunta[6]:
            print "Ganhou 200€"
            Pontos = score + score1
            print "Pontos:", Pontos
            cont = raw_input ("Deseja continuar o jogo? (s/n)")
            if (cont == "n" or cont == "N"):
                break
        else:
            print "Resposta certa:", pergunta[6]
            print "Fim do jogo: Ganhou 0€"
            print "Pontuação máxima:", Pontos
            break

nos ficheiros .txt é assim:

Pergunta de 100€:\Qual era o cognome do rei português D.Afonso II ?\a) O conquistador\:) O venturoso\c) O Africano\d) O gordo\d

Pergunta de 100€:\Como se chama na vida real o conhecido 'Mr.Bean'?\a) Johnny English\:) Roger Barclay\c) Rowan Atkinson\d) Simon Baker\c

Pergunta de 100€:\Quem desenhou o elevador de Santa Justa em Lisboa?\a) Gustavo Eiffel\:) Menier de Ponsard\c) Frank Lloyd\d) Charles Renni Mackintosh\b

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Provavelmente tens uma linha em branco no final do ficheiro. Experimenta algo tipo:

        listaLinhas = ficheiro.readlines()                         
        if listaLinhas[-1].strip() == '':
                index_pergunta = random.randint(0,len(listaLinhas)-2)     
        else:
                index_pergunta = random.randint(0,len(listaLinhas)-1)     
        pergunta = listaLinhas[index_pergunta].split("\\")          

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade