Python简单的打字机效果

时间:2017-03-22 00:42:00

标签: python

简单地说就是对Python的一个简单的打字机效果。当它不在'def'中时,它工作正常。但是当它被定义时,没有定义错误行...出于什么原因?

import time

def typing():
    global line
    for letter in line:
        time.sleep(0.03)
        print(letter, end='')

def loop():        
    line ='I am gay'
    typing()
    print('')
    line ='Are you also gay?'
    typing()
    print('')
    loop()
loop()

3 个答案:

答案 0 :(得分:2)

我会简化它以传递line作为参数,使其更清洁。此外,它不起作用的原因是因为在功能完成运行之前输出实际上没有打印!见How to flush output of Python print?

以下是您的计划的工作版本:

import sys
import time

def typing(l):
    for letter in l:
        print(letter, end='')
        sys.stdout.flush()
        time.sleep(.14)

def loop():
    line ='I am gay'
    typing(line)
    print('')
    line ='Are you also gay?'
    typing(line)
    print('')

loop()

如果你正在使用python 3.3+,你可以在print上设置flush参数。

print(letter, end='', flush=True)以避免使用sys

def typing(l):
    for letter in l:
        print(letter, end='', flush=True)
        time.sleep(.03)

有趣的问题!

答案 1 :(得分:2)

这是因为您在错误的地方宣布global line;

尝试在loop()中声明它,因为它是你的主要功能(或最初称为功能):

import time

def typing():
    for letter in line:
        time.sleep(0.03)
        print(letter, end='')

def loop():  
    global line      
    line ='I am gay'
    typing()
    print('')
    line ='Are you also gay?'
    typing()
    print('')
    loop()
loop()

DEMO https://repl.it/G7Zw

答案 2 :(得分:1)

这是因为当您使用.gitignore时,您的代码应该全局定义global line变量。

line