现在我正在尝试创建一个简单的程序来分离网站的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循环校正,因为我的输出类似于:
001 Usa Wool
001 Usa Wool
001 Usa Wool
答案 0 :(得分:1)
就个人而言,我会让它变得更加pythonic:
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
答案 1 :(得分:1)
问题不完全在您的while
循环中,而是在您的函数中 - Output()
,Sku()
,Material()
和Country()
。
在函数Output()
中,您通过直接调用Sku()
等来打印值。
在每项功能中,我将以Sku()
为例,您在parseData
上呼叫input
(虽然这是一个非常糟糕的命名,但请使用更好的名称,使用此名称,您将覆盖内置的input
函数,稍后您无法调用input()
从用户处获取输入数据
input
始终包含您输入的整个字符串,因此它包含所有.jpg
个名称,当parseData
通过它时,它始终只会获取第一个。< / p>
我们不应该在每个函数中使用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
函数。
答案 2 :(得分:0)
你有太多的功能可以互相调用,并且需要模糊的要求。很难看到什么返回什么,打印什么,等等。例如,您的CleanInput
来电ParseData
和Output
,Output
来电Sku
,Country
和Material
这也叫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