第一个用户输入被忽略 python

first user input being ignored python

在下面的代码中,要求用户输入项目。然而,用户的第一个输入被忽略了。为此,我不知道为什么。有什么想法吗?

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]

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

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

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

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

此外,循环的构造有点偏离,因为无论内容如何,​​值都会附加到列表中,而且我们永远不会中断,因为输入是立即转换为整数(因此 integer != '' 将始终为真)

在本例中,我们 "really want" 是一个 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 循环中继续循环,我们希望条件为真,在 while/break 构造中,条件必须为假。

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

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()