2015-01-14 2 views
-1

Таким образом, назначение состоит в том, чтобы представить, что python не имеет! = Встроенный, и написать функцию not_equal, которая принимает два параметра и дает тот же результат, что и оператор! =.Определение функции not_equal в Python

я написал ситемы следующий код:

def not_equal(x, y): 
    if x == 0 or y == 0: #avoid error message for dividing by 0 
     if ((y+1)/(x+1)) == 1: 
      equal = False 
    elif x/y == 1: 
     equal = False 
    else: 
     equal = True 
    return equal 

и испытаны следующие случаи испытаний:

print not_equal(3, 4) 
print not_equal(5, 5) 
print not_equal(0, 3) 
print not_equal(4, 0) 

Первые две работы, но второй два дают мне следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "/Users/dvanderknaap/Desktop/My Python Programs/hw2.py", line 73, in <module> 
    print not_equal(0, 3) 
    File "/Users/dvanderknaap/Desktop/My Python Programs/hw2.py", line 67, in not_equal 
    return equal 
UnboundLocalError: local variable 'equal' referenced before assignment 

Почему?

+1

Посмотрите на вложенном, если и вставить ваши номера там и проверить, что они производят. – TidB

+2

Подумайте о x = -1, y = 0. – Alex

+0

Кроме того, будьте осторожны: на python2.x (который, по-видимому, используется вашими операторами печати), '3/2 == 1 # True', но' not_equal', вероятно, скажет «False» в этом случае :-). – mgilson

ответ

3

Когда вы передаете 0 или как х или у, этот код запускается:

if x == 0 or y == 0: #avoid error message for dividing by 0 
    if ((y+1)/(x+1)) == 1: 
     equal = False 

Теперь, (0, 4), проверки Python, если (4 + 1)/(0 + 1) равно 1, и, поскольку он этого не делает, он никогда не устанавливает equal на что угодно.

+0

Ahhh, поэтому я добавил условие else в этот первый цикл if, если он не равен 1, он вернет True. Большой! Благодаря! – numbersloth

+0

Точно. :) Удачи с вашим проектом! –

0
if x == 0 or y == 0: #avoid error message for dividing by 0 
     if ((y+1)/(x+1)) == 1: 
      equal = False 

print not_equal(0, 3) 
print not_equal(4, 0) 

Эти, положите их в свое заявление if;

(y+1)/(x+1)= 1/4 and 1/4 != 1. 
(y+1)/(x+1)= 5/1 and 5 != 1. 

Так что ваш if заявление никогда не процесс, если х и у = 0.

+2

Чтобы быть справедливым, ответ, предоставленный @JoelHinz, (ИМХО) намного легче понять. Когда я читаю его ответ, я могу четко видеть проблему, в частности, в некоторых случаях «равный» не устанавливается. В ваших объяснениях гораздо сложнее различить то, что вы пытаетесь сказать (хотя, в конечном счете, , вы пытаетесь сказать то же самое). – mgilson

3

Зачем так круто ?! После того, как все гипотезы заключается в том, что != исчезает, но я не вижу ничего о ==, поэтому он должен еще быть там! -)

def not_equal(a, b): 
    return not (a==b) 
+0

Это было бы слишком легко. – jgritty

+1

@jgritty, некоторые из них рождаются простыми, некоторые достигают простоты, а некоторые имеют простоту, навязанные им ... Я принадлежу к последней группе!) –

+0

Я думаю, OP должен объяснить, почему простейшего ответа недостаточно. Я предположил, что по какой-то причине они не использовали этот подход. – jgritty

0

Ошибка может возникнуть из-за ошибки в объявлении равной переменной. Объявите переменную equal явно перед ее использованием, то есть equal = None.

Кроме того, здесь есть функция для достижения тех же целей (с == все еще разрешен вашим назначением):

def not_equal(x, y): 
    if x == y: 
     equal = False 
    else: 
     equal = True 
    return equal 
Смежные вопросы