Palindrome- while循环而不是循环

时间:2017-03-05 23:43:15

标签: python python-3.5 palindrome

所以我的程序会检查回文数,lychrels和非lychrels的数量。最初我使用'break'和for循环,但我应该使用while循环。

我的while循环与my循环不一样,我不知道我做错了什么? - 范围意味着在num1和num2之间 此外,输出是一个提示的精确副本,所以这就是为什么它看起来像这样。 谢谢!

1 个答案:

答案 0 :(得分:0)

你的while循环:

while (nums>=num1 and nums<=num2 and flag):
#for nums in range(num1, num2+1):
    num_str = str(nums)
    if num_str == num_str[::-1]:
       pal += 1
    else:
        count = 0
        num_el = num_str
        while (count < 60):
            np_total = int(num_el) + int(num_el [::-1])
            count += 1
            nums_el = str(np_total)
            num_el = nums_el
            if num_el == nums_el [::-1]:
                nonlych += 1
                flag = False

        else:
            lychrel += 1
            print(nums, "looks like a lychrel number")
nums += 1

else: lychrel += 1 print(nums, "looks like a lychrel number")

每次while循环退出时都会执行

break循环中的for正在跳过它。

第二个问题是当flag设置为False时,它会停止您的外部while循环,因此您找到的第一个非lychrel数字将是您测试的最后一个数字

这是我尝试尽可能少地改变的尝试。您可以添加isLychrel之类的标记,而不是使用count变量来传递信息。

nums = num1
while (nums>=num1 and nums<=num2):  
   num_str = str(nums)
   if num_str == num_str[::-1]:
       pal += 1
    else:
        count = 0
        num_el = num_str
        while (count < 60):
            np_total = int(num_el) + int(num_el [::-1])
            count += 1
            nums_el = str(np_total)
            num_el = nums_el
            if num_el == nums_el [::-1]:
                nonlych += 1
                count = 999 # breaks while loop

        if (count != 999):
            lychrel += 1
            print(nums, "looks like a lychrel number")
    nums += 1