【问题标题】:python if-statement and boolean(how to combine two functions into one)python if-statement and boolean(如何将两个函数合二为一)
【发布时间】:2015-03-24 05:38:53
【问题描述】:

我为每个表编写了两个函数来接收字段的命令。我的队友需要我将两个功能重新组合为一个。最后我做了这个功能,但它无法接收我的 router table 的命令。 这是我的两个功能:

# def readrouter(x):
#         conn = sqlite3.connect('server.db')
#         cur = conn.cursor()
#         cur.execute("SELECT DISTINCT command FROM router WHERE   function =? or function='configure terminal' or function='enable'  ORDER BY key ASC",(x,))
#         read = cur.fetchall()
#         return read;
#
# a = input("x:")
# for result in readrouter(a):
#     print (result[0])

# def readswitch(x):
#         conn = sqlite3.connect('server.db')
#         cur = conn.cursor()
#         cur.execute("SELECT DISTINCT command FROM switch WHERE   function =? or function='configure terminal' or function='enable'  ORDER BY key ASC",(x,))
#         read = cur.fetchall()
#         return read;
# a = input("x:")
# for result in readrouter(a):
#     print (result[0])

这是我将两个功能合二为一后的功能:

def readciscodevice(x):
        conn = sqlite3.connect('server.db')
        cur = conn.cursor()
        if x:
                cur.execute(
                        "SELECT DISTINCT command FROM switch WHERE   function =? or function='configure terminal' or function='enable'  ORDER BY key ASC",
                        (x,))
                read = cur.fetchall()
                return read
        else:
                cur.execute(
                        "SELECT DISTINCT command FROM router WHERE   function =? or function='configure terminal' or function='enable'  ORDER BY key ASC",
                        (x,))
                read = cur.fetchall()
                return read;


a = raw_input("x:")
for result in readciscodevice(a):
        print(result[0])

我使用我的 if 语句,它可以读取我的 switch table 的命令,但无法从 switch table 获取命令。我是否需要编写布尔值或其他内容以确保它可以访问我的路由器表?

更新(我首先尝试选择两个命令,即 enable 和 conf t,然后我将识别我的输入,如果输入与我的 switch 的字段“function”匹配,它会提供一些命令,ELSE将匹配我的路由器的字段“功能”):

# def readciscodevice(x):
#         conn = sqlite3.connect('server.db')
#         cur = conn.cursor()
#
#         cur.execute(
#                         "SELECT DISTINCT command FROM switch WHERE   function='configure terminal' or function='enable'  ORDER BY key ASC"
#         )
#
#         if x:
#                 cur.execute(
#                         "SELECT DISTINCT command FROM switch WHERE   function =?  ORDER BY key ASC",
#                         (x,))
#                 read = cur.fetchall()
#                 return read
#         else:
#                 cur.execute(
#                         "SELECT DISTINCT command FROM router WHERE   function =?   ORDER BY key ASC",
#                         (x,))
#                 read = cur.fetchall()
#                 return read;
#
#
# a = raw_input("x:")
# for result in readciscodevice(a):
#         print(result[0])

在更新代码中: 它无法选择启用配置命令 也无法到达我的路由器字段以获取命令.. 但它可以选择切换命令

【问题讨论】:

  • a = raw_input("x:") 中的示例输入是什么?
  • @Marcin 我将输入我的函数'no rip'然后它输出启用,配置终端,没有网络(网络地址),没有路由器 rip
  • 你的条件`if x:`意味着你只检查非假变量。字符串no rip 不为空,并且您的 else 永远不会执行。很难理解你想在x的条件下如何使用a
  • @Marcin 很抱歉我在 x 中犯的错误。老实说,我真的不明白如何使用 if x:.Is 这个问题可能存在于 select switch table 的语句中,因为我必须在我的第一个 select 语句中绘制两个命令。我已经更新了我的代码,但没有工作,但希望你知道我想做什么!
  • @Marcin 因为我的队友有我的 Excel 表。我不认为他会在 raw_input 中输入假变量,所以我没有尝试在我的 if 语句中创建空值,我应该为我的语句中的空值或错误错误做更多的事情吗?但是我们只想输出命令,而不是像“你输入的是空的!”这样的东西。或“您的输入有误!”

标签: python if-statement sqlite boolean


【解决方案1】:

您需要引入另一个参数来确定您希望执行哪个块,或者明确区分 x 的两个条件。 'If x:' 只是检查 x 是否具有有效(非假)值,因此具有空值的事物将失败,例如:0、None、false、'' 等。

【讨论】:

  • 所以如果用户输入 0 或错误输入,我应该写一个 if 语句来返回 false 并重新运行我的函数吗?但是现在我也无法访问我的路由器表来获取命令。你知道我在我的新更新中的意思吗?我认为问题之一是当我想从路由器的字段中选择命令时。它首先访问交换机表,它只选择启用和配置命令。当它从开关中选择命令时,我的功能就结束了。但实际上我想选择的是在路由器的领域
  • 很难理解你要做什么,但你是对的,每次用户输入一个非空字符串时,他只会满足切换条件。您需要检查用户输入。就像 x == "router" 或 x== "switch" 一样。如果 x 包含其他一些关键数据,您可以有第二个参数,也许将其称为 switch 并使其成为布尔值。然后if条件可以检查'if switch'
  • 非常感谢!我添加了一个参数来确定 if y == "switch": 和 elif y == "router": 最后我也可以在路由器表中绘制命令
猜你喜欢
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 2022-06-27
  • 1970-01-01
  • 2021-12-13
  • 2015-07-04
  • 1970-01-01
相关资源
最近更新 更多