में एक कस्टम गणित अभिव्यक्ति का मूल्यांकन कैसे करें मैं अजगर रोलिंग पार्सर (स्निपर यदि आपको जरूरी है) लिख रहा हूं। असल में, मैं मानक गणित के मूल्यांकन का उपयोग लेकिन 'प' ऑपरेटर जोड़ना चाहते हैं:,पायथन
#xdy
sum = 0
for each in range(x):
sum += randInt(1, y)
return sum
ताकि उदाहरण के लिए, 1d6 + 2D6 + 2d6-72 + 4d100 = (5) + (1 + 1) + (6 + 2) -72+ (5 + 3 9 + 38 + 59) = 84
मैं सभी 'डी' को योग के साथ बदलने और फिर eval का उपयोग करने के लिए regex का उपयोग कर रहा था, लेकिन मेरे regex कोष्ठक से निपटने के दौरान अलग हो गया दोनों ओर। क्या मेरे अपने रिकर्सिव पार्सिंग को लागू करने के बजाय इसके बारे में जाने का कोई तेज तरीका है? शायद एक ऑपरेटर को eval जोड़ने के लिए?
संपादित करें: मुझे एक बुरा उदाहरण दिया गया है, क्योंकि उपर्युक्त उदाहरण मेरे वर्तमान संस्करण के साथ काम करता है। मैं जो खोज रहा हूं उसका मूल्यांकन करने का कोई तरीका है, (5+ (6 डी 6)) डी (7-2 * (1 डी 4))।
"अलग हो गए" द्वारा, मेरा मतलब था कि मेरी वर्तमान regex अभिव्यक्ति विफल रही। मैं अपनी विफलता के बारे में बहुत अस्पष्ट हूं, भ्रम के लिए खेद है। यहाँ मेरे वर्तमान कोड है:
def evalDice(roll_matchgroup):
roll_split = roll_matchgroup.group('roll').split('d')
print roll_split
roll_list = []
for die in range(int(roll_split[0])):
roll = random.randint(1,int(roll_split[1]))
roll_list.append(roll)
def EvalRoll(roll):
if not roll: return 0
rollPattern = re.compile('(?P<roll>\d*d\d+)')
roll_string = rollPattern.sub(evalDice, roll.lower())
इस के लिए
"(1d6 4) D100" यहां तक कि, "1d6 + 4d100" बस ठीक काम करता है, लेकिन या "1d6 + 4d (100)" विफल रहता है।
क्या आप हमें दिखा सकते हैं कि आपने क्या प्रयास किया है और यह कैसे विफल हुआ? –
बस एक पुनरावर्ती सहायक समारोह बनाने के लिए समाप्त हो गया। पूरी सहायताके लिए शुक्रिया! – taynaron