这是我编程实验室的一个问题:
考虑这个数据序列:“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↵
请您指导我的代码出了什么问题? 非常感谢。
答案 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