UVa OJでこの問題に遭遇しました。 272-テキストの引用
まあ、問題は非常に簡単です。しかし、問題は入力を読み取ることができないことです。入力はテキスト行の形式で提供され、入力の終わりはEOFで示されます。 C/C++では、これはwhileループを実行することで実行できます。
while( scanf("%s",&s)!=EOF ) { //do something }
これはどのようにしてpython。?
ウェブを検索しましたが、満足のいく答えは見つかりませんでした。
入力はファイルからではなく、コンソールから読み取る必要があることに注意してください。
sys
モジュールを使用できます:
import sys
complete_inout = sys.stdin.read()
sys.stdin は Pythonファイルオブジェクト のように扱うことができるオブジェクトのようなファイルです。
ドキュメントから:
組み込み関数の読み取りに関するヘルプ:
_io.TextIOWrapperインスタンスのread(size = -1、/)メソッドストリームから最大n文字を読み取ります。
Read from underlying buffer until we have n characters or we hit EOF. If n is negative or omitted, read until EOF.
Pythonでsys
およびos
モジュールを使用して、ファイルの最後までコンソールから入力を読み取ることができます。私はこれらの方法をSPOJなどのオンライン裁判官で何度か使用しました。
最初の方法(推奨):
from sys import stdin
for line in stdin:
if line == '': # If empty string is read then stop the loop
break
process(line) # perform some operation(s) on given string
読み取るすべての行の終わりには、行末文字\n
があることに注意してください。 line
の印刷中に2つの最終行文字を印刷しないようにするには、print(line, end='')
を使用します。
2番目の方法:
import os
# here 0 and 10**6 represents starting point and end point in bytes.
lines = os.read(0, 10**6).strip().splitlines()
for x in lines:
line = x.decode('utf-8') # convert bytes-like object to string
print(line)
この方法は、すべてのオンライン裁判官で機能するわけではありませんが、ファイルまたはコンソールから入力を読み取る最も速い方法です。
番目の方法:
while True:
line = input()
if line == '':
break
process(line)
stillの場合、input()
をraw_input()
に置き換えますpython 2.を使用します。
キーボードで一度に1文字を読み取る必要がある場合は、Pythonでのgetch
の実装を確認できます。 Pythonはユーザーから1文字を読み取る