2017-03-05 24 views
0

私のプログラムは、パリンドローム番号、lychrels、および非lychrelsの数をチェックします。もともと私は 'break'とforループを使用していましたが、私はwhileループを使用することになっていました。forループの代わりにpalindrome- whileループ


私のwhileループは私のforループと同じには動作しません。どうしたのですか? - 範囲はnum1とnum2の間であることを意味します また、出力はプロンプトの正確なコピーであることを意図しています。 ありがとう!

+2

Lychrel番号の存在は決して証明されていないので、どのようにカウントするのですか? –

+0

whileループでブレークを使用しないのはなぜですか?あなたの質問を明確にすることができますか?何がうまくいきませんか? –

答えて

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 

​​

whileが終了ループするたびに実行されます。あなたのforループ内のbreakはそれをスキップしていました。

flagFalseに設定されていると、外側のwhileループが停止するため、最初に見つかった非リカール番号が最後にテストする番号になります。

ここではできるだけ変更しないようにしています。情報を渡すためにcount変数を使用する代わりに、isLychrelのようなフラグを追加できます。

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 
関連する問題