2014-02-16 4 views
1

Задача (из codeeval) состоит в том, чтобы прочитать файл с несколькими разными номерами и напечатать 1, если он является счастливым числом или напечатать 0, если он не является счастливым числом. Часть задачи состоит в том, чтобы игнорировать элемент (num), если это пустая строка. Вот мой код:Python: Игнорирование пустых строк при идентификации счастливых чисел

import sys 
test_cases = open(sys.argv[1], 'r') 
for num in test_cases: 
    if num=="": 
     pass 
    else: 
     liszt=[] 
     while num>1: 
      newnum=str(num) 
      total=0 
      for i in newnum: 
       total+=int(i)**2 
      if total not in liszt: 
       liszt.append(total) 
       num=total 
      else: 
       print 0 
       break 
     else: 
      print 1 
test_cases.close() 

Я получаю сообщение об ошибке, которое ссылается на total+=int(i)**2 линии, говоря так:

ValueError: invalid literal for int() with base 10: '' 

Что заставляет меня думать, что я не быть успешным в игнорировании пустых строк. Я на правильном пути? Если да, то какое изменение я должен внести в код?

Благодарим за помощь!

+0

Я думаю, что вы хотите ' continue' вместо 'pass'. – squiguy

+0

Просто 'print num' и посмотреть, что происходит ... – alfasin

+1

@squiguy Оба будут делать то же самое здесь. – Nabla

ответ

1

Для того, чтобы убедиться, что вы не иметь дело с пустыми строками и новых линий, вы можете просто добавить:

if num.strip(): 
    num = num.rstrip('\n') 

    # DO SOMETHING HERE... 
    # ... 

Таким образом, вы получите:

import sys 
test_cases = open(sys.argv[1], 'r') 
for num in test_cases: 
    if num.strip(): 
     num = num.rstrip('\n') 

     # DO SOMETHING HERE... 
     # ... 

test_cases.close() 
+0

Было бы более элегантно делать 'if num.strip():' – alfasin

+0

@alfasin: Да, вы правы :). Принимал это во внимание для PO;) – Littm

+0

зачистка дважды - плохая идея. 'strip' и проверьте, действительно ли лишена строка. – thefourtheye

Смежные вопросы