2014-02-05 1 views
0

Я только начал пытаться изучать код через лекции в формате youtube и MIT, которые у них есть в Интернете. Я использую compileonline.com на компьютере, в котором я кодирую, пока учитель использует реальную программу Python. (Та же версия) У меня есть весь код такой же, как он делаетОчень просто. Компилятор, возвращающий «Нет», когда я предполагаю, что это не должно быть

def sqrt(x): 
    ans = 0 
    if x >= 0: 
     while ans*ans < x: ans = ans + 1 
     if ans*ans != x: 
     print x, 'is not a perfect square.' 
     return None 
     else: return ans 
    else: 
     print x, 'is a negative number.' 
     return None 

Теперь, когда я добавить операторы для кода, чтобы проверить его

печати SQRT (16) - затем компилировать и я получаю " 4 «Ничего другого. then print sqrt (34) - скомпилируйте, и я получаю «34 не идеальный квадрат», а затем «None» на следующей строке. В видеоролике парень делает свое тестирование, я думаю, на другом экране, чем где написано его код, и он может просто набрать «sqrt (16)» вместо «print sqrt (16)», когда он это делает, он получает 4, как я , Но когда он набирает «sqrt (34)», он получает «34 не идеальное число», и это не «Нет» под ним. Это также случается для меня, когда я тестирую отрицательное число.

Мой вопрос Я думаю, почему я получаю «Нет», когда использую отрицательное число или число, которое не является идеальным квадратом?

Приносим извинения, что это, вероятно, ужасно глупый вопрос, но я просто пытаюсь получить именно то, что он получает, чтобы убедиться, что я делаю это правильно и не пропущу что-то, что потенциально может быть важно. Я также задаюсь вопросом, связано ли это с тем, что я использую веб-сайт, и он использует фактическую программу?

Экран/окно/коробка (независимо от его называют, его не там, где код написан), профессор использует внешний вид как этот

>>>sqrt(16) 

4 (his answer) 

>>>sqrt(34) 

34 is not a perfect number. (his answer) 

(This is where I get "None") 

Опять же, мои извинения за это время слишком драматично и невероятно просто. Просто не пытайтесь пропустить что-то и сделать все, чтобы получить точные ответы, которые получает профессор.

+0

'else' без двоеточия выглядит странно. – Hyperboreus

+3

Возможно, вы должны установить фактический интерпретатор python. –

+0

Как я только что сказал. Это код, который я вручную напечатал на экране на этом компьютере. Потому что я использую сайт compileonline.com (который загружает python 2.7.4) на другом компьютере, поэтому я могу смотреть видео и делать то, что он делает в одно и то же время. Отступы и все правильно на компьютере, где я кодирую. Как я уже говорил выше, я получаю ответы, программа работает, мне просто интересно, почему я получаю «ни одного», а профессор этого не делает. – user3276549

ответ

1

Вы столкнулись с путаницей в интерактивном терминале из-за различия между заявлениями печати и возвращаемыми значениями.

Когда вы запускаете функцию с идеальным квадратом, это целое число, которое отображается в консоли. Когда вы запускаете функцию, используя не совершенный квадрат, это значение, которое записывается в консоль (sys.stdout), затем оно также return s Нет, которое также отображается в консоли.

+0

Так что нет ничего плохого, я думаю ? Он должен возвращать нет? – user3276549

+1

@Nabla - По-прежнему кажется, что у кода OP чего-то нет - я бы предпочел бы, что сделанный вызов на самом деле «print sqrt (n)», но это только я размышляю. Экстра 'Нет' на выходе сеанса интерактивного терминала генерируется из-за неправильного использования операторов' return' и 'print' (как правило, по крайней мере). –

+0

@ g.d.d.c Спекуляция? Он прямо говорит в вопросе, что он добавил 'print sqrt (34)' в код для его проверки. – Barmar

0

Вы "получаете" None, потому что вы возвращаете None.

Если вы хотите съесть None попробовать что-то вроде:

a = sqrt(34) 
if a: print (a) 
+0

@Nabla: Я думаю, что OP сказал, что он использует compileonline.com. –

+0

@Nabla Стандартный интерпретатор python не показывает None, no. Вот почему, по-видимому, у OP получается что-то другое. – 2rs2ts

+0

@Nabla: Да, я думаю, вы правы. –

1

При вводе выражения в интерактивном режиме Python, он обычно выводит результат этого выражения. Однако, когда выражение возвращает None, оно не выводит это возвращаемое значение. В любом случае, если вызываемая вами функция выполняет явно print, эти данные печатаются. Это то, что происходило в видео: когда он назвал его квадратом, он вернул квадратный корень, а интерактивный цикл напечатал это возвращаемое значение; когда он назвал его неквадратичным, функция напечатала 34 is not a perfect square и вернула None, которую интерактивный цикл не распечатывал.

Разница в вашем случае состоит в том, что вы написали print sqrt(34). Поэтому вы прямо указываете, чтобы напечатать возвращаемое значение.Это не имеет особого исключения для значения None, поэтому вы печатали None в тех случаях, когда функция возвращает это.

+0

Хорошо, я вижу. Большое спасибо. – user3276549

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