好的,所以解释这有点令人困惑。 基本上,我想要#num;'每次调用时都会生成一个随机数,但是当在函数内部时,我希望变量保持不变,以便给出正确的答案。
#finding random numbers to be used in questions
import random
num1 = int(random.randrange(0,101,1))
num2 = int(random.randrange(0,101,1))
#defining a function that asks an addition question, using random numbers
def addition_question(num1,num2):
answer1 = num1 + num2
print("What is",num1,"+",num2,"?")
given1=input()
if given1==answer1:
print("Correct!")
else:
print("Sorry, wrong answer!")
print("Question 1:")
addition_question(num1,num2)
我认为目前它正在做的是每次调用num1和num2时为其分配不同的值。
有没有办法巩固函数中变量的值,同时仍然将函数值加到函数随机函数之外?
答案 0 :(得分:0)
这里的课程是最好的选择。
class NumberQuestion(object):
def __init__(self):
self.num1 = random.randrange(0,101,1)
self.num2 = random.randrange(0,101,1)
def addition_question(self):
answer1 = self.num1 + self.num2
print("What is %s + %s?" % (self.num1, self.num2))
given1 = input()
if int(given1) == answer1:
print("Correct!")
else:
print("Sorry, wrong answer!")
print("Question 1:")
question = NumberQuestion()
question.addition_question()
答案 1 :(得分:0)
您很可能将int与字符串if given1 == answer1
进行比较,因此将input
转换为整数,您也可以使用while loop
继续要求用户进行更多猜测直到他们输入正确答案。
def addition_question(num1,num2):
answer1 = num1 + num2
print("What is",num1, "+",num2,"?")
while True:
given1 = int(input())
if given1 == answer1:
print("Correct!")
break
else:
print("Sorry, wrong answer, guess again!")
答案 2 :(得分:0)
这可能是您使用新获得的closure技能的好机会
def question_generator():
'''returns a function which does the addition stuff'''
num1 = random.randrange(0,101,1)
num2 = random.randrange(0,101,1)
def addition_question():
answer1 = num1 + num2
print("What is",num1,"+",num2,"?")
given1=int(input())
if given1==answer1:
print("Correct!")
else:
print("Sorry, wrong answer!")
return addition_question
new_question = question_generator()
print("Question 1:")
new_question()
注意:每次调用question_generator()
时,都会创建一个新函数,该函数具有新的num1和num2。如果再次调用new_question,它将包含相同的num1和num2
addition_question
这是一个闭包。它“记住”它的创建范围。
每次调用question_generator
时,返回函数的范围都包含两个新创建的随机数。返回的函数会记住num1
和num2
的值。
如果您不需要保存返回的功能,可以致电question_generator()()
以产生新的附加问题。