web-dev-qa-db-ja.com

PythonでEOFになるまでユーザー入力を読み取る方法は?

UVa OJでこの問題に遭遇しました。 272-テキストの引用

まあ、問題は非常に簡単です。しかし、問題は入力を読み取ることができないことです。入力はテキスト行の形式で提供され、入力の終わりはEOFで示されます。 C/C++では、これはwhileループを実行することで実行できます。

while( scanf("%s",&s)!=EOF ) { //do something } 

これはどのようにしてpython。?

ウェブを検索しましたが、満足のいく答えは見つかりませんでした。

入力はファイルからではなく、コンソールから読み取る必要があることに注意してください。

6
rohan

sysモジュールを使用できます:

import sys

complete_inout = sys.stdin.read()

sys.stdinPythonファイルオブジェクト のように扱うことができるオブジェクトのようなファイルです。

ドキュメントから:

組み込み関数の読み取りに関するヘルプ:

_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.
6
gsi-frank

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.を使用します。

4
MrParadox

キーボードで一度に1文字を読み取る必要がある場合は、Pythonでのgetchの実装を確認できます。 Pythonはユーザーから1文字を読み取る

0
Laurent LAPORTE