2015-06-19 150 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