2017-06-21 95 views
0

我刚开始学习编程,并决定做一些自我锻炼。Python - 搜索列表,分配给变量

我很难过,我如何识别,将数据从一个由逗号和空格分隔的字符串中分离出来,然后将它们放到不同的变量中。如果给出的规格总是完整的,我没有问题。我只是使用split然后将索引分配给变量。问题不是所有的字符串都有完整的数据。我有一个很难

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

是的,我现在仍在处理这个问题。我正在使用拆分,然后考虑在此之后识别索引 –

回答

1

我建议使用str.rsplit()以逗号分隔线。
喜欢这个:s1 = specs1.rsplit(', ')
不仅仅是使用简单的打印或foreach,根据你的目标。

0

使用split(str=", ")分割输入,然后从temp列表中逐个拖动字符串,并将它们与某些条件进行比较,以将它们放在最终列表中的正确位置。

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

不使用“undefined”打印不存在的值 – 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