如果开括号和右括号的数量相同,则返回True

时间:2015-12-12 00:30:51

标签: python

我正在尝试创建一个函数,如果字符串中的左括号和右括号的数量相等,它将返回true。如果他们不是,我需要它返回虚假。目前这不适用于所有字符串。例如,paren_parity('p)(()ld))()(eog((h)k(j(m()(nc)fab)i)',)返回true,但paren_parity('d)p))mk)bc))j((eif(()ln)o)h((ag',)返回True,即使开括号和闭括号的数量不同。

def paren_parity(z):
  stack = []
  pushChars, popChars = "<({[", ">)}]"
  for c in z :
if c in pushChars :
  stack.append(c)
elif c in popChars :
  if not len(stack) :
    return False
  else :
    stackTop = stack.pop()
    balancingBracket = pushChars[popChars.index(c)]
    if stackTop != balancingBracket:
      return False
else :
  return True
return not len(stack)

3 个答案:

答案 0 :(得分:2)

你有几个选择。第一个非常简单,只计算开放数量并关闭并检查相等性:

</head>

<body>
        <form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">

 <select name="gen" id="gen">
                <option value="">Gender</option>
                <option value="Male">Male</option>
                <option value="Female">Female</option>

   </select> 
                   <input type="submit" name="submit" value="Search">    
  </form>
  </body>
  </html>


 <?php
if (isset($_GET['submit'])) { 
                                                                                                                                                                 ////////////  $gen = (!empty($_GET['gen']) ? trim($_GET['gen']) : '');

    try {
            $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8', $databasehost, $dbname);

  $database_handler = new PDO($dsn, $dbuser, $dbpass, array(
    PDO::ATTR_EMULATE_PREPARES=>false,
    PDO::MYSQL_ATTR_DIRECT_QUERY=>false,
    PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
));
        $statement = $database_handler->prepare("
         SELECT * FROM sex WHERE type = :gen; 

            ");

    $statement->bindParam(':gen', $gen, PDO::PARAM_INT);



    $statement->execute();

if ($statememt->rowCount() > 0){


    echo '<table>';
    echo '<tr>';
    echo '<th>Gender</th>';

    echo '</tr>';
    while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
        echo "<tr>"; 

        echo "<td>" . $row['gen'] . "</td>";
        echo "</tr>";
    }
    echo '</table>';
    }


else   { 
 echo ' Please refine your search';

  }

     }
catch (PDOException $e) {
    print "Error: " . $e->getMessage();
       }

   } 
    ?>

但是,这会传递您可能不想要的def paren_parity(z): return z.count('(') == z.count(')') 之类的字符串。否则,您可以在遍历字符串时保持打开的数量的计数。如果计数变为负值,则返回'))))(((('

False

当然,这仍然无法解析编程语言文本,因为它会因def paren_parity(z): open_count = 0 for c in z: if c == '(': open_count += 1 if c == ')': open_count -= 1 if open_count < 0: return False return open_count == 0 之类的问题而失败(因为我在字符串中嵌入了一个括号)。但是,我将假设这不是您当前问题的问题; - )。

答案 1 :(得分:2)

这是你的问题:

else :
  return True

如果您遇到的问题不是括号,请务必返回True。因此,只要您点击d(True就会返回d

您可以通过删除这些行来修复它。

答案 2 :(得分:-1)

使用尾递归函数可以很容易地解决这个问题,包括确定是否存在“不匹配”。

git config --system --edit

WARNING: These git config values clash: git config "http.sslcainfo" = "C:/Users/foo/AppData/Local/Programs/Git/mingw64/ssl/certs/ca-bundle.crt" git config "http.sslcainfo" = "/ssl/certs/ca-bundle.crt" 充当你正在推动和弹出的堆栈。既然你不关心这个值,只要它是push还是pop,持有一个整数就足够了。