微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么 if 和 else 语句都被执行 {python}

我在商店类方法搜索中提到如果 for 循环结束并且仍然没有返回则返回 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,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,auth))
        bookdb[i]=book(_id,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))
        
**Input**

3
1
TIC
CPP
300
在线
2
CR
爪哇
500
BSwamy
3
BR
爪哇
700
拉贾
TIC
爪哇

输出

1
TIC
CPP
300
Online
nothing
1080.0

需要输出

1
TIC
CPP
300
Online
1080.0

附言bookdb dic 在这里没有任何用处

解决方法

book类中的_print()方法没有return语句,所以python会隐式返回None。然后在 search 函数中,当您执行 return i._print() 时,它也会返回 None,这就是为什么您会看到“没有”输出。

既然你要测试结果,你不妨让 search() 返回一个布尔值,这是一个建议的编辑:

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: "))
...
  • 其次,Python 对代码的(视觉)结构(即缩进级别)非常敏感。因此,例如,“if”的“else”必须始终处于相同的缩进级别。
    def search(self,book_list):
        for i in book_list:
            if i.name==b_name:
                return i._print()
            else:
                return None
  • 第三,看看这个,这显然不是你想要的。 return 语句必须在 for 循环之后
  • 第四,返回 i._print() 不会返回 i,除非 _print 函数返回 i 作为其最后一条语句。

有了这些评论,你应该试试

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

一般来说也是

  • 尝试给您的变量名称提供描述性的名称。不使用调试器很难阅读和理解您的代码。您应该能够阅读它并尽可能多地理解它在做什么。因此,应避免使用 t 之类的变量或不明显的缩写。
  • 这与提示用户一起进行。如果您要将内容打印到控制台,请提供一些文本来解释用户正在阅读的内容。类似于:
...
print("Book Name: ",self.name)
...
  • 还有更多(单一职责原则,...),但这是一个“好的”开始。随着您的前进,您会学到更多。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?