0

问题:根据用户输入计算两个整数,第一个整数重复加倍,第二个整数除以二。在每一步,如果第二个数字是奇数,则将第一个数字的当前值添加到自身,直到第二个数字为零。

我的代码似乎没有完全运行,我得到一个无限循环我做错了什么?我正在使用 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 shell 所做的)。你想要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. 但是,返回Trueif x == TrueelseFalse与 return 相同x,所以这样做。

  • 你不需要循环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

这里的另一个问题是您尝试在 print 语句中添加和除以数字,因此您不会在任何时候更改整数 numA 和 numB 的值(也就是说,整数 numA 和 numB 将在整个程序)。

要更改变量 numA 和 numB,您必须具有:

  • 变量名=(一些作用于变量的函数)

例如 numA = numA + 1向 numA 加一

于 2013-02-07T09:28:00.397 回答