语言:Python(vers3.3); if语句内部while和if语句

时间:2013-05-06 14:50:56

标签: python if-statement dictionary while-loop boolean-logic

我的程序无法进入if / else语句的最后一个。 我的代码:

def main_prog(): 
    while True:
        data_dict = {'123': 'viksun', '111': ['tord'], '333': ['test']} # Data storage.
        print (data_dict)           # Track-print
        prompt = input('Enter command >>> ').split(" ")
        if prompt[0] == 'lookup':   
            B_value = name_lookup_return_boolean(data_dict, prompt[1]) 
            if B_value == True:
                print (prompt[1],"'s number is:", name_lookup(data_dict, prompt[1])) 
            else:
                print("The name:" ,prompt[1], "do not exist, please try a different name")

字典的数据结构:data_dict

data_dict = {'123': ['name1'], '111': ['tord'], '333': ['test']} # Data storage.

功能描述:   - name_lookup_returns_boolean(data_dict, name)返回一个布尔值:如果名称位于字典中,则返回True;如果名称不存在,则返回False。   - name_lookup返回与特定名称对应的密钥。

这些功能已经与整个程序分开测试,因此它们正在运行。如果你需要它们,我也可以发布它们。

我无法让程序运行程序中的最后一个else语句。如果字典中不存在该名称,则会运行此命令:data_dict

这是两个函数的实现:

def name_lookup(data_dict, name):
    for key, value in data_dict.items():
        if name in value:
            return key



def name_lookup_return_boolean(data_dict, name):
    for value in data_dict.items():
        if name in value:
            return True
        else:
            return False

这是我试图使用没有成功的变种:

def name_lookup_version_02(data_dict, name):
   for value in data_dict.values():
       if name in value:
           return True
       else:
           return False

2 个答案:

答案 0 :(得分:0)

在这一行:

if B_value == True:

我猜测B_value包含真值,但不是True。试试这个:

if B_value:

答案 1 :(得分:0)

问题出在您的name_lookup_return_boolean功能中。您将为这两个条件返回True。此外,您应该枚举keyvalue,否则将为值分配一个元组。

它应该是这样的:

def name_lookup_return_boolean(data_dict, name):
  for key,value in data_dict.items():
    if name in value:
      return True

更新:经过测试,我意识到以前的答案是错误的 - 只匹配第一个值