2015-06-19 100 views
0

现在我试图做一个简单的程序来分离网站的JavaScript链接,但我遇到了一个while循环的问题。虽然循环增量问题

这里将是一个输入的例子:

001_usa_wool.jpg 
002_china_silk.jpg 
003_canada_cotton.jpg 
004_france_wool.jpg 
done 

我只有3个部分代码的简化版本如下:

def ParseData(input): 
    data = input.split('_') 

    d = {} 
    d['sku'] = data[0] 
    d['country'] = data[1].capitalize() 
    d['material'] = data[2].capitalize() 
    return d 

def Sku(): 
    myData = ParseData(input) 
    sku = myData['sku'] 
    return sku 

def Country(): 
    myData = ParseData(input) 
    country = myData['country'] 
    return country 

def Material(): 
    myData = ParseData(input) 
    material = myData['material'] 
    return material 

def Output(): 
    print (Sku()+'\t'+ 
      Country()+'\t'+ 
      Material()+'\t'+ 
      '\n') 

现在,这里是我试图读取它逐行:

def CleanInput(input): 
    clean = input.split('.jpg') 
    count = 0 
    while (clean[count] != 'done'): 
     ParseData(clean[count]) 
     Output() 
     count = count+1 

input = input('Enter your data: ') 
CleanInput(input) 

我相信我没有实现while循环纠正,因为我的输出是s imilar到:

001 Usa Wool 
001 Usa Wool 
001 Usa Wool 
+0

尝试迭代clean中的项目:'for elem in clean:'... – Pynchia

+0

您如何给程序提供输入?你是否在整个输入()函数中给出了你在问题开始时陈述的完整输入? –

+0

是的,我粘贴'001_usa_wool.jpg002_china_silk.jpg003_canada_cotton.jpg004_france_wool.jpgdone'作为整个输入 – TheChosenWong

回答

1

返回值的问题并不完全在你的while循环,但在你的功能 - Output()Sku()Material()Country()

在功能Output(),你是通过直接调用Sku()

在每个功能的打印值,我将一个作为例子 - Sku(),要调用上inputparseData(虽然这是一个非常糟糕的命名,请使用一个更好的名字,这个名字要覆盖内置input功能,后来就不能调用input()采取由用户输入)

input总是包含你输入的整个字符串,因此它包含了所有的.jpg名称,当parseData经过它时,它总是只拾取第一个。

而不是在每个函数中使用input,我们应该使函数参数化并发送需要打印的值作为参数,就像您为parseData所做的一样。和示例代码 -

def Sku(toprint): 
    myData = ParseData(toprint) 
    sku = myData['sku'] 
    return sku 
. 
. 
. 
def Output(toprint): 
    print (Sku(toprint)+'\t'+ 
      Country(toprint)+'\t'+ 
      Material(toprint)+'\t'+ 
      '\n') 

,并在while循环发送当前值打印为参数Output() -

def CleanInput(input): 
    clean = input.split('.jpg') 
    count = 0 
    while (clean[count] != 'done'): 
     ParseData(clean[count]) 
     Output(clean[count]) 
     count = count+1 

另外,请不要使用input作为变量的名称,它可能会导致问题,正如我之前所述,因为您正在用此覆盖内置的input函数。

1

就个人而言,我会让它更Python:

def CleanInput(input): 
    clean = input.split('.jpg') 
    for count, elem in enumerate(clean): 
     if elem == 'done': 
      break 
     ParseData(elem) 
     Output() 
    return count 

input_data = input('Enter your data: ') 
how_many = CleanInput(input_data) 

假设你真的需要count。顺便说一句:您不使用的ParseData

0

你有太多的功能,互相呼叫,并采取模糊的要求。很难看到什么会返回什么,打印什么等等。例如,您的CleanInput调用ParseDataOutput,但是Output调用SkuCountryMaterial,其中每个也调用ParseData。哦,大写变量应该保留给类 - 使用snake_case函数。

>>> s = "001_usa_wool.jpg002_china_silk.jpg003_canada_cotton.jpg004_france_wool.jpgdone" 
>>> print(*("{}\t{}\t{}".format(*map(str.capitalize, item.split('_'))) 
... for item in s.split('.jpg') if item != 'done'), sep='\n') 
001  Usa  Wool 
002  China Silk 
003  Canada Cotton 
004  France Wool