Python-递增的数字链无法正常工作

Python-递增的数字链无法正常工作,python,Python,我有一个以三个数字作为命令行参数的程序。然后,它应该显示与前两个数字相差相同的数字列表,列表的长度为第三个数字 当前两个输入之间的差值为负或零时,我当前的代码不起作用 以下是三个测试用例: 这是可行的(但总数是错误的): 总和应为55 这失败了: python suite.py 30 27 8 > 0 python suite.py 6 6 6 > 6 输出应该是 > 30 27 24 21 18 15 12 9 = 156 这失败了: python suite.py

我有一个以三个数字作为命令行参数的程序。然后,它应该显示与前两个数字相差相同的数字列表,列表的长度为第三个数字

当前两个输入之间的差值为负或零时,我当前的代码不起作用

以下是三个测试用例:

  • 这是可行的(但总数是错误的):

    总和应为
    55

  • 这失败了:

    python suite.py 30 27 8
    > 0
    
    python suite.py 6 6 6
    > 6
    
    输出应该是

    > 30 27 24 21 18 15 12 9 = 156
    
  • 这失败了:

    python suite.py 30 27 8
    > 0
    
    python suite.py 6 6 6
    > 6
    
    输出应该是

    > 6 + 6 + 6 + 6 + 6 + 6 = 36
    
  • 代码如下:

    import sys
    
    def suite(premier, second, nombre):
        message = ""
        message2 = ""
        if second < premier:
            diff = (premier - second) * -1
        else:
            diff = second - premier
        maximum = premier + (diff * nombre)
        i = premier
        total = premier
        for i in range(premier, maximum, diff):
            message += str(i) + " + "
            message2 = message[:-3]
            total += i
        message2 += " = " + str(i)
        return message2
    
    def main():
        premier = int(sys.argv[1])
        second = int(sys.argv[2])
        nombre = int(sys.argv[3])
        if premier == second:
            resultat = premier
        else:
            resultat = suite(premier, second, nombre)
        print(resultat)
    
    if __name__ == "__main__":
        main()
    
    导入系统 def套件(卓越理财、二级、标称): message=“” message2=“” 如果第二位<总理: 差异=(卓越理财-秒)*-1 其他: diff=第二高级 最大值=卓越理财+(差值*标称值) i=总理 总计=卓越理财 对于范围内的i(卓越、最大、差异): 信息+=str(i)+“+” message2=消息[:-3] 总数+=i 信息2+=“=”+str(一) 返回消息2 def main(): premier=int(sys.argv[1]) second=int(sys.argv[2]) nombre=int(sys.argv[3]) 如果premier==秒: 结果=卓越理财 其他: 结果=套房(高级、二级、非高级) 打印(结果) 如果名称=“\uuuuu main\uuuuuuuu”: main()
    代码中有一大堆东西是可以修复的。从顶部开始:

    • 如果second
      diff=(premier-second)*-1
      完全等同于
      diff=second-premier
      ,则无需检查
      。只需完全删除
      if
      ,并始终使用
      diff=second-premier
    • 初始化
      i=premier
      是不必要的,以后会混淆代码。移除它
    • total=premier
      应为
      total=0
      。您将在循环的第一次迭代中添加
      premier
    • message2=message[:-3]
      应移出循环。它只需删除最后一个
      +
      ,只需执行一次。事实上,
      message2
      不需要单独的变量,因为它只用于此目的一次
    • message2+=“=”+str(i)
      应该是
      message2+=“=”+str(总计)
      。鉴于上述情况,您只需编写
      message=message[:-3]+“=”+str(total)
      并返回
      message
      ,而不是
      message2
    最后一点。
    6
    不起作用的原因是,如果步长为零,
    range
    将不起作用。对于
    diff==0
    时,您需要有一个特例,或者完全不使用
    range
    。我建议采用后一种方案有两个原因。首先,它使代码更简单,因为您没有特殊情况。第二,它使你不必再计算最大值。下面是循环的一个示例:

    total = 0
    num = premier
    while nombre > 0:
        message += str(num) + " + "
        nombre -= 1
        num += diff
    

    当然,您需要删除
    main

    中对
    premier==second
    的检查,您的代码中有一大堆东西可以修复。从顶部开始:

    • 如果second
      diff=(premier-second)*-1
      完全等同于
      diff=second-premier
      ,则无需检查
      。只需完全删除
      if
      ,并始终使用
      diff=second-premier
    • 初始化
      i=premier
      是不必要的,以后会混淆代码。移除它
    • total=premier
      应为
      total=0
      。您将在循环的第一次迭代中添加
      premier
    • message2=message[:-3]
      应移出循环。它只需删除最后一个
      +
      ,只需执行一次。事实上,
      message2
      不需要单独的变量,因为它只用于此目的一次
    • message2+=“=”+str(i)
      应该是
      message2+=“=”+str(总计)
      。鉴于上述情况,您只需编写
      message=message[:-3]+“=”+str(total)
      并返回
      message
      ,而不是
      message2
    最后一点。
    6
    不起作用的原因是,如果步长为零,
    range
    将不起作用。对于
    diff==0
    时,您需要有一个特例,或者完全不使用
    range
    。我建议采用后一种方案有两个原因。首先,它使代码更简单,因为您没有特殊情况。第二,它使你不必再计算最大值。下面是循环的一个示例:

    total = 0
    num = premier
    while nombre > 0:
        message += str(num) + " + "
        nombre -= 1
        num += diff
    

    当然,您需要删除
    main

    中对
    premier==second
    的检查,这里有一个更具python风格的选择:

    import sys 
    
    def suite(premier, second, nombre):
        diff = second - premier
        if diff == 0:
            nombres = [premier] * nombre
        else:
            maximum = premier + diff * nombre
            nombres = range(premier, maximum, diff)
        gauche = ' + '.join(map(str, nombres))
        droite = sum(nombres)
        return '%s = %d' % (gauche, droite)
    
    def main():
        premier = int(sys.argv[1])
        second = int(sys.argv[2])
        nombre = int(sys.argv[3])
        print(suite(premier, second, nombre))
    
    if __name__ == "__main__":
        main()
    
    对于
    1 2 10
    ,它输出:

    1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
    
    对于
    30278

    30 + 27 + 24 + 21 + 18 + 15 + 12 + 9 = 156
    
    对于
    6

    6 + 6 + 6 + 6 + 6 + 6 = 36
    

    这里有一个更具Python风格的替代方案:

    import sys 
    
    def suite(premier, second, nombre):
        diff = second - premier
        if diff == 0:
            nombres = [premier] * nombre
        else:
            maximum = premier + diff * nombre
            nombres = range(premier, maximum, diff)
        gauche = ' + '.join(map(str, nombres))
        droite = sum(nombres)
        return '%s = %d' % (gauche, droite)
    
    def main():
        premier = int(sys.argv[1])
        second = int(sys.argv[2])
        nombre = int(sys.argv[3])
        print(suite(premier, second, nombre))
    
    if __name__ == "__main__":
        main()
    
    对于
    1 2 10
    ,它输出:

    1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
    
    对于
    30278

    30 + 27 + 24 + 21 + 18 + 15 + 12 + 9 = 156
    
    对于
    6

    6 + 6 + 6 + 6 + 6 + 6 = 36
    

    “我曾尝试添加异常,但它并不总是工作良好”向我们展示包含您添加的异常的代码,并向我们展示它不工作的时间。解释你期望得到什么输出,以及你得到了什么输出。我已经更新了我的帖子,谢谢。我非常确定
    1+2+3+4+5+6+7+8+9+10
    55
    ,而不是
    56
    OP,请让我知道我的编辑是否正确和可接受。太完美了!!!!“我曾尝试添加异常,但它并不总是工作良好”向我们展示包含您添加的异常的代码,并向我们展示它不工作的时间。解释你期望得到什么输出,以及你得到了什么输出。我已经更新了我的帖子,我非常确定
    1+2+3+4+5+6+7+8