1
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 中使用另一个输入来让它再次询问数字并停止循环,但是有两个 while 并且不允许我再次询问 Y,只是 X。所以能够回去会很酷到第 6 行并重新开始
感谢您的回答:)

4

2 回答 2

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以上的唯一原因是获得那些add,sub等功能。这些是微不足道的,因此您可以自己编写它们:

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

不过,你不应该做这些。就像定义add, sub,multruedivis 一样简单,定义它们甚至更简单。Python 带有“包含电池”是有原因的,如果你避免使用它们,你就会毫无理由地让你的生活(以及任何必须阅读、维护你的代码的人的生活)变得更加艰难。

于 2013-05-14T23:47:07.293 回答
0

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

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

例如,类似:

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

然后,您可以通过调用函数再次在函数中重复该代码块,例如:

y = get_number_of_operations()
于 2013-05-14T23:51:53.860 回答