【问题标题】:Replace divmod() by for loop to get quotient and remainder用 for 循环替换 divmod() 以获得商和余数
【发布时间】:2020-10-11 12:54:00
【问题描述】:

我是python的新手,想知道下面的问题怎么做,请帮忙.....

许多编程语言都实现了一个名为 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

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

【问题讨论】:

  • ...到目前为止,您尝试过什么?
  • 您确定必须使用for 循环吗?因为while 循环对我来说似乎更自然......

标签: python for-loop divmod


【解决方案1】:

尝试做一个循环并减去,直到你达到某个数字,还有一个计数器变量。您迭代的次数也就是您的计数器变量将是您的商。

我会为你做模组:

def mod(a, b):
  while b <= a:
    c = a - b
    a -= b
  return c

>>> mod(45, 7)
3

但是我给了你 quotient/floordiv 的逻辑,你自己试试吧!

【讨论】:

    【解决方案2】:

    div = int(input('为被除数输入一个正整数:')) #dividend

    dir = int(input('为除数输入一个正整数:')) #divisor

    def mod(div, dir):

    quotient = 0 #counter variable
    
    for dir in range(div + 1):#dir <= div
    
        quotient = div - dir
    
        div -= dir
    
    return quotient
    

    剩余=商

    print(div ," 除以" ,dir ,"yields:" , "\nquotient: " , quotient , "\nremainder: " ,remain)

    这是我的答案,但无法找到商和余数:(

    【讨论】:

      【解决方案3】:

      这是使用while 循环的答案。

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

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

      >>> 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 循环

      如果您绝对需要使用for,您可以使用break 模拟while

      我们假设dividenddivisor >= 1。因此,quotient &lt;= 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-04
        • 1970-01-01
        • 2016-07-14
        • 2019-04-04
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        相关资源
        最近更新 更多