2016-12-23 1 views
-3

Это ошибка, я получаю, когда я пытаюсь найти имя пользователя:Двоичный поиск имени пользователя вызывает TypeError: Не удается преобразовать ВНУТР объект ул неявно

[['[email protected]', 'Password1'], ['[email protected]', 'Password2'], ['[email protected]', 'Password3']] 
Please enter a [email protected] 
Traceback (most recent call last): 
    File "C:\Users\TomEllison22\Documents\Work\A Levels\Computing\guesspassword2 (2).py", line 88, in <module> 
    login=login_user(MY_PASSWORD) 
    File "C:\Users\TomEllison22\Documents\Work\A Levels\Computing\guesspassword2 (2).py", line 68, in login_user 
    index = BinarySearch(MY_PASSWORD,username,Last,ItemSought) 
    File "C:\Users\TomEllison22\Documents\Work\A Levels\Computing\TEST_BINARY.py", line 19, in BinarySearch 
    Midpoint = (First + Last) // 2 
TypeError: Can't convert 'int' object to str implicitly 

Как я могу получить его правильно искать и находить имя пользователя, которое я вводил?

def login_user(MY_PASSWORD): 
    MY_PASSWORD = BubbleSort(MY_PASSWORD) 
    while True: 
     username = input("Please enter a username") 
     ItemSought=username 
     if validateEmail(username): 
      print("Not a valid email address") 
      continue 
     Last = len(MY_PASSWORD)-1 
     index = BinarySearch(MY_PASSWORD,username,Last,ItemSought) 
     if index > -1: 
      break 
     else: 
      print("User doesnt exist") 
    while True: 
     print() 
     password = input("Password:") 
     print() 
     if LengthCheck(password,5): 
      print("Password too short") 
      continue 
     else: 
      print("Password correct length") 


def BubbleSort(MY_PASSWORD): 
    NoSwaps = 1 
    N = len(MY_PASSWORD) 
    while NoSwaps == 1: 
     Count = 1 
     NoSwaps = 0 
     for Count in range(N-1): 
      if MY_PASSWORD[Count] > MY_PASSWORD[Count+1]: 
       temp = MY_PASSWORD[Count] 
       MY_PASSWORD[Count] = MY_PASSWORD[Count+1] 
       MY_PASSWORD[Count+1]=temp 
       NoSwaps=1 
    return MY_PASSWORD 


def BinarySearch(List,First,Last,ItemSought): 
    ItemFound = False 
    SearchFailed = False 
    Midpoint = (First + Last) // 2 
    #print('midpoint',Midpoint) 
    if List[Midpoint] == ItemSought: 
     ItemFound = True 
    else: 
     if First >= Last: 
      SearchFailed = True 
     else: 
      if List[Midpoint] < ItemSought: 
       BinarySearch(List,Midpoint + 1,Last,ItemSought) 
      else: 
       BinarySearch(List,First,Midpoint-1,ItemSought) 
    if SearchFailed: 
     print("searchfailed") 
    if ItemFound: 
     print("itemfound") 

if __name__ == "__main__": 
    List=["Tom","Harry","Sam","Joe"] 
    List = BubbleSort(List) 
    ItemSought=(input("Enter a username")) 
    First = 0 
    Last = len(List)-1 
    print(List)#,First,Last,ItemSought) 
    BinarySearch(List,First,Last,ItemSought) 
+3

Пожалуйста, не публикуйте скриншоты кода или сообщений об ошибках. Скриншоты не доступны для поиска, они недоступны для людей с нарушением зрения, и мы не можем копировать и вставлять код со скриншотов, если мы хотим попытаться воспроизвести вашу проблему на наших собственных машинах или найти сообщение об ошибке. – ThisSuitIsBlackNot

+2

Это не так сложно отправить код :) http://meta.stackexchange.com/questions/51144/how-do-i-post-code-in-stackoverflow – ppasler

+0

Пожалуйста, вставьте код в свой вопрос, а не ссылку – MrLeeh

ответ

1
index = BinarySearch(MY_PASSWORD,username,Last,ItemSought) 

Не очень понятно, почему вы, кажется, двоичный поиск строки (или неупорядоченных списков), но вы установили первый в виде строки, и она должна быть числом.

Это не будет работать

(username + Last) // 2 

Также стоит отметить - пожалуйста, не капитализировать Python имена переменных. Это затрудняет чтение для других.

+0

Похоже, что 'MY_PASSWORD = BubbleSort (MY_PASSWORD)' сортирует список паролей. Сначала я пропустил это, потому что имена во всех шапках традиционно являются константами. (@T.E: Это нечто вроде cricket_007, означающее значительную капитализацию в Python ... если только для людей.) –

+0

Я действительно не вижу «список паролей» в представленном коде. Я бы предположил, что «MY_PASSWORD» является строкой singluar, основанной на наименовании, но, возможно, не –

+1

. Другими словами, 'login_user' никогда не вызывается в предоставленном коде. –

0

Как StackTrace показывает, что вы звоните BinarySearch со строкой вместо целого:

def login_user(MY_PASSWORD): 
    ... 
    username = input("Please enter a username") 
    ItemSought=username 
    ... 
    Last = len(MY_PASSWORD)-1 
    index = BinarySearch(MY_PASSWORD,username,Last,ItemSought) 

можно передать имя пользователя (строка) в BinarySearchдважды: один раз как username (как аргумент параметра First) и один раз как ItemSought. Тогда, в BinarySearch:

Midpoint = (First + Last) // 2 

Это пытается добавить строку и число, в результате чего в TypeError до разделения или уступки может произойти.

PS: Кажется, вы пытаетесь найти имя пользователя в списке паролей ... Я не знаю, что вы пытаетесь сделать, но это точно выглядит как ошибка.

+0

@kevinjchase Извините, что вы вернулись к этому, но не могли бы вы объяснить, почему First является строкой, когда она должна быть 0 (первый элемент в списке MY_PASSWORD) (Извините за нечеткое именование этого MY_PASSWORD - это текстовый файл с макетом имени пользователя и пароля поэтому 'username' запятая 'password' следующая строка 'username' запятая 'password' так далее ... Im не уверен, почему First является строкой, противоположной Last, являющейся целым числом, я понимаю, почему разделение не происходит, я просто не уверен, как исправить это –

+0

Не уверен, что я получил правильный @ KevinJ.Chase –

+0

@TE: «почему' First' является строкой, когда она должна быть «0'» --- Потому что вы передали строку в качестве аргумента 'First'. I даже цитировал в моем ответе строки, в которых вы это делали. Точно так же 'Last' является целым числом, потому что вы передали ему целое число (также цитируемое в моем ответе). Как я уже указывал в своих комментариях к другому ответу, Повторное выполнение этой программы является для нас загадкой. Ошибки, о которых вы сообщаете, относятся к 'logi n_user', а не из блока 'if __name __...:', поэтому вы не выполняете этот скрипт обычным способом. –

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