2017-04-11 61 views
2

我想在一個字符串在Python 3使用數字的字符串輸入,Python 3中

導出並使用數字例如

_input = input() 
>? circle(5) 

我要導出並使用5作爲浮動這裏。我嘗試使用_input.split('circle('),但它使一個列表與2個元素['','5]'] 我試圖使用_input.split(')')an,它讓另一個列表2個elemtens [「圓(5」,「」]

有沒有幫助我做到這一點,或者我應該以另一種方式使用分裂?

在此之後,如果我想要的任何模塊使用2號?

例如

_input = input() 
>? circle(5,3.14) 

_input = input() 
>? circle(5, 3.14) 

,然後乘以這個數(5 * 3.14)

+1

也許是因爲我累了。但我完全不遵循你想要做的事情。 – Vallentin

+0

@Vallentin我試圖做一個形狀計算器,我想要用戶輸入形狀名稱和這樣的數字 – DarkSuniuM

+0

如果你想創建某種計算器,你需要一個語法分析器(不是那麼容易)或以某種方式實現這個(可能更簡單但不太乾淨) –

回答

1

如果將只有一個功能與支架,然後用這個。首先我們提取括號內的字符串。現在,我們可以很容易地對字符串進行任何我們想要的操作。

s=input() 
string_in_brack = s[s.find("(")+1:s.find(")")] 
numbers = string_in_brack.split(',') 
if len(numbers)>1: 
    float(numbers[0]*numbers[1]) 
else: 
    float(numbers[0]) 

支架函數中的字符串取自here。你要做的是首先搜索左括號'(',然後將字符串切片,直到找到右括號即'''')。假設字符串是s='blahblah'然後s[4:7]將返回「喇嘛」等。

+0

非常感謝,它工作的很好,你能給我一個關於這部分的資源嗎? =>'[s.find(「(」)+ 1:s。查找(「)」)]' – DarkSuniuM

+1

@AlirezaAyinMehr您的歡迎和檢查編輯和我附加的鏈接.. –

1

也許正則表達式是最好的選擇

import re 
input_ = 'circle(5, 3.14)' 
numbers = re.findall('\\d+[.]*\\d*', input_) 
float(numbers[0]) * float(numbers[1]) 
+0

我會解析語句,但不搜索整數 –

+0

它的工作原理,可以解釋我('\\ d + [。] * \\ d *',input_) ?? – DarkSuniuM

+1

正則表達式應該如下所示: 任何數字(\\ d),出現1次或多次(+),然後是出現0次或多次(*)的停止([。]),隨後是任意數字( \\ d)出現0次或更多次(*) – spadarian

1

硬編碼-Y的方式來解析你的字符串:

>>> s = 'circle(5, 3.14)' 
>>> a, b = map(float, s.strip()[7:-1].split(',')) 
>>> a 
5.0 
>>> b 
3.14 
>>> a*b 
15.700000000000001 

即取號部分,用逗號分開,打開列表元素花車並乘以它們。

使用正則表達式可能更容易翻譯到類似的問題:

>>> import re 
>>> s = 'circle(5, 3.14)' 
>>> a, b = re.match('\s*circle\((\d(?:\.\d+)?),\s*(\d(?:\.\d+))?\)\s*', s).groups() 
>>> float(a)*float(b) 
15.700000000000001 

regex101演示:https://regex101.com/r/O3bSwr/1/

相關問題