【问题标题】:Can sys.stdout.write() and raw_input() been done together?sys.stdout.write() 和 raw_input() 可以一起完成吗?
【发布时间】:2017-11-12 22:19:14
【问题描述】:

我正在尝试使用 Python 2.7 构建我的第一个基于文本的游戏。但是,我在获取输入时遇到了一些麻烦。我想使用sys.stdout.write() 让它看起来更复古,但我希望它在打印完成后等待输入。当我尝试做 raw_input() 的事情时,它打印得很好,但是在它应该等待输入的地方,它会打印 None

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)"))

【问题讨论】:

  • raw_input 将字符串作为提示。你的慢速打印函数不返回字符串,它什么也不返回,所以你得到None 作为提示。
  • 你可能想打电话给print_slow(my_string)然后打电话给raw_input
  • print_slow("Do you wish to begin? (Y/n)"); raw_input() 基本上。
  • 这能回答你的问题吗? Random None when printing from raw_input

标签: python python-2.7


【解决方案1】:

您面临两个挑战

  1. raw_input 接受要打印的字符串,但您的函数返回 None
  2. 您的输出可能是行缓冲的,因此您可能看不到任何输出。

问题的 cmets 中提到了第一个问题的解决方案。第二个的解决方案是在写每个字母之间刷新你的输出。

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-17
    • 2011-09-13
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多