![](/img/trans.png)
[英]Using a Variable from One Function Inside Another Function then Calling It
[英]Calling a function inside a variable (randomly)
因此,我有一系列不同的問題,根據所調用的函數分別提出不同的問題。 我想擁有它,因此對於每個問題,都會調用一個隨機類型的問題(函數)。 我認為這是最好的方法,但我不知道為什么它不起作用。
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
出於某種原因,它沒有打印出“ print(“問題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)
隨意詢問有關其余代碼的問題!
當您這樣編寫代碼行時:
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.choice(spam)
。 range
一樣, random.randrange
的參數都有默認值,因此您可以只編寫randrange(101)
,而不是randrange(0, 101, 1)
。 在將函數存儲到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()
調用之后的(...)
部分調用該隨機函數。 那時我們傳入了隨機選擇的參數。
注意,我沒有在random.randint()
的返回值上使用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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.