循环python(输入验证)

时间:2017-10-16 21:44:33

标签: python while-loop

这是我编程实验室的一个问题:

考虑这个数据序列:“3 11 5 5 5 2 4 6 6 7 3 -8”。任何与前一个值相同的值都被视为CONSECUTIVE DUPLICATE。在这个例子中,有三个这样的连续重复:第二个和第三个5s和第二个6.注意,最后3个不是连续的重复,因为它前面是7.编写一些使用循环来读取这样的代码非负整数序列,以负数终止。代码完成执行后,将打印遇到的连续重复项数。在这种情况下,将打印3。 ASSUME变量stdin的可用性,该变量引用与标准输入关联的Scanner对象。

这是我的代码:

firstNumber=-1

secondnumber=-1

count=0

firstNumber=input(int())

while int(firstNumber) > 0:

 secondnumber=input(int())

 if secondnumber == firstNumber:
   count+=1
 else:
   firstNumber=secondnumber
print(int(count))

当我在MPL中运行代码时,例如输入是:

stdin.txt:·“1↵ 1↵ 1↵ 1↵ 1↵ 1↵ -1

结果如下:

预期产出: _stdout.txt:·“5↵ 实际产量: _stdout.txt:·“00000005↵

请您指导我的代码出了什么问题? 非常感谢。

3 个答案:

答案 0 :(得分:1)

我建议您使用zip + sum在列表中执行元素明智差异来完成此操作。

sum(y - x == 0 for y, x in zip(l[1:], l))

您可以通过定义函数来很好地完成此任务:

def count_consec_duplicates(lst):
    return sum(y - x == 0 for y, x in zip(l[1:], l))

并适当地调用它。

data = [1, 1, 1, 1, 1, 1, -1]
print(count_consec_duplicates(data))
5

答案 1 :(得分:1)

你可以试试这个:

import re
import itertools
s = "3 11 5 5 5 2 4 6 6 7 3 -8"
new_data = list(map(int, re.findall("-\d+|\d+", s)))
new_sum = [(a, list(b)) for a, b in itertools.groupby(new_data)]
final_sum = sum(len(b)-1 for a, b in new_sum if len(b) > 1)

输出:

3

答案 2 :(得分:0)

在我弄明白之前,我已经坚持了几个星期。它可以帮助您将故障排除的代码放入IDLE或repl.it/languages/python3;然后当你运行它时,你经常会看到错误。 stdin似乎在python中完全没有意义,MPL包含它似乎只是为了让你感到困惑。 你非常接近它,我也是一个初学者,但我指出了我看到的错误并用错误注释了你的代码。希望我没有错过太多,这有助于其他人挣扎于他们试图从这个问题中学习的实际概念。

##your Code##
firstNumber =-1 #Didn't need to define var. here since defining them below
secondnumber =-1 #^^^^^but mpl didn't reject them either, may have no effect
count=0
firstNumber = input(int()) #this was the ERROR, using 'int' here added zeros
while int(firstNumber) > 0: 
 secondnumber=input(int()) #ERROR, 'int' adds zeros to input line and output  
 if secondnumber == firstNumber:
   count+=1
 else:
   firstNumber=secondnumber
print(int(count))

###The code MPL wanted (this worked):

firstNumber=input()
count = 0
while int(firstNumber) > 0:
 secondNumber=input()
 if secondNumber == firstNumber:
   count+=1
 else:
   firstNumber = secondNumber
print(count) # align with while loop so it happens after the loop ends, 
                                          #don't need the int here either