2015-09-22 2 views
-1

У меня возникают проблемы с моим кодом на Python. Я пытаюсь сделать математическую викторину для своей GCSE, но я столкнулся с проблемой.python не возвращает переменные из абзаца def

Функция возврата не возвращает никаких переменных, как вы можете видеть ниже. Я указал переменные, которые должны быть «возвращены», если я не использую неправильную функцию.

Моя цель состоит в том, чтобы иметь numgen генерировать номера и номера, которые будут затем использоваться в def question спросить пользователя для ответа, а затем def correct, чтобы сказать пользователю, если вопрос правильно.

import random 
import time 
Decision = 'neither' 
print("\n\n\n\n\n\n") 

Name = input("Hello what is your name?") 

print("...") 

time.sleep(1) 

print("Hello",Name,"are you ready for the maths quiz?") 

while Decision.lower() != "yes" or "no": 
    Decision = input("Type either\n'yes'\nor\n'no'") 

    if Decision.lower() == "yes": 
     print("Ok, we will proceed") 
     break 

    elif Decision == "no": 
     print("Please come back when you are ready") 
     exit(0) 

    else: 
     print("please type again either 'yes' or 'no'") 

marks = 0 

def numgen(): 
    num1 = random.randint(1,40) 
    numlist = random.choice(['*','/','+','-']) 
    num2 = random.randrange(2,20,2) 
    answer = eval(str(num1) + numlist + str(num2)) 
    return(num1, numlist, num2, answer) 

score = 0 

def question (num1, numlist,num2, answer): 
    print("This question is worth 10 marks.") 
    print ("The question is:",num1, numlist, num2) 
    Q1 = input('What is your answer?') 
    Q1 = float(Q1) 
    return(Q1) 

def correct(Q1): 
    if Q1 == answer: 
     print("Well done you got it right.") 
     score = score + 10 
    else: 
     print("you were incorrect the asnwer was:",answer) 
     return (score) 

questions = 0 
while questions < 10: 
    numgen() 
    question(num1,num2,answer,numlist) 
    correct(Q1) 


print(marks) 

EDIT: Хорошо я благодарю всех за вашу помощь, но им все еще возникают проблемы, потому что в этой линии print ("The question is:",num1, numlist, num2) где num2 есть, где по какой-то причине ответ появляется я не знаю, чем это вызвано, но это очень раздражает может кто-нибудь помочь. Это после того, как я редактировал код включить

num1,num2,numlist,answer=numgen() 
Q1=question(num1,num2,answer,numlist) 
score = int(score) 
score = correct(score, Q1) 

так, например, если у меня было:

the question is: 24 + 46

ответ будет 46. Должен ли я отказаться от использования команды def? Заранее спасибо за вашу помощь.

+0

это, кажется у вас есть только вопрос порядка с параметрами, я редактировал свой ответ с дальнейшим объяснением – DorElias

ответ

0

хорошо вы не используете возвращаемые значения из функции numgen. попробуйте изменить последнюю часть вашей программы это:

while questions < 10: 
    num1,num2,answer,numlist = numgen() # here you save the output of numgen 
    question(num1,num2,answer,numlist) # and then use it 
    correct(Q1) 

редактировать:

хорошо после deepr взгляд на ваш код, кажется, вы не понимаете областей. Посмотрите на это Short Description of the Scoping Rules?

Идея состоит в том, что переменная имеет «место», где она деформирована и к ней можно получить доступ. когда вы определяете переменную в функции (внутри def), она не доступна автоматически из разного метода.так что в вашем случае, например, функция правильно (Q1) не может видеть переменную answer, как это было определенно в numgen и оно не было переданной ей в качестве аргумента, и он не является «глобальным» переменным

EDIT:

ваша проблема сейчас порядок параметров,

вы называете это нравится:

question(num1,num2,answer,numlist) 

но defiened как:

def question (num1, numlist,num2, answer): 

посмотреть отличия в заказе? они должны быть в том же порядке

+0

Спасибо за помогая так быстро, я понимаю основы обзора, но ссылка, которую вы дали, помогла мне понять больше. я уверен, что это поможет в моем курсе^- ^. теперь я чувствую себя глупо, что вижу ответ GG –

0
num1, num2, answer, numlist = numgen() 

это будет работать, как вы что-то вернуть, но вы не назначая возвращаемые значения ни к чему, так что они могут быть использованы после.

Это называется распаковка.

Это так же, как

a, b = 1, 3 

Вы также можете использовать кортежи для переключения значений переменных:

a, b = b, a 
0

Ну вам нужно хранить возвращаемые значения где:

while questions < 10: 
    num1, numlist, num2, answer = numgen() 
    Q1 = question(num1,num2,answer,numlist) 
    correct(Q1) 
Смежные вопросы