0

問題: ユーザー入力に基づいて 2 つの整数を計算します。最初の整数は繰り返し 2 倍になり、2 番目の整数は 2 で除算されます。各ステップで、2 番目の数値が奇数の場合、2 番目の数値がゼロになるまで、最初の数値の現在の値をそれ自体に追加します。

コードが完全に実行されていないようで、無限ループが発生します。何が間違っていますか? 私はpython 2.7.3を使用しています

##
## ALGORITHM:
##     1. Get two whole numbers from user (numA and numB).
##     2. If user enters negative number for numB convert to positive.
##     3. Print numA and numB.
##     4. Check if numB is odd if True add numA to numA.& divide numB by 2 using int division.
##        Print statement showing new numA and numB values.
##     5. Repeat steps 3 and 4 until numB is 0 or negative value. enter code here
##     6. Prompt user to restart or terminate? y = restart n = terminate
##
## ERROR HANDLING:
##     None
##
## OTHER COMMENTS:
##     None
##################################################################

done = False
while not done:

    numA = input("Enter first integer: ") # 1. Get two whole numbers from user (A and B)
    numB = input("Enter second integer: ") # 1. Get two whole numbers from user (A and B)
    if numB < 0:
        abs(numB) # 2. If user enters negative number for B convert to positive
    print'A = ',+ numA,'     ','B = ',+ numB
    def isodd(numB):
        return numB & 1 and True or False
    while numB & 1 == True:
        print'B is odd, add',+numA,'to product to get',+numA,\
        'A = ',+ numA,'     ','B = ',+numB,\
        'A = ',+ numA+numA,'     ','B = ',+ numB//2
    else:
            print'result is positive',\
            'Final product: ', +numA

    input = raw_input("Would you like to Start over? Y/N : ")
    if input == "N":
        done = True
4

2 に答える 2

2

問題:

  • 書く必要はありませんdone = False; while not done:。無限にループし(while True)、break終了したらループを終了するために使用します。

  • input ユーザーが入力したコードを実行します(Pythonシェルのように考えてください)。が必要ですraw_input。これは文字列を返すため、次のアドレスに渡す必要がありますint

    numA = int(raw_input("..."))
    
  • abs(numB)の絶対値を計算しますがnumB、それに対しては何もしません。その関数呼び出しの結果をに保存する必要がnumBあります。これは好きnumB = abs(numB)です。

  • このイディオムx and True or Falseは、最近のPythonバージョンでは使用されていません。代わりに、を使用してTrue if x else falseください。ただし、elseのTrue場合に返すことは、単に返すことと同じなので、そうします。x == TrueFalsex

  • ループする必要はありませんwhile x == True。ループするだけwhile xです。

  • numB内部ループ内の値を変更することはないため、終了することはありません。


これが私がそれを書く方法です:

while True:
    A = int(raw_input("Enter first integer: "))
    B = int(raw_input("Enter second integer: "))
    if B < 0: B = abs(B)

    print 'A = {}, B = {}'.format(A, B)

    while B & 1:
        print 'B is odd, add {} to product to get {}'.format(A, A)
        A = # not sure what you're doing here
        B = # not sure what you're doing here
    else:
        print 'Finished: {}'.format(A)

    if raw_input("Would you like to Start over? Y/N : ").lower() == 'n':
        break
于 2013-02-07T09:20:40.413 に答える
0

ここでのもう1つの問題は、printステートメント内の数値に加算および除算しようとしているため、整数numAおよびnumBの値を変更しないことです(つまり、整数numAおよびnumBは、プログラム)。

変数numAおよびnumBを変更するには、次のものが必要です。

  • 変数名=(変数に作用する関数)

例: numA = numA + 1numAに1つ追加する

于 2013-02-07T09:28:00.397 に答える