2015-04-26 17 views
0

我有一個函數發送通知,並且我總是在這個sendNotification函數中得到一個錯誤,當我不開始寫正確的主題名稱。錯誤,當我不寫正確的第一個話題名稱

主題名稱應該只有一個單詞,在這種情況下,它顯示消息「有效主題名稱」。

如果主題名稱爲空或具有多個單詞,它將顯示消息「主題必須只有一個單詞」,並且我再次使用validTopic()再次請求用戶編寫主題名稱,直到他正確寫入。

這工作正常,我只是總是得到一個問題,只有當我不寫正確的主題名稱。

我認爲它是因爲當我不開始正確寫入時,我的sendNotification函數中的主題名稱正在接收無效的主題名稱。

但我不明白爲什麼,因爲當主題名稱是無效的我再次validTopic()函數...

def sendNotification(topicname): 
# here I have the error when I dont write the topic name correctly at first 
createTopic = create_topic(topicname) 

def validTopic(): 
    topic = raw_input("Topic:") 
    words_topic = topic.split() 
    number_words_topic = len(words_topic) 
    if number_words_topic == 1: 
     print "Valid Topic Name" 
    else: 
     print "Topic must have just one word" 
     validTopic() 
    return topic 

def create(): 
    topic = validTopic() 
    sendNotification(topic) 

create() 
+1

缺少'return'before到'validTopic'內通話?無論如何,在Python中,通常不是使用遞歸來代替循環的好主意(例如使用「while」循環)。 –

+0

我看到一個'validTopic()'和一個'validTopicName()'函數。這是一個錯字嗎?如果'validTopic()'是另一個函數,它有什麼作用? – gus27

+0

感謝您的回答。這是一個錯字。它的功能相同,我現在正確更新了。 – osc

回答

0

如果話題是你再次調用validTopic()無效。但是你沒有使用這個validTopic()調用的結果。你應該分配的validTopic()topic結果:

... 
print "Topic must have just one word" 
topic = validTopic() 
... 

但我強烈建議什麼西爾·勒魯說:遞歸轉換成while循環。

喜歡的東西:

def validTopic(): 
    number_words_topic = 0 
    while number_words_topic != 1: 
     topic = raw_input("Topic:") 
     words_topic = topic.split() 
     number_words_topic = len(words_topic) 
     if number_words_topic != 1: 
      print "Topic must have just one word" 

    print "Valid Topic Name"   
    return topic 
相關問題