2013-07-26 159 views
2

我寫了一個函數。我想要做的是將一個四位數的數字傳遞給該函數,並且該函數將生成另一個四位數的數字,當添加到稱爲函數的數字中時,每個數字添加到該數字將加起來爲9。但是如果主叫號碼中的數字是九,我的功能只能添加一個零,但打印時零僅僅是一個空格。例如,如果主叫號碼是9988我想我的函數返回0011,但它確實返回11如何使0數值顯示零而不是空白?

下面是函數:

def make_nine(user_num): 
    '''generates a number that when added to the users number sums up to 9''' 

    make_num_nine = [] 
    for num in str(user_num): 
     num = 9 - int(num) 
     make_num_nine.append(num) 
    return int("".join(str(x) for x in make_num_nine)) 
+1

只返回一個字符串,而不是轉換爲int。編輯:看看Blender的答案。 –

回答

1

如果你想你的函數返回字符串「0011」,而不是值11,省略int()在最後一行。

或者如果要打印帶前導零的整數,請使用'{:04}'.format (i)

來實現你的功能更簡單的方法是:

def make_nine(user_num): return '{:04}'.format (9999 - user_num) 

因此,用戶輸入,計算和輸出你的程序可以寫成:

print ('{:04}'.format (9999 - int (input ('Your number: ')))) 

和周圍的輸出暫無報價,因爲那些似乎讓你煩惱。

+0

你可以使用'str(9999 - user_num).zfill(4)' – Blender

1

您的最後一行返回一個int。

這將刪除前導零,因爲它們不重要。

嘗試return ''.join(str(x) for x in make_num_nine)。這應該做到這一點。

編輯:

如果你真的,真的,真的的Python寫出來的 '0011' 不帶引號,試試這個:

with open('output.txt', 'w') as w: 
    w.write(make_nine(9988)) 
+0

這可以工作,但它顯示'0011'的引號,我不想引用。我希望它看起來像0011 – Doug

+0

它顯示在python shell中嗎?如果是這樣,使用'print'輸出結果。沒有數字0011,只有數字11. 0011將始終是一個字符串。 – Hyperboreus

+0

你是對的!我多麼愚蠢。太感謝了!!!! – Doug

3

001111。前導零被丟棄,所以如果你想保留它們,返回一個字符串:

return "".join(str(x) for x in make_num_nine) 
1

問題是你將它作爲int返回。如果你有領先的0,他們將不被包括在內。如果你想打印的返回值作爲一個4位數字,您可以使用the string format function如下:

input = 9988 
output = make_nine(input) 
print "{0:0>4}".format(output) 

如果要概括這n位輸入,你可以在一個做以下(格式說明格式字符串,以指定寬度):

input = 9988 
output= make_nine(input) 
print "{1:0>{0}}".format(len(str(input)), output) 

當然,根據您的應用程序,將函數的輸出保留爲字符串也許有意義。