【发布时间】:2015-06-08 01:56:28
【问题描述】:
作为尝试理解生成器函数的练习,我正在尝试编写一个模拟长除法并一次返回一个数字的函数。我已经编写了这个函数,但它似乎不起作用。但是,如果我在 shell 中逐行执行它,它会完全按照我的意愿执行,所以我不确定接下来要做什么。我在这里阅读了互联网上有关生成器功能的帖子:
据我了解,我只是将 return 语句替换为 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()
【问题讨论】:
-
到底有什么问题。你还没有真正描述问题。第二。如果这个数分成无穷大,程序将永远不会停止。打印功能会因为尝试输出的数据量而滞后。
-
次要评论,您可以将商/余数计算减少到
quotient, remainder = divmod(dividend, divisor)。其实......为什么你有两个颠倒你所拥有的?divisor不是在dividend后面吗?
标签: python python-2.7 generator division