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