Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么if和else语句都要执行{python}_Python_Oop_If Statement - Fatal编程技术网

为什么if和else语句都要执行{python}

为什么if和else语句都要执行{python},python,oop,if-statement,Python,Oop,If Statement,我在store类中提到过,如果for循环结束并且仍然没有返回,那么search将返回None,在main中,我只写了如果它是None,那么将不打印任何内容,但它仍然不打印任何内容 我不认为在类似类型的问题中有任何缩进 class book: def __init__(self,_id,name,tech,price,auth): self._id=_id self.name=name self.tech=tech self.

我在store类中提到过,如果for循环结束并且仍然没有返回,那么search将返回None,在main中,我只写了如果它是None,那么将不打印任何内容,但它仍然不打印任何内容 我不认为在类似类型的问题中有任何缩进

class book:
    def __init__(self,_id,name,tech,price,auth):
        self._id=_id
        self.name=name
        self.tech=tech
        self.price=price
        self.auth=auth
    
    def _print(self):
        print(self._id)
        print(self.name)
        print(self.tech)
        print(self.price)
        print(self.auth)
    
class store:
    def __init__(self,bookdb,name='abc'):
        self.bookdb=bookdb
        self.name=name
    
    def search(self,b_name,book_list):
        for i in book_list:
            if i.name==b_name:
                return i._print()
        else:
            return None
    def discount(self,tech,book_list):
        amt=0
        for i in book_list:
            if i.tech==tech:
                amt+=i.price
        return amt*(0.9)

if __name__=="__main__":
    t = int(input())
    b_list=[]
    bookdb=dict()
    for i in range(t):
        _id=int(input())
        name=str(input())
        tech=str(input())
        price=int(input())
        auth=str(input())
        b_list.append(book(_id,name,tech,price,auth))
        bookdb[i]=book(_id,name,tech,price,auth)
    
    title=str(input())
    tech=str(input())
    
    store_i=store(bookdb)
    
    if store_i.search(title,b_list)== None:
        print('nothing')
    else:
        store_i.search(title,b_list)
    
    if store_i.discount(tech,b_list)== 0:
        print('0.0')
    else:
        print(store_i.discount(tech,b_list))
        
三, 1. 抽搐 CPP 300 在线 的 2. 铬 JAVA 500 博斯瓦米 3. 溴 JAVA 700 拉贾 抽搐 爪哇

输出

所需输出

p.S.bookdb dic在这里没有任何用处

类book中的_print方法没有return语句,因此python将隐式返回None。然后在搜索函数中,当您返回i._print时,它也会返回None,这就是为什么您会看到nothing输出

由于要测试结果,您最好将搜索返回设置为布尔值,以下是建议的编辑:

def search(self,b_name,book_list):
    for i in book_list:
        if i.name==b_name:
            i._print()
            return True
    else:
        return False

您的代码有很多地方出错

首先,如果要提示用户输入,则应在提示的同时提供一条消息。比如: 其次,Python对代码的可视结构非常敏感,即缩进级别。例如,ifs的else必须始终位于同一缩进级别。 第三,从这个角度看,这显然不是你想要的。return语句必须位于for循环之后 第四,返回i._print不会返回i,除非_print函数返回i作为其最后一条语句。 有了这些话,你应该试试看

    def search(self,b_name,book_list):
        for i in book_list:
            if i.name==b_name:
                i._print()
                return i
        return None
而且,总的来说

尝试给出描述性的变量名。如果不使用调试器,很难阅读和理解代码。你应该能够阅读它,并尽可能多地理解它在做什么。所以像t或不明显的缩写之类的变量应该避免。 这与提示用户一起进行。如果要将内容打印到控制台,请提供一些文本来解释用户正在阅读的内容。比如: 有更多的单一责任原则,…,但这是一个好的开始。在前进的过程中,你会学到更多。
if store_i.searchtitle,b_list:store_i.searchtitle,b_list else:print'nothing'都被打印在'if'中,下面的一个,即输出被打印两次,一次没有'amt',一次有'amt',这里有两个问题:首先,你调用搜索函数两次,一次在if表达式中,一旦进入else分支,为什么还要再次调用它呢?第二,搜索功能做两件事:搜索和打印一个副作用,你应该将两者分开:如果找到,搜索应该返回一个图书对象,或者没有;如果搜索返回了一个对象,那么你应该调用_print。好吧,我正在练习一个测试,无论我在哪里,我都可以节省一些时间,但我还是会采纳你的建议
1
TIC
CPP
300
Online
1080.0
def search(self,b_name,book_list):
    for i in book_list:
        if i.name==b_name:
            i._print()
            return True
    else:
        return False
...
name=str(input("Enter Book Name: "))
...
    def search(self,b_name,book_list):
        for i in book_list:
            if i.name==b_name:
                return i._print()
            else:
                return None
    def search(self,b_name,book_list):
        for i in book_list:
            if i.name==b_name:
                i._print()
                return i
        return None
...
print("Book Name: ", self.name)
...