Python While循环增量问题
现在我正在尝试制作一个简单的程序来分离网站的javascript链接,但是我遇到了一个while循环的问题 以下是一个输入示例:Python While循环增量问题,python,while-loop,Python,While Loop,现在我正在尝试制作一个简单的程序来分离网站的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'] = d
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
就我个人而言,我会让它更像蟒蛇:
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)
假设您确实需要
计数
。顺便说一下:您没有使用ParseData的返回值问题不完全在while
循环中,而是在函数中-输出()
,Sku()
,材质()
和国家()
在函数Output()
中,通过直接调用Sku()
等来打印值
在每个函数中,我将以一个为例-Sku()
,您在input
上调用parseData
(虽然这是一个非常糟糕的命名,但请使用更好的名称,使用此名称您将覆盖内置的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
函数。您有太多的函数相互调用,并且具有模糊的需求。很难看到什么东西返回,什么东西打印,等等。例如,您的cleanport
调用ParseData
和Output
,但是Output
调用Sku
,国家/地区
,以及物料
,每种调用都会调用ParseData
。哦,大写的变量应该为类保留-函数使用snake\u 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
尝试在clean:中的项目上迭代clean:
中的元素……您如何向程序提供输入?您是否将问题开头所述的完整输入作为一个整体提供给input()
函数?是的,我正在粘贴001_usa\u wool.jpg002_china\u silk.jpg003_canada\u cotton.jpg004_france\u wool.jpgdone
,因为整个输入您的代码有一些掩蔽(例如input
)和严重的重复问题。