2012-05-06 3 views
0

나는 통신하는 별도의 스크립트에서 2 가지 기능을 가지고 있습니다. 값이 존재하면 변수는 % username %로 설정되어야합니다. 값이 존재하지 않으면 "없음"으로 설정해야합니다. 변수를 none으로 설정하면 함수가 계속해서 새 계정을 만들어야합니다. 변수가 사용자 이름으로 설정된 경우, 함수는 계속되어야합니다. 그래서 왜 일관성이없고 엉뚱한 결과가 나옵니까? 가 포함되지 않은 다른 함수 호출로 다음과 같은Python 값 혼동

기능, 그들은 실행되지 않습니다 :

def database_get_user_details(user_database, username, detail): 
    value = "None" 
    rows = ((users_db_curs.execute("SELECT * FROM '" + user_database + "' WHERE username='" + username + "'"))).fetchall() 
    for row in rows: 
     if rows: 
      if detail == ("userID")  : value = str(row[1]) 
      elif detail == ("username") : value = str(row[2]) 
      elif detail == ("password") : value = str(row[3]) 
      elif detail == ("creator_exp"): value = str(row[4]) 
      else       : value = "None" 
     else: 
      value = "None" 
    return value 

def game_register(username_table_name): 
    while True: 
     while True: 
      user_ID = raw_input("E-mail address: ") 
      if user_ID != "": 
       break 
     while True: 
      username = raw_input("Username  : ") 
      if username != "": 
       break 
     while True: 
      password = raw_input("Password  : ") 
      if password != "": 
       password = password.encode("hex") 
       break 
     usr = database_get_user_details(username_table_name, username, "username") 
     print usr 
     if (usr != "None") or (usr != None): 
      print usr 
      print "Username already taken!" 
      pause() 
     else: 
      database_create_user(username_table_name, user_ID, username, password, "250") 
      print "Successfully created %s with password: %s" %(username, password.decode("hex")) 
      pause() 
      break 

주의 사항을, 나는 보안에 대한 실제 암호 암호화 알고리즘을 포함하지 않은 - 그냥 설정 이 예에서는 16 진수로 인코딩됩니다.

편집 : 나는) (random.choice를 호출하고있는 것처럼

그것은 거의 내가 함수가 새 사용자를 생성 여부에 관한 어떤 일관성을 찾을 수 있습니다 설명 잊어 버렸거나 하더군요 사용자 이름이 이미 사용되었습니다.

+0

당신이 당신의 "이상한"결과를 설명 할 수 있어야한다? – jdi

+0

@jdi 원래 게시물을 편집했습니다. 감사합니다. – abkai

+0

나는 암호화가 일반적으로 꽤 공개적으로 유지된다는 것을 주목할 가치가 있다고 생각한다. 이 패러다임은 실제로 암호화 알고리즘을 크게 개선했습니다. 키가 충분히 큰 강력한 알고리즘 (또는 what-have-you)을 사용하고 있다면, 사람들이 그것에 대해 알아내는 것에 너무 많은 걱정을하지 않아야합니다. – Paragon

답변

0

부등식 중 하나 이상이 참이기 때문에 기존 사용자에 대한 코드가 항상 트리거됩니다.

if (usr != "None") or (usr != None): 
     print usr 
     print "Username already taken!" 
     pause() 

조건은

if (usr != "None") and (usr != None):