首页 > 解决方案 > 用 for 循环替换 divmod() 以获得商和余数

问题描述

我是python的新手,idk如何做以下问题,请帮助.....

许多编程语言都实现了一个名为 divmod() (除法和模数的缩写)的函数,当使用下除法将两个正数相除时,它会返回商和余数。

4个数之间的关系可以用下面的公式来描述:

=×+

编写一个程序,从用户那里获取除法的除数和除数输入,并使用 for 循环查找相应的商和余数,而不使用 /、*、//、% 和 divmod()。换句话说,您只能在代码中使用运算符进行加减运算。

假设您输入 45 作为除数,输入 7 作为除数,打印结果如下:

Input a positive integer for the dividend: 45

Input a positive integer for the divisor: 7

45 divided by 7 yields:

quotient: 6

remainder: 3

如果输入另一组值,代码应该可以正常工作。

标签: pythonfor-loopdivmod

解决方案


这是使用while循环的答案。

>>> dividend = 45
>>> divisor = 7

你有dividend奶牛和divisor牛仔(不要被这个幼稚的例子冒犯:这是对我大儿子的眨眼……)。一开始,所有的奶牛都在畜栏里。

>>> remainder = dividend

而且你没有把任何牛给任何牛仔。

>>> quotient = 0

现在,做一个欧几里得除法:虽然你可以给每个牛仔一头牛......

>>> while remainder >= divisor:
...     remainder -= divisor # remove those `divisor` cows from the corral...
...     quotient += 1        # ...and note that you have given one more cow to each cow-boy

结果是:

>>> quotient, remainder
(6, 3)

希望清楚!


编辑关于for循环

如果您绝对需要使用 a ,则可以使用afor来模拟a 。whilebreak

我们假设dividendand divisor>= 1。因此,quotient <= divisor

>>> remainder = dividend
>>> quotient = 0

>>> for _ in range(dividend):
...     if remainder < divisor:
...         break
...     quotient += 1
...     remainder -= divisor

>>> quotient, remainder
(6, 3)

如果break不允许,那么您可以使用 hack(我不建议这样做break只是隐藏在迭代器中):

>>> remainder = dividend
>>> quotient = 0

>>> for _ in iter(lambda: remainder >= divisor, False):
...     quotient += 1
...     remainder -= divisor

>>> quotient, remainder
(6, 3)

您还可以使用递归函数:

>>> def divm(divid, divis):
...     if divid < divis:
...         return 0, divid
...     else:
...         quotient_minus_one, remainder = divm(divid - divis, divis)
...         return quotient_minus_one + 1, remainder

>>> divm(dividend, divisor)
(6, 3)

推荐阅读