网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月23日漏签0天
python3吧 关注:28,609贴子:201,499
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 9回复贴,共1页
<<返回python3吧
>0< 加载中...

我想做个字符串解析的 用于四则运算各位有没有什么思路

  • 只看楼主
  • 收藏

  • 回复
  • bdb_eagle
  • 队列
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
提供一个字符串:(6-2)*(2+4)
要求得出计算结果24
我的思路是先解析括号 再分离运算符 最后再计算。


  • bdb_eagle
  • 队列
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
百度找到一个,大家看看:
import math
import random
PRECISION = 1E-6
COUNT_OF_NUMBER = 4
NUMBER_TO_BE_CAL = 24
tmp_num1 = random.randint(1,13)
tmp_num2 = random.randint(1,13)
tmp_num3 = random.randint(1,13)
tmp_num4 = random.randint(1,13)
g_number = [tmp_num1, tmp_num2, tmp_num3, tmp_num4]
g_expression = ['', '', '', '']
for i in range(0, 4):
g_expression[i] = "%d" % g_number[i]
print(g_expression)
def solve(n):
if(1 == n):
if(math.fabs(NUMBER_TO_BE_CAL - g_number[0]) < PRECISION):
print(g_expression[0])
return True
else:
return False
else:
for i in range(0, n):
for j in range(i+1, n):
a = g_number[i]
b = g_number[j]
#**********************************
# 将剩下的有效数字往前挪,
# 由于两数计算结果保存在number[i]中,
# 所以将数组末元素覆盖number[j]即可
# *******************************
g_number[j] = g_number[n - 1]
expa = g_expression[i]
expb = g_expression[j]
g_expression[j] = g_expression[n - 1]
# 计算a+b
g_expression[i] = '(' + expa + '+' + expb + ')'
g_number[i] = a + b
if ( solve(n - 1) ) :
return True;
# 计算a-b
g_expression[i] = '(' + expa + '-' + expb + ')'
g_number[i] = a - b
if ( solve(n - 1) ) :
return True
# 计算b-a
g_expression[i] = '(' + expb + '-' + expa + ')'
g_number[i] = b - a
if ( solve(n - 1) ):
return True
# 计算(a*b)
g_expression[i] = '(' + expa + '*' + expb + ')'
g_number[i] = a * b
if ( solve(n - 1) ):
return True;
# 计算(a/b)
if (b != 0) :
g_expression[i] = '(' + expa + '/' + expb + ')'
g_number[i] = a / b
if ( solve(n - 1) ) :
return True
# 计算(b/a)
if (a != 0) :
g_expression[i] = '(' + expb + '/' + expa + ')'
g_number[i] = b / a
if ( solve(n - 1) ):
return True
# 恢复现场
g_number[i] = a
g_number[j] = b
g_expression[i] = expa
g_expression[j] = expb
return False
if(not solve(COUNT_OF_NUMBER)):
print('no solution')


2026-01-23 00:10:34
广告
不感兴趣
开通SVIP免广告
  • xpresslink
  • 邻接表
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
>>> eval('(6-2)*(2+4)')
24
>>>


  • 浓眉大侠小新
  • 栈
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有空看看python标注库
最起码内建函数那章得看看


  • 42Neptune
  • 优先队列
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
难道就没有人学过编译原理吗


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 9回复贴,共1页
<<返回python3吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示