2013-10-24 30 views
0

我是Python中的新手,并且是我的第3天。我只是用这个丑陋的例子来升温Python的一些语法。Python不可理解的流程控制

networks = {"Ufone": 333, "Mobilink": 300, "Warid": 321} 

def get_network(n): 
    for network in networks: 
     if n == networks[network]: 
      return "Network is " + str(network) 
     else: 
      return "Network not listed" 

print(get_network(321)) 

你知道它应该导致Network is Warid当我运行使用Ctrl + B有时它会导致崇高控制台中的脚本..

Network is Warid [Finished in 0.1s]

等次..

Network not listed [Finished in 0.1s]

and mysese如果知道我没有更改函数参数中的任何值。这是我第一次在编程中遇到这个有趣的问题。

+0

它总是说我的网络是Warid [已完成0.0s]。 – thefourtheye

+2

@thefourtheye:在Python 3.3中,使用散列随机化,字典顺序可以在运行之间有所不同。所以,完全随机地,'Ufone'可以列在第一位并且不匹配。 –

+0

@thefourtheye在回答中添加您的评论行。 –

回答

6

你的循环没有做太多的循环。您仅在测试第一个条目后返回。

移动第二return圈外

def get_network(n): 
    for network in networks: 
     if n == networks[network]: 
      return "Network is " + str(network) 

    return "Network not listed" 

现在你循环,直到你找到一个匹配网络,且仅当你测试的所有项目,并没有找到匹配你跟Network not listed返回。

+0

另外,使用'items()'/'iteritems()'遍历字典是有意义的。 – Esenti

+0

@Esenti:当然,但这不是问题。 OP是学习Python的3天;必要的是,更多细节压倒他们不会有帮助。 –