2017-01-13 108 views
0

我測試打印功能,其中,它看起來好像該提示輸入,定義爲類型()要求輸入的Python - 從打印功能

我想使用類型函數存儲原始輸入:

from time import sleep 
import sys 
from random import uniform 

def type(s): 
    for c in s: 
    sys.stdout.write('%s' % c) 
    sys.stdout.flush() 
    sleep(uniform(0, 0.3)) 

name = raw_input(type("What is your name? ")) 
type("Hello " + name +"\n") 

這是代碼的輸出:

你叫什麼名字?無

輸入仍然允許來自用戶,在'無'之後,輸出將被正確打印,沒有'無'。有沒有辦法繞過這個?

在此提示中,我想使用類型函數打印所有內容。

+0

問題是,您正在將'type()'傳遞給'raw_input'。 'type'隱含地返回'None',因爲你沒有給它一個明確的返回值。也許嘗試在'type'內部使用'raw_input'並*返回結果*。順便說一下,名稱'type'已經屬於內建函數'type',這是陰影的做法。爲你的函數選擇一個不同的名字,而不是'type'。 –

+0

Python已經有了一個'type()'函數。重命名你的類型爲_()'或其他名稱 – Jakub

回答

1
type("What is your name? ") 
name = raw_input() 
type("Hello " + name +"\n") 

你走了。 Python中沒有定義任何返回語句的任何函數默認返回None - 這在您的提示符中顯示。

+1

'name = raw_input(「你叫什麼名字?」) type(「Hello」+ name +「\ n」)' – ASR

+3

@ASR將多行Python代碼放入註釋中沒用,因爲縮進會丟失。 –

+0

我真的不知道爲什麼我試圖讓這個複雜化。謝謝你的幫助。出於某種原因,我認爲輸入將從新的一行開始。 –

0

函數的默認返回類型是None。因此,發生的事情是,你的類型函數在函數結尾返回一個None,然後raw_input將其放入stdout流。只要有類型的函數返回一個空字符串會處理這個問題:

return '' 

你可能想使用其他不同的功能名稱,然後類型,因爲類型是內置的,有時是有用的。

5

raw_input將arg轉換爲字符串&將其用作提示。您傳遞的是raw_input類型函數的返回值,並且該函數返回默認值None,所以這就是「無」打印的原因。所以只需在之前撥打raw_input之前使用您的功能,並在沒有參數的情況下致電raw_input

順便說一句,你應該不是使用type作爲變量或函數名稱,因爲這是一個內置函數的名稱。

from time import sleep 
import sys 
from random import uniform 

def typer(s): 
    for c in s: 
     sys.stdout.write('%s' % c) 
     sys.stdout.flush() 
     sleep(uniform(0, 0.3)) 

typer("What is your name? ") 
name = raw_input() 
typer("Hello " + name + "\n")