-1

我正在编写一个程序,允许用户输入一个数字范围,然后程序将对该范围内的每个数字执行一个冰雹序列,然后打印具有最大循环长度的数字。我不明白为什么我的代码不起作用。我们需要使用while循环

def main():
    #set starting variables
    start_num = int(input('Enter starting number of the range: '))
    #check if the numbers entered are positive and that the start is less than the end
    while (start_num < 1):
            start_num = int(input('Enter a positive starting number of the range: '))
    end_num = int(input('Enter ending number of the range: '))
    while (end_num < 1):
            end_num = int(input('Enter a positive ending number of the range: '))

    while (start_num > end_num):
            start_num = int(input('Enter starting number of the range: '))
            end_num = int(input('Enter ending number of the range: '))

    cycle_length = 0
    max_length = 0
    num_max = 0
    num = 0

    while (start_num < end_num):

            while (num != 1):

                    if (start_num % 2 == 0):
                            num = start_num / 2
                            cycle_length = cycle_length +1
                    else:
                            num = (start_num * 3) + 1
                            cycle_length = cycle_length +1      

                    if (cycle_length >= max_length):
                            max_length = cycle_length
                            num_max = start_num

                    cycle_length = 0
            start_num = start_num + 1

    print(num_max)
    print(max_length)

main()
4

2 回答 2

2

在你的while循环中,你总是在检查start_num,它永远不会改变。在循环的最开始,您需要设置numstart_num. 然后num在整个循环体中工作。

于 2015-09-20T21:02:04.267 回答
0

我只是要检查每一行,然后告诉你哪里出了问题。你真的应该确保你知道每个变量持有什么以及它应该持有什么。

def main():
    #set starting variables
    start_num = int(input('Enter starting number of the range: '))
    #check if the numbers entered are positive and that the start is less than the end
    while (start_num < 1):
            start_num = int(input('Enter a positive starting number of the range: '))
    end_num = int(input('Enter ending number of the range: '))
    while (end_num < 1):
            end_num = int(input('Enter a positive ending number of the range: '))

    while (start_num > end_num):
            start_num = int(input('Enter starting number of the range: '))
            end_num = int(input('Enter ending number of the range: '))

    cycle_length = 0
    max_length = 0
    num_max = 0
    num = 0

    while (start_num < end_num):

两者都start_num不会end_num改变,所以你有一个无限循环,例如 while(10 < 100)

            while (num != 1):

num当前为 0,因为您在几行前将其设置为 0 后尚未将其分配给任何内容

                    if (start_num % 2 == 0):
                            num = start_num / 2

num是现在start_num/2,但start_num从未改变

                            cycle_length = cycle_length +1
                    else:
                            num = (start_num * 3) + 1

同样在这里

                            cycle_length = cycle_length +1      

                    if (cycle_length >= max_length):
                            max_length = cycle_length
                            num_max = start_num

你正在设置num_maxstart_num永远start_num不会改变

                    cycle_length = 0

您正在重置cycle_num每个周期

            start_num = start_num + 1
     print(num_max)
     print(max_length)

main()
于 2015-09-20T21:51:21.903 回答