如何回到特定的行

时间:2013-05-14 23:39:34

标签: python

print "1) Add"
print "2) Substract"
print "3) Multiply"
print "4) Divide"
print "5) Exit"

x=input("Choose an operation: ")
y=input("How many numbers do you need to operate: ")
op=1
lista=[]

while y>0:
    a=input("Value"+" "+str(op)+": ")
    litlist=[a]
    lista=lista+litlist
    y=y-1
    op=op+1

while x!=5:
    if x==1:
        b=0
        for n in lista:
            b=b+n
        print b
    elif x==2:
        b=0
        for n in lista:
            if lista[0]==n:
                b=b+n
            else:
                b=b-n
        print b
    elif x==3:
        b=1
        for n in lista:
            b=b*n
        print b
    elif x==4:
        b=1
        for n in lista:
            if lista[0]==n:
                b=b*n
            else:
                b=b/float(n)
        print b

此计划旨在:

  • 首先询问用户想要执行的操作
  • 然后询问需要操作多少个数字
  • 输入数字
  • 最后打印结果

我想知道需要进行哪些操作,打印结果后需要再次操作多少个数字。 然后输入数字等等。

我知道我可以在while中使用另一个输入来让它再次询问数字并停止循环但是有两个whiles并且不允许我再次询问Y,只是X.所以能够很酷回到第6行并重新开始 谢谢你的回答:)

2 个答案:

答案 0 :(得分:5)

您正在寻找goto声明。早在1968年,Dijkstra写了一篇名为Go To Statement Considered Harmful的着名论文,解释了为什么你不应该寻找goto

正确的做法是构建代码。

最简单的变化是:

print "1) Add"
print "2) Substract"
print "3) Multiply"
print "4) Divide"
print "5) Exit"
while True:
    x=input("Choose an operation: ")
    # ...

但是,你可以做得更好。获取孤立的代码片段并将它们分成可以调用的函数。如果两个(或者,在您的情况下,四个)代码段几乎相同,则将它们抽象为一个带有参数的函数,而不是重复相同的代码四次。等等。

但实际上,即使没有任何功能,你也可以摆脱大部分的重复:

import operator

print "1) Add"
print "2) Substract"
print "3) Multiply"
print "4) Divide"
print "5) Exit"
while True:
    x=input("Choose an operation: ")
    if x==5:
        break
    y=input("How many numbers do you need to operate: ")
    operands=[input('Value {}'.format(i+1)) for i in range(count)]
    if x==1:
        op, value = operator.add, 0
    elif x==2:
        op, value = operator.sub, 0
    elif x==3:
        op, value = operator.mul, 1
    elif x==4:
        op, value = operator.truediv, 1
    for operand in operands:
        value = op(value, operand)
    print value

我必须import operator以上的唯一原因是获得addsub等功能。这些都是微不足道的,所以你可以自己写一下:

def add(x, y):
    return x+y
# etc.

然后,而不是这个:

op, value = operator.add, 0

......这样做:

op, value = add, 0

......和其他三个人一样。

或者您可以使用lambda就地定义它们:

op, value = (lambda x, y: x+y), 0

但是,你不应该做其中任何一个。就像定义addsubmultruediv一样简单,定义它们更简单。 Python带有“电池包含”是有原因的,如果你不使用它们,那么你的生活(以及任何必须阅读,维护等代码的人的生活)都会变得更加难以完全没有理由。

答案 1 :(得分:0)

Python不允许您返回到特定的行号,即使它确实存在,您也不应该利用该功能,因为它会导致无法维护的程序。

相反,学习如何使用函数和构造代码,以便函数有意义。

例如:

def get_number_of_operations():
    return input("How many numbers do you need to operate: ")

然后你可以通过调用函数重复该函数中的代码块,例如:

y = get_number_of_operations()