括号

Python之实现一个简易计算器

≡放荡痞女 提交于 2020-01-02 19:57:37
自己动手写计算器 一、功能分析   用户输入一个类似这样 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 这样的表达式,假设表达式里面除了包含空格、'+'、'-'、'*'、'/'和括号再无其他特殊符号,然后自己动手写代码解析其中的表达式,实现加减乘除 , 最后得出的结果与真实的计算机所算的结果必须一致。 二、所需的知识点 字符串的处理 正则表达式的运用 函数递归 三、程序实现流程分析 用正则表达式处理字符串,只提取其中的数字和运算符,并转换成列表 编写一个函数,处理没有括号的基本运算的基本表达式 再写一个函数递归处理带有括号的函数,先计算最内部括号中的表达式, 然后将最内部的括号替换为计算后的结果, 在递归外部一层的, 最后返回的就是所需的结果 四、具体实现过程 1.正则表达式处理用户输入字符串   这里我不会讲正则表达式具体的用法,要将的话都可以讲一本书了,我只讲本文用到的正则表达式。根据需求,我们需要提取出用户输入字符串中的数字和运算符到一个列表中,而空格将会被忽略掉,假设用户输入的表达式是 expression,我们可以写出下面的代码: 1 2 3 4 import re expression = '(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4)' l =

有效的括号

僤鯓⒐⒋嵵緔 提交于 2019-12-29 20:21:31
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{}” 输出: true 示例 3: 输入: “(]” 输出: false 示例 4: 输入: “([)]” 输出: false 示例 5: 输入: “{[]}” 输出: true class Solution { public : bool isValid ( string s ) { stack < char > stack ; int i = 0 ; int flag = 1 ; int len = 0 ; flag = 1 ; len = s . size ( ) ; for ( i = 0 ; i < len ; i ++ ) { if ( s [ i ] == '(' || s [ i ] == '[' || s [ i ] == '{' ) { stack . push ( s [ i ] ) ; } else if ( stack . empty ( ) ) { flag = 0 ; } else { if ( s [ i ] == ')' && stack . top (

C++ Primer Plus解读(第2章(共18章))

一个人想着一个人 提交于 2019-12-26 10:16:14
一、创建C++程序与C++程序的一般格式 1.C++的基本结构 int main() { statements return 0 ; } 其中: ①函数头对函数与程序其他部分之间的接口进行了总结,函数体指出函数应该做什么的计算机指令; ②C++中,每一条完整的指令都称之为语句,所有的语句都以分号结束(分号也叫终止符,是语句结束的标记,不可省略)。 ③返回语句:结束该函数。 ④调用函数与被调用函数:返回类型描述被调用函数返回给调用函数信息的属性;形参列表描述调用函数传递给被调用函数的信息。 二、#include 编译指令 预处理器:处理以#开头的编译指令,典型预处理器操作:在源代码被编译之前,替换或添加文本(例如:#include 的作用是在最终编译之前,使用iostream文件内容替换该编译指令)。 C++头文件没有扩展名(这是一个动态发展的过程)。是指在include的时候不加后缀。由此产生一种名称空间的说法。 名称空间旨在解决大型程序以及多个商家的程序组合更容易。可通过名称空间调用不同的同名函数。 最初我们都使用iostream.h与cout的组合,后来增加了名称空间的特性后,大家都不愿改之前的代码,即使用iostream并添加std,便于使用搞出了一条using namespace std的指令(潜在的问题是如果std中与其他部分有重名函数或者变量

python学习(十三)——函数

徘徊边缘 提交于 2019-12-26 09:27:22
1 函数是什么? 将代码实现的功能定义为一个模块,当需要使用的时候再次调用此模块即可,此为我所理解的函数定义,函数可以提高我们在编程中的效率,当一个功能需要多次实现时,我们不可能每次都编写相同代码,如果将实现此功能的代码定义为一个函数,当我们需要再次实现此功能时,只需要调用之前写好的函数即可,这样就可以大大的提高我们的编程效率。 定义一个函数:使用关键字def,然后是函数名加括号(括号内指出函数为完成其任务需要什么样的信息,当然括号也可以是空的,但是一定要有括号),最后定义以冒号结束。 def hello ( ) : print ( 'hello world' ) hello ( ) 函数的调用:要调用函数,可依次指定函数名以及用括号括起的必要信息,如是上面的例子所示 函数里面嵌套函数 def hello ( ) : print ( 'hello world' ) def westos ( ) : print ( 'hello westos' ) hello ( ) def hello ( ) : print ( 'hello world' ) def westos ( ) : print ( 'hello westos' ) #嵌套的函数一定要调用,否则在调用hello()函数时,嵌套在其中的westos()不会实现其功能 westos ( ) hello ( ) 2 形参和实参

leetcode32.最长有效括号

南笙酒味 提交于 2019-12-25 05:31:40
1.题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 示例 1: 输入: "(()" 输出: 2 解释: 最长有效括号子串为 "()" 示例 2: 输入: ")()())" 输出: 4 解释: 最长有效括号子串为 "()()" 2.解题思路 使用了两个变量 left 和 right,分别用来记录到当前位置时左括号和右括号的出现次数,当遇到左括号时,left 自增1,右括号时 right 自增1。对于最长有效的括号的子串,一定是左括号等于右括号的情况(缺少右括号,可以通过向后遍历继续寻找),此时就可以更新结果 res 了, 一旦右括号数量超过左括号数量了,说明当前位置不能组成合法括号子串(左面没有可以补上的左括号),left 和 right 重置为0。 但是对于这种情况 "(()" 时,在遍历结束时左右子括号数都不相等,此时没法更新结果 res,但其实正确答案是2,怎么处理这种情况呢?答案是再反向遍历一遍,采取类似的机制, 稍有不同的是此时若 left 大于 right 了,则重置0 ,这样就可以 cover 所有的情况了 3.代码实现 class Solution(object): def longestValidParentheses(self, s): """ :type s: str :rtype: int """ left = 0

leetcode301.删除无效的括号

故事扮演 提交于 2019-12-25 00:39:15
1.题目描述 删除最小数量的无效括号,使得输入的字符串有效,返回所有可能的结果。 说明: 输入可能包含了除 ( 和 ) 以外的字符。 示例 1: 输入: "()())()" 输出: ["()()()", "(())()"] 示例 2: 输入: "(a)())()" 输出: ["(a)()()", "(a())()"] 示例 3: 输入: ")(" 输出: [""] 2.解题思路 此题用宽度优先搜索(BFS)。创建一个队列,用来层序遍历。创建一个哈希set,用来防止将重复的字符串加入队列。层序遍历的第一层是给定字符串,第二层是给定字符串分别在不同位置上去掉一个左括号或右括号,第三层以此类推。每次在队列弹出元素后,判断这个弹出的字符串是否为有效的,如果是,那么将变量found记为true,然后将此字符串加入答案数组ans。由于我们只要删除最小数量的括号的答案,所以当这一层遍历结束后,就不要再往下遍历了,因为下面层开始就删除更多数量的括号了,所以我们要在这一层结束后立即break跳出循环,然后返回答案数组ans。 ———————————————— 版权声明:本文为CSDN博主「yj_coder」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/mengyujia1234/article

JavaScript代码规范(CKJ)

↘锁芯ラ 提交于 2019-12-21 11:33:10
这是一份为我团队自制的代码规范,参照了Javascript的书籍和网上的代码,总结而成。   1. 代码缩进采取四格,不能用tab键,只用空格,避免产生不必要的错误。在vim中配置如下代码:   2. Javascript代码不应该被包含在HTML文件中,除非这是段特定只属于此部分的代码。 变量和标示符: Javascript区分大小写,所以按照惯例标示符采用驼峰大小写格式,也就是第一个字母小写,剩下有意义的单词大写,不要再命名中使用“$”和“\”。如: firstSecond myCar   2. 常量采用惯例全大写形式,多个单词用下划线隔开。如: MYCAR CAR_AND_MODEL   3. 能不用就不用全局变量.   4. 不建议修改变量保存值的类型,如: var message = “hi”; message = 100; 变量赋值时,“=“两边要加一个空格。如: var message = “HelloWorld” 保存对象没有真正保存对象时,要明确地让该变量保存null值。 大量的逻辑出现时,注意给用括号分隔开。如: 运算符: (a>0 && b==1) || (ture || b>1) 逻辑与/或:使用时,两个操作数与“&&/||“之间都要有一个空格。如: var result = true && false; 加,减、乘、除、求模、小于、大于、等于、小于等于

有效括号

限于喜欢 提交于 2019-12-20 17:12:05
利用栈的结构,当如果遇到左括号就存入栈中,如果遇到右括号,就将栈顶的元素进行匹配,然后出栈,直到栈为空 力扣:20题 有效的括号 栈的实现 typedef char STDataType; // 支持动态增长的栈 typedef struct Stack { STDataType* myarr; int _top; // 栈顶 int _capacity; // 容量 }Stack; void StackInit(Stack* ps); void StackCapacity(Stack* ps); void StackPush(Stack* ps, STDataType x); void StackPop(Stack* ps); STDataType StackTop(Stack* ps); int StackEmpty(Stack* ps); int StackSize(Stack* ps);//输出栈的大小 void StackInit(Stack* ps)//创建空数组 { assert(ps); ps->_capacity = maxsize; ps->_top = 0; ps->myarr = (STDataType*)malloc(sizeof(STDataType)*ps->_capacity); //if (ps->myarr == NULL) // return

10项在Excel表格

元气小坏坏 提交于 2019-12-20 09:47:00
本文根据笔者长期使用Excel过程中的经验,总结了10项在Excel表格中必须遵循的 函数公式 正确写法。 1、每个函数都以等号 (=) 开头 如果省略等号,则键入的内容会显示为文本或日期。例如,如果键入 SUM(A1:A10),则 Excel 会显示文本字符串 SUM(A1:A10) 并且不会计算该公式。如果键入 11/2,则 Excel 会显示一个日期,如“11月2日”或“2009年11月2日”,而不是 11 除以 2。 2、所有左括号和右括号匹配 请确保所有括号都成对出现。在公式中使用函数时,函数中的每个括号都必须位于正确的位置,这一点很重要,因为这样函数才能正常工作。例如,公式 =IF(B5<0),"Not valid",B5*1.05) 将不能工作,因为此处有两个右括号而只有一个左括号。正确的公式类似于:=IF(B5<0,"Not valid",B5*1.05)。 3、输入所有必需参数 有些工作表函数具有必需参数 (参数:函数中用来执行操作或计算的值。参数的类型与函数有关。函数中常用的参数类型包括数字、文本、单元格引用和名称。),而有些函数(如 PI)则不需要参数。此外,还要确保没有输入过多的参数。例如,UPPER 函数只接受一个文本字符串作为其参数。 4、输入正确类型的参数 有些工作表函数(如 SUM)要求使用数字参数。而有些函数(如 REPLACE

leetcode 1021 删除最外层的括号(栈)

好久不见. 提交于 2019-12-20 04:53:49
【题目(简单)】 有效括号字符串为空 ("")、"(" + A + ")" 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,"","()","(())()" 和 "(()(()))" 都是有效的括号字符串。 如果有效字符串 S 非空,且不存在将其拆分为 S = A+B 的方法,我们称其为原语(primitive),其中 A 和 B 都是非空有效括号字符串。 给出一个非空有效字符串 S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + ... + P_k,其中 P_i 是有效括号字符串原语。 对 S 进行原语化分解,删除分解中每个原语字符串的最外层括号,返回 S 。 示例 1: 输入:"(()())(())" 输出:"()()()" 解释: 输入字符串为 "(()())(())",原语化分解得到 "(()())" + "(())", 删除每个部分中的最外层括号后得到 "()()" + "()" = "()()()"。 示例 2: 输入:"(()())(())(()(()))" 输出:"()()()()(())" 解释: 输入字符串为 "(()())(())(()(()))",原语化分解得到 "(()())" + "(())" + "(()(()))", 删除每隔部分中的最外层括号后得到 "()()" + "()" + "()(())"