2017-11-12 4 views
0

私は最初のテキストベースのゲームをPython 2.7で構築しようとしています。しかし、私は入力を得ることにいくつかの問題があります。私はsys.stdout.write()を使ってよりレトロな印象を作りたいと思っていますが、印刷が終わってから入力を待つようにしたいと思います。 raw_input()のことをしようとするとうまく印刷されますが、入力待ちの場所では代わりにNoneが印刷されます。sys.stdout.write()とraw_input()を一緒に実行できましたか?

import sys 
import time 

def print_slow(str): 
    for letter in str: 
     sys.stdout.write(letter) 
     time.sleep(.04) 

answer = raw_input(print_slow("Do you wish to begin? (Y/n)")) 
+2

raw_inputは文字列をプロンプトとして受け取ります。あなたのslowprinting関数は文字列を返しません。何も返さないので、プロンプトとして 'None'が返されます。 – pvg

+0

'print_slow(my_string)' *を呼び出してから、 'raw_input'を呼び出すことをお勧めします。 –

+0

'print_slow("あなたは始めたいですか?(Y/n) "); raw_input() 'があります。 –

答えて

0

あなたは

  1. raw_inputに直面している2つの課題があります印刷する文字列を受け入れますが、あなたの関数はNoneを返します。
  2. あなたの出力はラインバッファリングされている可能性が高いので、とにかく出力は見えません。

最初の問題の解決策は、質問のコメントに記載されています。 2番目の解決策は、各文字を書き込む間に出力を単にフラッシュすることです。

import sys 
import time 

def print_slow(str): 
    for letter in str: 
     sys.stdout.write(letter) 
     sys.stdout.flush() # Force writing to screen even though newline has not been reached. 
     time.sleep(.04) 

print_slow("Do you wish to begin? (Y/n)") 
answer = raw_input() 
関連する問題