首页 > 编程语言 >华为机试:仿 LISP 运算 - Python实现

华为机试:仿 LISP 运算 - Python实现

时间:2024-12-24 22:26:13浏览次数:3  
标签:tmp re LISP res res1 expt parse Python 机试

华为机试:仿 LISP 运算_仿lisp运算华为机试-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/weixin_44052055/article/details/125902077看到这一篇博文, 感觉这个题目挺有意思的. 

今天也做一个Python版本的. 后面可能会逐步把它实现成一个Lisp解释器.

import re

# 解析字符串(源代码), 生成树法树(AST)
def parse(expt):
    expt = re.sub("\(", " ( ", expt)
    expt = re.sub("\)", " ) ", expt)
    res = []
    for i in expt.strip().split():
        if i != ')':
            if re.match("^[0-9]+$", i):
                i = int(i)
            elif re.match("^[0-9][0-9.]*$", i):
                i = float(i)
            res.append(i)
        if i == ')':
            tmp = []
            while res[-1] != '(':
                tmp.insert(0, res.pop())
            res[-1] = tmp
    if '(' in res:
        print('parse error: 括号不匹配')
        raise ValueError()
    return res

同时也写了一个测试代码.

from lisp_interpreter import *

# \testcases\test_demo1.py
def test_parse():
    code1 = '(+ 2 (+ 3 4))'
    code2 = '(lambda (x) (+ x 1))'
    res1 = parse(code1)
    res2 = parse(code2)
    print('\n', res1, '\n', res2)
    assert res1 == [['+', 2, ['+', 3, 4]]]
    assert res2 == [['lambda', ['x'], ['+', 'x', 1]]]

测试运行PASS, 解析正确.

欢迎对Lisp感兴趣的同学一起讨论. 

标签:tmp,re,LISP,res,res1,expt,parse,Python,机试
From: https://blog.csdn.net/weixin_46766770/article/details/144704002

相关文章

  • 【Python项目】用pywin32在聊天窗口发送QQ好友/群消息
    源码中涉及到的函数用法:win32clipboard.SetClipboardData(format,hMem):它需要一个格式化的数据对象和一个数据块。CF_DIB——DIB图片,它包含一个BITMAPINFO结构,然后是位图位。CF_DIF——软件领域的数据交换格式。CF_PALETTE——调色板。每当应用程序放置数据在剪贴板......
  • 【python量化教程】如何使用必盈股票API接口,获取最新实时交易数据
      一篇文章教会什么是股票量化分析   股票API接口作为一种应用程序编程接口,犹如在股票数据的提供者与使用者之间架起的一座沟通桥梁。股票市场环境错综复杂,其中蕴含着海量数据,例如股票实时价格、历史价格变动轨迹以及成交量等信息。借助股票API接口,有获取数据需......
  • Python+Vue3+Django银行信用卡额度管理系统的设计与实现
    文章目录具体实现截图项目介绍和开发技术介绍开发技术核心代码部分展示项目结构分析文章目录/写作提纲参考源码/演示视频获取方式具体实现截图项目介绍和开发技术介绍创新之处(1)系统资源闭环整合,实现了综合功能高度集成。(2)采用DJANGO框架,开发软件更加方便、......
  • Python+Vue3+Django新闻发布管理系统设计与实现
    文章目录具体实现截图项目介绍和开发技术介绍开发技术核心代码部分展示项目结构分析文章目录/写作提纲参考源码/演示视频获取方式具体实现截图项目介绍和开发技术介绍创新之处(1)系统资源闭环整合,实现了综合功能高度集成。(2)采用DJANGO框架,开发软件更加方便、......
  • 医院食堂订餐系统Python+Vue3+Django(Pycharm毕业设计 mysql)
    文章目录具体实现截图项目介绍和开发技术介绍开发技术核心代码部分展示项目结构分析文章目录/写作提纲参考源码/演示视频获取方式具体实现截图项目介绍和开发技术介绍创新之处(1)系统资源闭环整合,实现了综合功能高度集成。(2)采用DJANGO框架,开发软件更加方便、快......
  • nodepadd++ run python script
    原文链接:[https://www.quora.com/Can-you-run-Python-in-Notepad]Firstoption:(Easiest,recommended)OpenNotepad++.Onthemenugoto:Run->Run..(F5).Typein:C:\Python26\python.exe"$(FULL_CURRENT_PATH)"Now,insteadofpressingrun,press......
  • python query oracle database
    oraclesqlscript:droptableIFEXISTSGEOVINDU.School;createtableGEOVINDU.School--創建表(SchoolIdchar(5)NOTNULL,--SchoolNamevarchar(500)NOTNULL,SchoolTelNovarchar(8)NULL,PRIMARYKEY(SchoolId)--#主鍵);......
  • 【Python完全零基础入门教程】 Python3.7.7完全安装与卸载 免费教程!
    ......
  • 文字游戏——“改写”文本(中文•Python)
    调整语序、增减字数、替换同义词等方式,避免与原文出现连续八个字相同的句子,使这段话更加有逻辑。(笔记模板由python脚本于2024年12月23日12:23:12创建,本篇笔记适合喜欢中文的coder翻阅)【学习的细节是欢悦的历程】Python官网:https://www.python.org/Free:大咖......
  • ZeroMQ的使用(python)
    ZeroMQ的使用(python)1.python环境使用1.1非源码安装在安装pyzmq和libzmq3-devel之后便可以使用zeromq了。需要提前安装好python环境。(venv-patroni-4.0.3)[fbase@localhostzmq]$mkdir~/soft/zmq(venv-patroni-4.0.3)[fbase@localhostzmq]$cd~/soft/zmq(venv-pat......