所以,我有一系列不同的问题,每个问题都会根据调用的函数来询问。我希望每个问题都能得到它,一个随机类型的问题(函数)被调用。我认为这是最好的方法,但我不知道它为什么不起作用。
x = addition_question(int(random.randrange(0,101,1)),int(random.randrange(0,101,1)))
y = multiply_question(int(random.randint(1,10)),int(random.randint(1,10)))
z = subtract_question(int(random.randrange(0,101,1)),int(random.randrange(0,101,1)))
vars = [x,y,z]
import random
print("Question 1:")
print(random.sample(vars,1))
time.sleep(.25)
运行此命令会返回: http://puu.sh/bP9dL/416caa5bc1.png
而不是使用'打印("问题1:")'它出于某种原因打印函数而不调用变量。
注意:错误在于变量的随机化,并调用它们。当我指定我想要使用的问题类型(功能)时,它按计划运行。
print("Question 1:")
addition_question(int(random.randrange(0,101,1)),int(random.randrange(0,101,1))) #creates addition question with randomised numbers between 1 and 101
print("")
time.sleep(.25)
print("Question 2:")
multiply_question(int(random.randint(1,10)),int(random.randint(1,10))) #creates multiplication question with randomised numbers between 1 and 10
print("")
time.sleep(.25)
随意提出有关其余代码的问题!
答案 0 :(得分:0)
当你写这样的行时:
x = addition_question(int(random.randrange(0,101,1)),int(random.randrange(0,101,1)))
立即调用函数addition_question
,并将调用该函数的结果分配给x
。
你想要做的是创造一些你可以懒得打电话的东西 - 并反复打电话,每次都得到不同的价值。
这样做的方法是定义一个函数:
def x():
return addition_question(int(random.randrange(0,101,1)),int(random.randrange(0,101,1)))
然后,当然,您不想打印出x
,您想致电 x
并打印结果:
print(random.sample(vars,1)())
这就是全部。
关于您的代码的一些附注:
random.randrange
返回一个整数;我没有理由将结果传递给int
。random.sample(spam, n)
选择n
值而无需替换;当n
始终为1
时,random.choice(spam)
会更简单,更可读地执行相同的操作。random.randrange
与range
一样,具有其参数的默认值,因此您只需撰写randrange(101)
,而不是randrange(0, 101, 1)
。答案 1 :(得分:0)
在将函数存储到vars
列表之前,您已经调用了函数。只需存储对函数的引用,并在选择一个参数后为参数传递随机值:
questions = (addition_question, multiply_question, subtract_question)
print("Question 1:")
random.choice(questions)(random.randint(1,10), random.randint(1,10))
random.choice()
随机选择三个函数引用中的一个,(...)
调用后random.choice()
部分调用随机函数。在那一刻,我们传入随机挑选的论点。
请注意,我没有在int()
的返回值上使用random.randint()
;该函数已经返回一个整数,并且不需要再将其转换为整数。我还使用了random.choice()
,而不是使用样本大小为1的random.sample()
。
如果您的函数需要不同的随机整数范围,那么您有几个不同的选项:
使用函数存储范围,比如在元组中存储,并在随机调用random.randint()
和拾取的函数中选择元组之后:
questions = (
(addition_question, 0, 100),
(multiply_question, 1, 10),
(subtract_question, 0, 100),
)
question, low, high = random.choice(questions)
question(random.randint(low, high), random.randint(low, high))
存放lambda;这些是匿名函数,封装在调用时要执行的另一个表达式:
questions = (
lambda: addition_question(random.randrange(101), random.randrange(101)),
lambda: multiply_question(random.randint(1, 10), random.randint(1, 10)),
lambda: subtract_question(random.randrange(101), random.randrange(101)),
)
random.choice(questions)()
在第一个选项中,我将值调整为可用于random.randint()
,在第二个选项中,我使用了最简单的random.randrange()
形式;只需一个参数,它就会将开头默认为0
,将步骤默认为1
。