2015-12-11 6 views
1

привет я хочу, чтобы проверить данные 2 строки в качестве аргументов, появляется строка первой в словаре из моего учебника я думал, что это будет работать, но я получаю сообщение об ошибке сказав:взять две строки, который приходит первым в словаре лексикографическом порядке

if a > b: 
TypeError: unorderable types: builtin_function_or_method() > builtin_function_or_method() 

для кода:

def earlier(s1, s2): 
    a = "" 
    b = "" 
    a = s1.lower 
    b = s2.lower 
    if a > b: 
     print(s1) 
    elif a < b: 
     print(s2) 
earlier("alpha", "all") 
+0

примечание: это работает, если я не использую .lower, но затем строки сначала сортируются по UpperCase – Sinoda

+1

Попробуйте 'a = s1.lower()' и 'b = s2.lower()'. Вы ссылаетесь на методы, а не называть их. (И, может быть, подумайте о том, что вы хотите сделать, если s1 и s2 равны, но это не ваша основная проблема.) –

+1

Вы забыли(), чтобы на самом деле вызвать метод 'lower'. – timgeb

ответ

1
def earlier(s1, s2): 
    print(sorted([s.lower() for s in [s1, s2]])[0]) 
1

Поступая б = s2.lower вы делаете ссылку ба в нижней функции, вы не установите его в результате вызова ниже(). Поэтому, когда вы пытаетесь сравнить их с помощью оператора>, вы получаете ошибку.

Следующий код должен работать вместо того, чтобы:

def earlier(s1, s2): 
    a = s1.lower() 
    b = s2.lower() 
    if a > b: 
     print(s1) 
    elif a < b: 
     print(s2) 
earlier("alpha", "all") 

Переменные а и б будет инициализирован с линиями а = s1.lower() и б = s2.lower(), так что а = «» и b = "" не нужно.

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

  • Нет связанных вопросов^_^