Python 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

现在我正在尝试制作一个简单的程序来分离网站的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

就我个人而言,我会让它更像蟒蛇:

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
)和严重的重复问题。