2016-07-30 7 views
2

私はHackerRankにハイカーで歩いていた谷の数をカウントするためにコードを書いています。今、このような感じです。印刷物はSTDOUTに "No Output"があります

#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でした。

用語の谷は次のように定義されていました。 「谷は、海面からステップダウンして海面までステップで始まる、海面下の連続したステップの空でないシーケンスです。

質問は次のように書かれました: 「彼の最後のハイキング中にゲイリーの階段が上がったり下がったりすると、彼が歩いた谷の数を見つけて印刷してください。私はこれら3つのポストを見てとっている

How to flush output of Python print?

python `print` does not work in loop

私はまた、いくつかの他の方法を試してみましたが、彼らは助けていません。これらは私が試したことです。

sysモジュールをインポートし、sys.stdout.flush()関数を使用してstdoutをフラッシュしました。

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

私自身もstdoutをフラッシュする機能を試しましたが、それでも機能しませんでした。

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

あなたの 'if'テストはすべて排他的です.4つのブランチのうちの1つだけが 'step'ごとに実行され、すべてのステップが' U'または 'D'なので、最後のブランチ' elif sea_level == 0: 'U'や' D'が枝分かれする前に枝分かれするので絶対に実行することはできません。 print文は 'elif sea_level == 0:'ブランチの内部にあるので、決して実行されません。ドローイングボードに戻る... – TessellatingHeckler

+0

私の更新された答えを確認し、私のプログラムについての説明を追加しました。 – bhansa

+0

私は@TessellatingHecklerを理解しています。説明ありがとう。 –

答えて

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がある場合、ゲイリーがもう一度参照レベルにあることを意味します
要素0の前の値が負であることを確認したら、
は谷から来たものと確信しています。

私はそれが助けてくれることを願っています。

関連する問題