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 が 2 つあり、Y を再度尋ねることはできず、X だけです。 6行目までやり直し
てください 回答ありがとうございます:)

4

2 に答える 2

5

gotoあなたは声明を探しています。1968 年、Dijkstra はGo To ステートメントが有害であると考えられるという有名な論文を書き、なぜ検索してはいけないのかを説明しましたgoto

正しいことは、コードを構造化することです。

最も単純な変更は次のとおりです。

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

ただし、もっとうまくやることはできます。分離されたコードを取り出して、呼び出すことができる関数に分割します。2 つ (または、あなたの場合は 4 つ) のコードがほぼ同一である場合は、同じコードを 4 回繰り返すのではなく、パラメーターを受け取る 1 つの関数に抽象化します。等々。

しかし、実際には、関数がなくても、ほとんどの繰り返しを取り除くことができます:

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

…そして他の3つについても同じです。

または、次のようにインプレースで定義できますlambda

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

それでも、これらのいずれも行うべきではありません。addsubmul、およびisを定義するのと同じくらい簡単ですが、それらを定義しないtruediv方がさらに簡単です。Python には何らかの理由で「バッテリーが含まれています」が付属しており、それらの使用を避けている場合は、あなたの人生 (およびあなたのコードを読んだり、維持したりしなければならない人の人生) をまったく理由もなく困難にしています。

于 2013-05-14T23:47:07.293 に答える