python不从def段

时间:2015-09-22 13:42:19

标签: python variables return

我的python代码遇到问题我一直在尝试为我的GCSE进行数学测验,但我遇到了一个问题。

返回函数没有返回任何变量,如下所示我已经说明了需要“返回”的变量,除非我使用了错误的函数。

我的目标是让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)

编辑: 好的,我感谢大家的帮助,但我仍然遇到问题,因为在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命令?提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

<table>
  <tr>
    <td id="0x0">X</td>
    <td id="1x0">X</td>
    <td id="2x0">X</td>
  </tr>
  <tr>
    <td id="0x1">X</td>
    <td id="1x1">X</td>
    <td id="2x1">X</td>
  </tr>
  <tr>
    <td id="0x2">X</td>
    <td id="1x2">X</td>
    <td id="2x2">X</td>
  </tr>
</table>

这会有效,因为你返回了一些内容,但你没有将返回的值赋给任何东西,以便可以在之后使用它们。

这称为解包。

完全相同
num1, num2, answer, numlist = numgen()

您还可以使用元组切换变量值:

a, b = 1, 3

答案 1 :(得分: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)

编辑:

在深入了解您的代码后,似乎您不了解范围。 看看这个Short Description of the Scoping Rules?

这个想法是变量有一个“地方”,它被定义并且可以被访问。当您在函数中定义变量(在def内部)时,它不能从不同的方法自动访问。所以在你的情况下,例如函数更正(Q1)无法看到变量answer,因为它是在numgen中定义的并且它没有作为参数传递给它,它不是一个“全局”变量< / p>

编辑:

现在你的问题是参数的顺序,

你称之为:

question(num1,num2,answer,numlist)

但它被解释为:

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

看到顺序中的差异?它们应该按照相同的顺序

答案 2 :(得分:0)

您需要将返回的值存储在某处:

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