2017-04-11 5 views
2

Ich möchte Zahlen exportieren und die Verwendung in einer Zeichenfolge in Python 3.mithilfe von Zahlen in einem String-Eingang, Python 3

zum Beispiel

_input = input() 
>? circle(5) 

ich will und hier 5 als Schwimmer nutzen exportieren.

Ich habe versucht, _input.split ('circle ('), aber es macht eine Liste mit 2 Elementen ['', '5)'] Ich versuchte _input.split (')') zu verwenden, es macht eine weitere Liste mit 2 elemtens [ ‚Kreis (5‘, ‚‘]

gibt es ein Modul, das mich, es zu tun hilft oder ich sollte Split auf andere Weise benutzen?

Danach, was passiert, wenn ich will 2 Zahlen zu benutzen?

zum Beispiel

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

oder

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

und dann multiplizieren diese Zahlen (5 * 3,14)

+1

Vielleicht ist es, weil ich müde bin. Aber ich folge überhaupt nicht dem, was du zu tun versuchst. – Vallentin

+0

@Vallentin Im Versuch, einen Formrechner zu machen, möchte ich den Benutzer den Formnamen und Zahlen wie folgt eingeben – DarkSuniuM

+0

Wenn Sie eine Art von Rechner erstellen möchten, benötigen Sie entweder einen Syntax-Parser (nicht so einfach) oder irgendwie implementieren Sie dies mit 'eval' (könnte einfacher sein, aber weniger sauber) –

Antwort

1

Wenn es eine gerade Funktion wird mit Klammern dann diese verwenden . Zuerst extrahieren wir die Saite in der Halterung. Jetzt ist es für uns einfach, mit der Saite zu machen, was wir wollen.

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]) 

String in brack Funktion von here genommen. Was Sie tun, ist, dass Sie zuerst nach der öffnenden Klammer suchen '(' und dann schneiden Sie die Zeichenfolge bis zu der Stelle, an der die schließende Klammer gefunden wird, zB ')'. Angenommen String ist s='blahblah' dann s[4:7] kehrt ‚bla‘ etc ..

+0

Vielen Dank, es funktioniert gut, Können Sie mir eine Ressource zu diesem Teil geben? => '[s.find (" (") + 1: s.find (")")] ' – DarkSuniuM

+1

@AlirezaAyinMehr Ihre Begrüßung und überprüfen Sie die Bearbeitung und den Link, den ich angehängt habe .. –

1

Wahrscheinlich reguläre Ausdrücke ist die beste Alternative

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

Ich würde die Anweisung analysieren, aber nicht nach ganzen Zahlen suchen –

+0

Es funktioniert, können Sie mir das erklären ('\\ d + [.] * \\ d *', input_) ?? – DarkSuniuM

+1

Der reguläre Ausdruck sollte wie folgt gelesen werden: Jede Ziffer (\\ d), erscheint 1 oder mehrmals (+), gefolgt von einem Stopp ([.]) Erscheint 0 oder mehr Mal (*), gefolgt von einer Ziffer (\\ d) erscheint 0 oder öfter (*) – spadarian

1

Hardcode-y Weg, um Ihre Zeichenfolge zu analysieren:

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

dh die Anzahl teilnehmen, durch Komma geteilt, drehen Sie die Listenelemente zu Schwimmern und multipliziere sie.

einen regulären Ausdruck verwenden, kann leichter sein übersetzbar zu ähnlichen Problemen:

>>> 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 Demo: https://regex101.com/r/O3bSwr/1/