Вам нужно пропустить второе испытание, если первое испытание истинно. Один из ваших аргументов - это строка, и эта строка не может быть преобразована в целое число, потому что Adieu
состоит из букв, а не цифр.
Вы можете сделать это с помощью elif
вместо if
:
if type(varA) == type('s')) or (type(varB) == type('s')):
print "string involved"
elif int(varA)>int(varB):
print "bigger"
elif (int(varA)<int(varB)):
print "smaller"
else:
print "equal"
Вам не нужно конвертировать varA
и varB
в целых числах вообще здесь, хотя, потому что ваш первый тест уже установлено, что ни один не строки, и я знаю, назначение вы делаете только переходит в строки или целые числа:
if type(varA) == type('s')) or (type(varB) == type('s')):
print "string involved"
elif varA > varB:
print "bigger"
elif varA < varB:
print "smaller"
else:
print "equal"
Далее, вы не» t должен использовать type('s')
, если вы можете напрямую ссылаться на результат этого теста, используя str
; если вы собираетесь использовать type()
, вы должны проверить идентичности вместо равенства здесь:
if type(varA) is str or type(varB) is str:
print "string involved"
elif int(varA)>int(varB):
print "bigger"
elif (int(varA)<int(varB)):
print "smaller"
else:
print "equal"
Это почти всегда лучше использовать isinstance()
для проверки типов, хотя, так как это позволяет подклассов, чтобы пройти тест тоже:
if type(varA) == type('s')) or (type(varB) == type('s')):
print "string involved"
elif varA > varB:
print "bigger"
elif varA < varB:
print "smaller"
else:
print "equal"
Далее, вы не должны использовать type('s')
, когда вы можете ссылаться на результаты этого теста непосредственно с помощью str
; если вы собираетесь использовать type()
, вы должны проверить идентичности вместо равенства здесь:
if isinstance(varA, str) or isinstance(varB, str):
print "string involved"
elif varA > varB:
print "bigger"
elif varA < varB:
print "smaller"
else:
print "equal"
Я сильно подозреваю, что ваше задание просит вас создать функцию, которая возвращает результата, не печатать. В этом случае вам необходимо использовать return
заявление вместо:
if isinstance(varA, str) or isinstance(varB, str):
return "string involved"
elif varA > varB:
return "bigger"
elif varA < varB:
return "smaller"
else:
return "equal"
К 'varB = adieu' вы имеете в виду' varB = «adieu''? Почему вы используете равенство типа, а не, например, 'isinstance (varA, basestring)'? – jonrsharpe
int (varA) пытается преобразовать вашу строку в int. Это невозможно, если ваше первое условие - True. Если вы измените свой второй «если» на «elif», он больше не будет пытаться это сделать – Baart