पायथन में इनपुट कैसे करें

मैं फॉर्म में एक वेक्टर इनपुट करना चाहता हूं " (x, y, z) "

    s=raw_input("Enter vector (x,y,z): ")
    x,y,z= s.split()
    self.x= float(x)
    self.y= float(y)
    self.z= float(z)

कोड में क्या गुम है? काम नहीं करना चाहिए?

मैंने s.split ("(", ",", ")") भी कोशिश की, लेकिन बिना किसी सफलता के।

0
जोड़ा संपादित
विचारों: 1

3 उत्तर

एक विकल्प: जो आप नहीं चाहते हैं उसे विभाजित करने के बजाय आप जो चाहते हैं उसे कैप्चर करें।

import re
s = '(44.2, 19, 12.73)'
floats_rgx = re.compile(r'-?\d+(?:\.\d+)?')
x, y, z = map(float, floats_rgx.findall(s))

उस दृष्टिकोण के पास अधिक खुले अंतराल इनपुट प्रारूपों की अनुमति देने का लाभ (या आपके लक्ष्यों के आधार पर नुकसान) है। यदि आप कुछ और सख्त चाहते हैं, तो आप सटीक इनपुट प्रारूप को सत्यापित करने के लिए एक पूर्ण नियमित अभिव्यक्ति लिख सकते हैं।

0
जोड़ा
नकारात्मक संख्याओं को संभालने के लिए पैटर्न की शुरुआत में -? भी जोड़ना चाहते हैं।
जोड़ा लेखक iCodez, स्रोत

आप इस तरह के इनपुट के लिए ast.literal_eval का उपयोग कर सकते हैं:

>>> import ast
>>> s = "(1,100,200)"
>>> x, y, z =  ast.literal_eval(s)
>>> type(x)

स्ट्रिंग फ़ंक्शंस का उपयोग करके आपको () पहले स्ट्रिप करने की आवश्यकता है और फिर , पर विभाजित करें:

>>> x, y, z = s.strip('()').split(',')
>>> x, y, z
('1', '100', '200')

str.split पर सहायता करें:

S.split([sep [,maxsplit]]) -> list of strings

एसईपी का उपयोग करके स्ट्रिंग एस में शब्दों की एक सूची लौटाएं       डेलीमीटर स्ट्रिंग। यदि maxsplit को अधिकतम maxsplit पर दिया गया है       विभाजन किया जाता है। यदि sep निर्दिष्ट नहीं है या कोई नहीं है , कोई भी        व्हाइटस्पेस स्ट्रिंग एक विभाजक है और खाली तार हटा दिए जाते हैं       परिणाम से।

0
जोड़ा

यदि आप इस तरह इनपुट कर रहे हैं:

Enter vector (x,y,z):
> 2,3,4

आप करना चाहते हैं

x, y, z = s.split(",")

यदि आप अल्पविराम और अंतरिक्ष से अलग संख्याओं को इनपुट कर रहे हैं, तो ऐसा करें:

x, y, z = s.split(", ")

str.split splits the string into substrings, split on each occurence of the argument supplied (which defaults to " ").

0
जोड़ा