2011-03-02 267 views
0

我已经经历了大部分相关的问题,并且他们都没有给我提供我需要的程序的想法。使用if if语句检查列表

users = ["Block Harris", 
     "Apple Mccoy", 
     "Plays Terry", 
     "Michael Strong", 
     "Katie Blue"] 

nicknames = ["Block", 
      "Apple", 
      "Plays", 
      "Michael", 
      "Katie"] 


passwords = ["abc", 
      "def", 
      "ghi", 
      "jkl", 
      "mno"] 

levels = [5,2,1,4,3] 

security = 0 
found_user = False 

username = "" 
while not username: 
    username = input("Username: ") 

password = "" 
while not password: 
    password = input("Password: ") 

for i in range(5): 
    if username == users[i]:  
     found_user = True   
     if password == passwords[i]: 
      security = levels[i] 
      print("Welcome, ", nicknames[i]) 
      break     
     else: 
      print("Sorry, you don't know the password.") 

if found_user == levels[0]: 
    print("Security level 1: You have little privelages. Congratulations.") 
elif found_user == levels[1]: 
    print("Security level 2: You have more than little privelages. Congratulations.") 
elif found_user == levels[2]: 
    print("Security level 3: You have average privelages. Congratulations.") 
elif found_user == levels[3]: 
    print("Security level 4: You have more than average privelages. Congratulations.") 
elif found_user == levels[4]: 
    print("Security level 5: You have wizard privelages. Congratulations.") 

else: 
    print("Apparently you don't exist.") 

data_network() 

什么我想在这里做的是试图测试各个成员的安全级别或发现数据库中的用户,然后使用if-else语句根据自己的安全级别打印相应的消息下面。我不知道该程序在做什么,但它不是根据列表中的级别评估找到的用户。例如,对于第一个人,列表中的级别相应为5,但它会输出“找到用户==级别[2]”的消息。

回答

7

您正在将“FoundUser”设置为“True”或“False”,但随后检查整数列表中的级别。它总是打印2,因为在列表中的第二项是1

建议:

取而代之的形成都只能勉强与根据自己的排序名单,你应该拿出一个包含所有类信息链接在一起:

class User(object): 
    def __init__(self, name, nickname, password, security_level): 
     self.name = name 
     self.nick = nickname 
     self.pw = password 
     self.level = security_level 

    def authenticate(self, name, password): 
     return self.name == name and self.pw == password 

    def getLevel(self, name, password): 
     if self.authenticate(name, password): 
      print("Welcome", self.nick) 
      return self.level 
     else: 
      return None 
+1

Upvoted,但我可能会将“return -1”替换为“return None”。 – 2011-03-02 01:31:52

+0

@Jeff Bauer Duly注意到并改变了。 – wheaties 2011-03-02 01:33:37

2

看一看麦片的答案,这是很好的建议。关于您的代码,您正尝试使用found_user来访问安全级别。 found_user是一个布尔不是一个级别。你应该使用你的security变量。

当要打印的级别信息,使用security变量和对证的水平,不包含用户的不同级别的列表:

if security == 1: 
    print("Security level 1: You have little privelages. Congratulations.") 
elif security == 2: 
    print("Security level 2: You have more than little privelages. Congratulations.") 
elif security == 3: 
    print("Security level 3: You have average privelages. Congratulations.") 
elif security == 4: 
    print("Security level 4: You have more than average privelages. Congratulations.") 
elif security == 5: 
    print("Security level 5: You have wizard privelages. Congratulations.") 

else: 
    print("Apparently you don't exist.") 

甚至

levels_info = [ 
     "Security level 1: You have little privelages. Congratulations.", 
     "Security level 2: You have more than little privelages. Congratulations.", 
     "Security level 3: You have average privelages. Congratulations.", 
     "Security level 4: You have more than average privelages. Congratulations.", 
     "Security level 5: You have wizard privelages. Congratulations." 
    ] 

    if security in levels_info: 
     print levels_info[security] 
    else 
     print "Apparently you don't exist." 
+0

啊,你也注意到了。 +1快速抽奖。 – senderle 2011-03-02 01:42:39

0
dic = {"Block Harris":("Block","abc",5), 
     "Apple Mccoy":("Apple","def",2), 
     "Plays Terry":("Plays","ghi",1), 
     "Michael Strong":("Michael","jkl",4), 
     "Katie Blue":("Katie","mno",3)} 

message = dict(zip(1,2,3,4,5),("Security level 1: You have little priveleges. Congratulations.", 
           "Security level 2: You have more than little priveleges. Congratulations.", 
           "Security level 3: You have average priveleges. Congratulations.", 
           "Security level 4: You have more than average priveleges. Congratulations.", 
           "Security level 5: You have wizard priveleges. Congratulations.")) 


username = "" 
while not username: 
    username = raw_input("Username: ") 

password = "" 
while not password: 
    password = raw_input("Password: ") 

try: 
    if password==dic[username][1]: 
     security = dic[username][2] 
     print("Welcome, ", dic[username][0]) 
     print(message[security]) 
    else: 
     print("Sorry, you don't know the password.") 
except: 
    print("You are not registered") 

编辑:

上述消息作为一个与dictionnary在泰格作为关键是愚蠢的;这一个更好

message = ("Security level 1: You have little priveleges. Congratulations.", 
      "Security level 2: You have more than little priveleges. Congratulations.", 
      "Security level 3: You have average priveleges. Congratulations.", 
      "Security level 4: You have more than average priveleges. Congratulations.", 
      "Security level 5: You have wizard priveleges. Congratulations.")