2014-03-12 18 views
0

我想寫一個函數來查看一個數字是否使用%運算符是奇數,但得到錯誤說類型錯誤:不串轉換過程中的所有參數格式python 3函數檢查數字是否是奇數使用%,給我錯誤:TypeError:並非在字符串格式化期間轉換的所有參數

num = (input("num > ")) 
x = num % 1 
def OddCheck(num): 
    if x == 1: 
     print('num',num,'is odd') 
    else: 
     print(num,'is not odd') 

print(OddCheck(num)) 

當我切換%,爲*,我沒有得到任何錯誤。

num = (input("num > ")) 
x = num * 1 
def OddCheck(num): 
    if x == 1: 
     print('num',num,'is odd') 
    else: 
     print(num,'is not odd') 

print(OddCheck(num)) 
+3

'input'返回一個字符串。使用它上的'%'運算符試圖進行字符串格式化。你的OddCheck函數實際上並不檢查它的輸入是否是奇數,它檢查一個全局變量的值。這可能會讓你的成績很差...... – geoffspear

+3

順便說一句,任何數字「%1」總是0.你的意思是做'%2'。它也看起來像你的'x = num%1'這行是在函數內部,而不是在它之外。 –

回答

2

input在Python 3.x中返回一個字符串。這意味着,你需要輸入明確地轉換爲整數:

num = int(input("num > ")) 

因爲整數相乘字符串是完全合法的第二個例子不會拋出一個錯誤:

>>> 'a' * 2 
'aa' 
>>> 

而且,你需要做num % 2檢查num是奇數:

>>> 3 % 2 
1 
>>> 4 % 2 
0 
>>> 

num % 1總是會返回0,無論num值:

>>> 3 % 1 
0 
>>> 4 % 1 
0 
>>> 

最後,x = num % 2應該放在功能:

num = int(input("num > ")) 
def OddCheck(num): 
    ############ 
    x = num % 2 
    ############ 
    if x == 1: 
     print('num',num,'is odd') 
    else: 
     print(num,'is not odd') 

print(OddCheck(num)) 

否則,你將不會被檢查將參數num傳遞給該函數。

相關問題