1. 輸入一行字串,該字串滿足以下要求: 包含2個正數(可能帶小數)和1個運算子(+-*/),運算子在這些數字中間。 字串中夾雜著數目不定的其它字符。
2. 請計算該字串的包含的“數學計算運算式”的值,輸出值四舍五入,保留一位小數。 # 例如: # 輸入:"gdfgdf234dg54gf*23oP42" # 輸出:"54929268"(因為 23454*2342=54929268) # # 輸入:"LKda枯;salk1.23o-P9rqew0.2asdewruli1ghjk" # 輸出:"-89"(因為 1.23-90.21) # #
uj5u.com熱心網友回復:
import re
#s = "gdfgdf234dg54gf*23oP42"
s = "LKda枯;salk1.23o-P9rqew0.2asdewruli1ghjk"
match = re.findall("[0-9*+-/]+", s)
exp = ''.join(match)
value = eval(exp)
print("%.2f" % value)
解釋一下:
1. 用正則運算式找出 數字和 運算子,結果是許多個字串組(groups)
2. 把這些字串 連成一個字串(join)
3. 用函式 eval去計算這個字串
uj5u.com熱心網友回復:
正則運算式中 忘加了一個小數點 : [0-9*+-/.]uj5u.com熱心網友回復:
import re
while True:
str = input("should include one operator between two positive numbers:")
input_regex = r'.*[0-9]+\.*[0-9]*.*[*+-/].*[0-9]+\.*[0-9]*.*'
search_out = re.search(input_regex, str)
if search_out:
print("valid input!")
break
print("invalid input! Re-input!")
cal_regex = r'[0-9\.*+-/]+'
out_str = ''.join(re.findall(cal_regex, str))
print('%.1f' %eval(out_str))
uj5u.com熱心網友回復:
方括號中的 “點” 不是通配符,只是“點”本身, 不需要escape, 即, [+-*/.] 不用 “[\.*+-/]”uj5u.com熱心網友回復:
啊,不用import re的情況下怎么辦呢,就用python的語法,不使用庫的情況下能做嗎uj5u.com熱心網友回復:
str1=input('請輸入算術運算式:')print(str1)
s=''
for i in str1:
if i in ['0','1','2','3','4','5','6','7','8','9','+','-','*','/','.']:
s=s+i
value=https://bbs.csdn.net/topics/eval(s)
print(value)
弄了一個麻煩一點的,不用加載其他庫
uj5u.com熱心網友回復:
請教一下樓主,有字串ABABA,求ABA字串的數目,應該有兩個。但是我用正則
str = "ABABA"
r = re.compile("ABA", re.M )
back = r.findall("ABA")
print(back) // ['ABA']
只能找到一個ABA,正則應該怎么寫,才能找到兩個ABA呢。
uj5u.com熱心網友回復:
(你的 r.findall("ABA") 應該是 r.findall(str)吧。即使改了, 結果也一樣)
參考Python 官方檔案,關于 re. findall:
“Return all non-overlapping matches of pattern in string, as a list of strings. ”
findall 一般的查找, 回傳的是 “非重疊” 的串。你的查找有“重疊”。
可以這樣做:
import re
str1 = "ABABA"
r = re.compile(r"(?=(ABA))")
back = r.findall(str1)
print(back)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/28301.html
