2017-06-21 13 views
0

私はちょうどプログラミングを学び始めていて、自分でいくつかのエクササイズをすることにしました。Python - リストを検索し、変数に代入する

私はどのように識別することができますか、カンマとスペースで区切られた文字列からデータを分割し、それぞれを異なる変数に配置するのは苦労しています。与えられた仕様が常に完全であれば私は問題はありませんでした。私はちょうど分割を使用して、変数にインデックスを割り当てます。問題はすべての文字列に完全なデータがあるわけではありません。私は私が達成したいことは、出力を持つことである

specs1 = "100,013km, Automatic, Petrol, 2360cc" 
specs2 = "Manual, Diesel, 2500cc" 
specs3 = "7,480km, Automatic, Electric" 

を苦労してるよう: 仕様は

------------- 
Enter specs: 100,013km, Automatic, Petrol, 2360cc 

Odometer: 100,013km 
Transmission: Automatic 
Fuel Type: Petrol 
Engine Size: 2360cc 


------------- 
Enter specs: Manual, Diesel, 2500cc 

Odometer: undefined 
Transmission: Manual 
Fuel Type: Diesel 
Engine Size: 2500cc 

------------- 
Enter specs: 7,480km, Automatic, Electric 

Odometer: 7,480km 
Transmission: Automatic 
Fuel Type: Electric 
Engine Size: undefined 

ユーザー入力で誰かがこの問題を解決する方法を私を助けることができ、また、説明する。私は本当にそれを感謝します。前もって感謝します!

+4

を生成し、あなたは何を試してみましたか? – depperm

+0

はい、私はまだこの作業を続けています。私はsplitを使用して、それ以降のインデックスを特定することを考えています –

答えて

1

str.rsplit()を使用してカンマ文字で改行することをおすすめします。
このように:
あなたの目標に従って、単純なプリントやforeachを使用するよりも。

0

split(str=", ")を使用して分割入力し、一時リストから文字列を1つずつ取り出し、いくつかの基準で比較して、最終リストの適切な場所に配置します。

def func(specs_list_temp): 
    if "km" in specs_list_temp[0]: 
     specs_list.append(specs_list_temp[0]) 
     specs_list_temp.pop(0) 
    else: 
     specs_list.append("undefined") 
    if specs_list_temp[0] in ("Automatic", "Manual"): 
     specs_list.append(specs_list_temp[0]) 
     specs_list_temp.pop(0) 
    else: 
     specs_list.append("undefined") 
    if specs_list_temp[0] in ("Petrol", "Diesel", "Electric"): 
     specs_list.append(specs_list_temp[0]) 
     specs_list_temp.pop(0) 
    else: 
     specs_list.append("undefined") 
    if "cc" in specs_list_temp[0]: 
     specs_list.append(specs_list_temp[0]) 
    else: 
     specs_list.append("undefined") 

specs1 = "100,013km, Automatic, Petrol, 2360cc" 
specs1_list_temp = specs1.split(str=", ") 
specs1_list_temp.append("undefined") 
specs1_list = func(specs1_list_temp) 
1
from collections import OrderedDict 

specs_dict = OrderedDict([('Odometer', 'undefined'), ('Transmission', 'undefined'), ('Engine Size', 'undefined'), ('Engine Size', 'undefined')]) 

for spec in specs.split(\'): 
    if 'km' in spec.lower() or 'mi' in spec.lower(): 
     specs_dict['Odometer'] = spec.strip() 
    elif 'cc' in spec.lower(): 
     specs_dict['Engine size'] = spec.strip() 
    elif spec.lower() in ['automatic', 'manual']: 
     specs_dict['Transmission'] = spec.strip() 
    else: 
     specs_dict['Fuel Type'] = spec.strip() 

for k, v in specs_dict: 
    print('{}: {}'.format(k, v)) 

順序付き辞書には、ご注文を保持します。

最初はすべての仕様が未定義にプリセットされているので、ユーザーからの入力に基づいて設定を開始します。

+0

「未定義」の存在しない値を出力しません – Adrijaned

+0

その機能を今追加しました –

0
def to_int(s): 
    """ 
    Convert a digit string with commas, ie "1,234,567" 
     to an integer, ie 1234567 
    """ 
    return int(s.replace(',', '')) 

class Spec: 
    TRANS_TYPES = {"automatic", "manual"} 
    FUEL_TYPES = {"diesel", "electric", "petrol"} 

    @classmethod 
    def loads(cls, s, sep=", "): 
     args = {} 
     for arg in s.split(sep): 
      arg = arg.strip().lower() 
      if arg.endswith('km'): 
       args['odo'] = to_int(arg[:-2].strip()) 
      elif arg in cls.TRANS_TYPES: 
       args['trans'] = arg 
      elif arg in cls.FUEL_TYPES: 
       args['fuel'] = arg 
      elif arg.endswith('cc'): 
       args['eng'] = to_int(arg[:-2].strip()) 
      else: 
       raise ValueError('unrecognized input ({})'.format(arg)) 
     return cls(**args) 

    def __init__(self, odo=None, trans=None, fuel=None, eng=None): 
     self.odo = odo 
     self.trans = trans 
     self.fuel = fuel 
     self.eng = eng 

    def __str__(self): 
     odo = "undefined" if self.odo is None else "{:,d} km".format(self.odo) 
     trans = "undefined" if self.trans is None else self.trans.title() 
     fuel = "undefined" if self.fuel is None else self.fuel.title() 
     eng = "undefined" if self.eng is None else "{:d}cc".format(self.eng) 
     return (
      "Odometer: {odo}\n" 
      "Transmission: {trans}\n" 
      "Fuel Type: {fuel}\n" 
      "Engine Size: {eng}" 
     ).format(odo=odo, trans=trans, fuel=fuel, eng=eng) 

その後、

def main(): 
    # data strings 
    specs = [ 
     "100,013km, Automatic, Petrol, 2360cc", 
     "Manual, Diesel, 2500cc", 
     "7,480km, Automatic, Electric" 
    ] 

    for spec in specs: 
     print("-------------") 
     print("Enter specs:", spec) 
     car = Spec.loads(spec) 
     print("\n{}\n\n".format(car)) 

if __name__ == "__main__": 
    main() 

------------- 
Enter specs: 100,013km, Automatic, Petrol, 2360cc 

Odometer: 100,013 km 
Transmission: Automatic 
Fuel Type: Petrol 
Engine Size: 2360cc 


------------- 
Enter specs: Manual, Diesel, 2500cc 

Odometer: undefined 
Transmission: Manual 
Fuel Type: Diesel 
Engine Size: 2500cc 


------------- 
Enter specs: 7,480km, Automatic, Electric 

Odometer: 7,480 km 
Transmission: Automatic 
Fuel Type: Electric 
Engine Size: undefined 
関連する問題