STDOUT中打印“无输出”

时间:2016-07-30 16:14:44

标签: python printing output

我一直在HackerRank中编写代码来计算一个徒步旅行者(加里)在徒步旅行中走了多少个山谷。现在,它看起来像这样。

#Defining variables for later use and a list of Gary's steps
steps = ["U", "D", "D", "D", "D", "D", "U", "U"]
sea_level = 0
valleys = 0

#For loop to calculate how many valleys Gary hiked through
for step in steps:
    step_ud = step
    if step_ud == "U":
        sea_level += 1
    elif sea_level == 0:
        valleys += 1
    elif step_ud == "D":
        sea_level -= 1
    elif sea_level == 0:
        valleys += 1
        print(valleys)

当我运行代码时,我没有收到任何输出。我的预期输出是1,知道加里只走过1个山谷。

术语谷被定义为: “一个山谷是海平面以下连续阶梯的非空序列,从海平面开始逐渐下降,最后一步到达海平面。”

问题写成: “鉴于加里在他最后一次徒步旅行中的上下步骤,找到并打印出他走过的山谷数量。”

我看过这三篇帖子:

How to flush output of Python print?

python `print` does not work in loop

我也尝试了其他一些方法,但他们没有帮助。这些都是我尝试过的。

我导入了sys模块并使用了sys.stdout.flush()函数来刷新标准输出。

import sys
...
#Loop with lines to determine whether it's a valley.
...
print(valleys)
sys.stdout.flush()

我也尝试过自己刷新标准输出的功能,但这也不起作用。

def my_print(text):
sys.stdout.write(str(text))
sys.stdout.flush()

然后我在打印后使用该功能进行冲洗。

import sys
...
#Loop with lines to determine whether it's a valley.
...
print(valleys)
my_print(text)

目前我很想知道我要解决的问题。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

让我们在这里尝试一些调试:
当你正在研究大解决方案时,我知道这是一个坏主意,无论如何当你运行这个代码时,你会发现你永远不会得到这个条件 elif step_ud="D"因为它会检查elif sea_level==0并继续for循环。

steps = ["U", "D", "D", "D", "D", "D", "U", "U"]
sea_level = 0
valleys = 0

#For loop to calculate how many valleys Gary hiked through
for step in steps:
    step_ud = step
    if step_ud == "U":
        print "U"
        sea_level += 1
    elif sea_level == 0:
        print "0 sea"
        valleys += 1
    elif step_ud == "D":
        print "D"
        sea_level -= 1
    elif sea_level == 0:
        print "0 sea 2"
        valleys += 1
    print sea_level

以下是我在比赛期间提交的解决方案:

n = int(raw_input())
stra = raw_input()
lev = 0
arr = []
valleys = 0
for i in stra:
    if i=='U':
        lev +=1
        arr.append(lev)
    elif i=='D':
        lev -=1
        arr.append(lev)
#print arr
for i in range(len(arr)):
    if arr[i]==0 and arr[i-1]<0:
        valleys +=1
print valleys


我对这个计划背后的想法:


输出

C:\Users\bhansa\Desktop\Stack>python valley.py
8
DDUUDDUDUUUD
[-1, -2, -1, 0, -1, -2, -1, -2, -1, 0, 1, 0]
2

请参阅上面的列表,如果有0表示gary再次出现在看到级别上,请检查元素0之前的值是否为负数,那么确定它是

我希望它有所帮助。