0

私はコーディングコンテストでこの問題を試しています。問題は解決したと思いますが、入力に問題があります。ここで私を助けてください:


入力

入力の最初の行には、テストケースの数を示す単一の整数Tが含まれています。T検定ケースの説明は次のとおりです。各テストケースは、2つのレシピを示す2つのスペースで区切られた文字列RとSを含む1行で構成されています。


今、私は問題をコーディングしました、そしてそれはうまくいくようです、しかし私が入力値を直接コピーして貼り付けるときはいつでも、このエラーメッセージを与えることによってそれはうまくいきません


T= int(raw_input())
ValueError: invalid literal for int() with base 10:
'3\nalex axle\nparadise diapers\nalice bob'

問題を送信しようとすると、エラーメッセージが表示されます。入力値をコピーして貼り付け、出力をチェックしている可能性もあります。私のコードスケルトンは次のようになります


def whetherGranama(str1,str2):
    return "NO"
    #can't give the implementation out yet

T= int(raw_input())
ans=[]
for x in range(0,T):
    s=raw_input()
    s1,s2=s.split()
    ans.append(whetherGranama(s1,s2))

for elem in ans:
    print elem

どうすれば\nエラーを修正できますか?入力全体が1つの文字列として扱われると思います。

4

4 に答える 4

2

入力を分割し、分割リストを使用して整数を抽出します

s = raw_input()
s = s.split()
T = int(s[0])

ans=[]

for st in s[1:]:
//Do the rest 
于 2012-12-02T06:49:10.533 に答える
1

最初に入力を分割してから、int を変換します。

T, body = raw_input().split("\n", 1)
for x in xrange(int(T)):
   ...

それは一度分割され、最初の数値項目と残りの入力文字列が得られます。

于 2012-12-02T06:47:55.573 に答える
1

入力全体が 1 つの文字列として読み込まれている場合は、入力ストリームをキャプチャするstdin.readline()代わりにを使用できます。raw_input

from sys import stdin
T = int(stdin.readline())

ただし、これはコーディング コンテストなので、スピードが重要であると想定しています。IO 操作は計算コストが高いため、一度にすべての入力を読み取る機会を実際に歓迎する必要があります。つまり、一度にすべてを読み取ってから、コード内の入力を解析する方が一般的に高速です。あなたの場合、次のようになると思います(設計上、一度にすべて入ってくると仮定します):

data = raw_input().splitlines() 
#(or data = sys.stdin.read().splitlines() or data = list(sys.stdin.readlines()))

T = int(data[0])
S = (s.split() for s in data[1:])
于 2012-12-02T06:48:42.263 に答える
1

はい、文字列全体が 1 つの入力として扱われます。入力をリストとして保存しraw_input、ループで呼び出す代わりにリストを操作することができます。これは次のようになります。

def whetherGranama(str1,str2):
    return "NO"
    #can't give the implementation out yet

input_lines = raw_input().split("\n")
T = int(input_lines[0])
ans=[]
for x in range(1,T):
    s = input_lines[x]
    s1,s2=s.split()
    ans.append(whetherGranama(s1,s2))

for elem in ans:
    print elem
于 2012-12-02T06:50:11.177 に答える