2013-10-19 12 views
-6

当我给在命令行输入 - > stringsearch.py​​乔为什么其他部分是每次执行的结果一致

Expected Result: joe foe 

Actual Result: joe foe 
       No String 

代码:

#!usr/bin/python 
import sys 

SearchString = sys.argv[1] 

def __init__(self, fname, lname): 
    self.fname = fname 
    self.lname = lname 

def display(self): 

    if SearchString in per.fname: 
     print per.fname, per.lname 
    if SearchString in per.lname: 
     print per.fname, per.lname 
    else: 
     print "No String" 

obj=[People("joe","foe"),People("lui","sui")] 
for per in obj: 
    per.display() 

我应该在哪里写的要获得预期的ouptput

+0

您的代码按预期工作。 '如果per.lname:'中的SearchString是假的。 ''乔'不在'敌人'==真'' – TerryA

+2

这是一些非常奇怪的代码 - 你定义的“方法”以'self'作为参数,但是没有课程可以看到。请张贴一些至少有机会运行的代码。 –

+0

我在哪里纠正自己? –

回答

3

其他部分的第一个问题:

def display(self): 

    if SearchString in per.fname: 
     print per.fname, per.lname 
    elif SearchString in per.lname: 
     print per.fname, per.lname 
    else: 
     print "No String" 

if声明本身并不构成一组替代。要指示使用elif关键字,那么如果没有满足任何条件,则将执行else部件。 在您的第一个版本中,第一个if已单独验证。在此之后,有一个单独的替代方案:或者print per.fname, per.lname,如果确实是SearchString in per.lnameprint "No String",则无论第一个if的评估结果如何。

第二个问题是在这里:

obj=[People("joe","foe"),People("lui","sui")] 
for per in obj: 
    per.display() 

如果您用joefoe脚本在第一次迭代中,将打印您的预计结果的争论。但是,在第二次迭代中,它不会匹配第二个对象中的任何内容并打印"No String"

一个可能的解决方案:

#!usr/bin/python 
import sys 

SearchString = sys.argv[1] 

class People: 
    def __init__(self, fname, lname): 
     self.fname = fname 
     self.lname = lname 

    def isMatching(self, matchString): 
     return matchString in self.fname or matchString in self.lname 

    def display(self): 
     print self.fname, self.lname 

obj=[People("joe","foe"),People("lui","sui")] 
anyMatched = False 
for per in obj: 
    if per.isMatching(SearchString): 
     anyMatched = True 
     per.display() 

if not anyMatched: 
    print "No String" 

注意,我做的唯一的事情就是使功能表现为他们的名字说。如果你坚持这个简单的规则,它会为你节省很多麻烦。您的原始display功能做了很多,然后只是“显示”:)

相关问题