While循环增量问题
While Loop increment issue
现在我正在尝试制作一个简单的程序来分隔网站的 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
就我个人而言,我会让它更像 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
的 return 值
问题不完全出在您的 while
循环中,而是出在您的函数中 - Output()
、Sku()
、Material()
和 Country()
。
在函数 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
函数。
您有太多相互调用的功能,并且具有模糊的要求。很难看到什么 returns 东西,打印什么,等等。例如,您的 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
现在我正在尝试制作一个简单的程序来分隔网站的 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
就我个人而言,我会让它更像 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
问题不完全出在您的 while
循环中,而是出在您的函数中 - Output()
、Sku()
、Material()
和 Country()
。
在函数 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
函数。
您有太多相互调用的功能,并且具有模糊的要求。很难看到什么 returns 东西,打印什么,等等。例如,您的 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