2
作爲嘗試理解生成器函數的練習,我試圖編寫一個模擬長分區並一次返回第一位數的函數。我寫了這個函數,它似乎不工作。但是,如果我在shell中逐行執行它,它確實是我想要的,所以我不知道該怎麼做。我已經通過互聯網上關於發電機功能的帖子在這裏閱讀:在Python中使用生成器函數實現長分區
並從我的理解我只是用yield語句替換返回語句。這不是這種情況嗎?任何人都可以告訴我我做錯了什麼?任何幫助表示讚賞。
def decimals(number):
"""
Takes a numnber and generates the digits of 1/n.
"""
divisor = number
dividend = 1
while dividend % divisor != 0:
#Floor division is the // operator
quotient = divisor // dividend
remainder = dividend % divisor
temp = quotient * divisor
if remainder != 0 :
temp = quotient * divisor
if temp > dividend:
dividend = dividend * 10
dividend = dividend - temp
else:
dividend = dividend - temp
yield quotient
def main():
gen = decimals(4)
print(next(gen))
if __name__ == "__main__":
main()
究竟是什麼問題呢。你沒有真正描述過這個問題。第二。如果數字分爲無窮大,程序將永不停止。打印功能會因爲試圖輸出的數據量而滯後。 – reticentroot 2015-04-03 00:02:05
小評論,你可以減少你的商/餘數計算爲'quotient,remaining = divmod(dividend,divisor)'。其實......你爲什麼把這兩人顛倒過來呢? 「分紅」不是「分紅」嗎? – 2015-04-03 00:19:39