第一个用户输入被忽略python

时间:2015-03-19 05:43:44

标签: python user-input

在下面的代码中要求用户输入项目。但是,用户的第一个输入被忽略。为此,我无法弄清楚为什么。有什么想法吗?

def stupidFacebookPost():
    interger = int((input("Enter a Interger Value")))
    Product = int((input("Enter a Product Value")))
    intergerValues = []
    productValues = []
    commonValue = []
    while interger != ''  and Product != '':
        try:
            interger = int((input("Enter a Interger Value")))
            intergerValues.append(interger)
            print(intergerValues) #testing
            Product = int((input("Enter a Product Value")))
            productValues.append(Product)
            print(productValues) #testing
        except ValueError:
            break


    for intergers in  intergerValues:
        for products in productValues:
            commonValue.append(int(products) // int(intergers))
            print(commonValue) #test
            intergerValues.pop([0])
            productValues.pop([0])
    print('the Common Value is {}'.format((commonValue)))
    #testInterger = input("Enter a test value Interger")

输出仅用于测试

stupidFacebookPost()
Enter a Interger Value1
Enter a Product Value1
Enter a Interger Value2
[2]
Enter a Product Value4
[4]
Enter a Interger Value3
[2, 3]
Enter a Product Value6
[4, 6]

1 个答案:

答案 0 :(得分:2)

第2行和第3行的结果永远不会附加到相应的列表中。

所以你可以用这些值初始化列表:

interger = int((input("Enter a Interger Value")))
Product = int((input("Enter a Product Value")))
intergerValues = [interger,]
productValues = [Product,]
#...

但这不是最好的解决方案。它迫使我们复制代码(输入行)。

此外,循环的构造有点偏,因为值无论其内容如何都会附加到列表中,并且我们永远不会突破,因为输入会立即转换为整数(所以integer != ''将永远为真)

我们真正想要的是#34;在这种情况下,是一个do-while循环。 执行某些操作(提示用户输入),满足某些条件(输入不是空字符串)。

在python中,我们没有do-while循环,但我们可以使用无限循环+ break语句完成相同的功能(以及更多)。

所以do while循环可以写成:

do:
    do_something1
    do_something2
while(<some condition>)

可以用python编写:

while True:  # Infinite loop
    do_something1
    do_something2
    if not(<some condition>): break

注意我们在条件下反转了逻辑。为了在do / while循环中继续循环,我们希望条件为True,在while / break构造中,条件必须为False。

考虑一个稍微不同的结构:

def stupidFacebookPost():
    integerValues = []
    productValues = []
    commonValue = []
    while True:
        try:
            integer = input("Enter a Integer Value ")
            if integer == '': break
            Product = input("Enter a Product Value ")
            if Product == '': break
            integerValues.append(int(integer))
            productValues.append(int(Product))
            print(integerValues) #testing
            print(productValues) #testing
        except ValueError:
            break

    for integers in  integerValues:
        for products in productValues:
            commonValue.append(int(products) // int(integers))
            print(commonValue) #test
            integerValues.pop([0])
            productValues.pop([0])
    print('the Common Value is {}'.format((commonValue)))

stupidFacebookPost()

如果您使用的是Python 2,则input函数应为raw_input

请注意,您的第二个循环中的逻辑似乎仍然存在问题,但至少现在可以获得可靠的结果。

编辑上面的代码是为了说明如何在python中实现do / while功能。值得注意的是,if <condition>: break。但是,由于您已经(正确地)将代码包装在try/except块中,因此您可以删除显式中断并依赖except块来阻止您。例如,像:

def stupidFacebookPost():
    integerValues = []
    productValues = []
    commonValue = []
    while True:
        try:
            integer = int(input("Enter a Integer Value "))
            Product = int(input("Enter a Product Value "))
            integerValues.append(integer)
            productValues.append(Product)
            print(integerValues) #testing
            print(productValues) #testing
        except ValueError:
            break

    for integers in  integerValues:
        for products in productValues:
            commonValue.append(int(products) // int(integers))
            print(commonValue) #test
            integerValues.pop([0])
            productValues.pop([0])
    print('the Common Value is {}'.format((commonValue)))

stupidFacebookPost()