2014-02-27 99 views
1
def prime(x): 
    if (x == 0 or x % 2 == 0): 
     return 0 
    elif (x == 1): 
     return 1 
    else: 
     for y in range(x-1,0,-1): 
      if (x % y == 0): 
       return 0 
      else: 
       pass 
     if (y == 1): 
      return 1 

for x in range(1,20): 
    if (prime(x)): 
     print ("x:%d, prime YES") % (x) 
    else: 
     print ("x:%d, prime NO") % (x) 

我開始嘗試Python和我不明白這有什麼錯我的代碼...我越來越:類型錯誤:不支持的操作數類型爲%:「NoneType」和「廉政」

... print ("x:%d, prime YES") % (x)
TypeError: unsupported operand type(s) for %: 'NoneType' and 'int'

+0

我們需要一些更多的信息,以幫助您正確。你有錯誤嗎?如果是這樣,哪條線路導致錯誤?你有沒有嘗試過嘗試糾正它,如果是的話,你嘗試了什麼? – snollygolly

+0

有一種情況,'prime'函數根本沒有返回任何東西(即將返回'None')。而'None'不能被格式化爲整數。 – isedev

+0

錯誤在標題BTW .. – peperunas

回答

6

等 - 我找到了。你正在使用Python 3!其中print是一個函數。因此,

print ("x:%d, prime YES") % (x) 

實際上意味着

(print ("x:%d, prime YES")) % (x) 

而且由於print回報None,該給你你所得到的錯誤。

此外,請注意 - (x)不是包含1個元素的元組,它只是值x。使用(x,)作爲元組。

所以只要將括號並添加一個逗號:

print("x:%d, prime YES" % (x,)) 
+0

+1你是對的:) – thefourtheye

+0

這解決了我的問題!謝謝!兩個問題:你說現在打印是一個函數......在Python 2.x中「打印」是什麼?而且,在我的for循環的主函數中記得「y」?謝謝!!! – peperunas

+0

'print'曾經是一個聲明,與parens一起使用。在循環之後,'y'將具有循環中的最後一個值。 – RemcoGerlich

相關問題