在下面的代码中要求用户输入项目。但是,用户的第一个输入被忽略。为此,我无法弄清楚为什么。有什么想法吗?
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]
答案 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()