2013-07-26 3 views
2

Я написал функцию. То, что я хочу сделать, это передать четырехзначное число этой функции, и функция будет генерировать еще одно четырехзначное число, которое добавляется к числу, которое вызывает функцию, каждая добавленная к ней цифра будет содержать до девяти. Но если цифра в вызывающем номере равна девяти, моя функция может добавлять только ноль, но при печати нуль - это просто пробел. Например, если вызывающий номер 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. отредактируйте: посмотрите на ответ Блендера. –

ответ

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). Это должно сделать это.

Edit:

Если вы действительно, действительно, действительно хотите Python выписывать '0011' без кавычек, попробуйте следующее:

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

Это работает, но он отображает «0011» с кавычками, и мне не нужны кавычки. Я хочу, чтобы это выглядело как 0011 – Doug

+0

Отображается ли оно в оболочке python? Если это так, используйте 'print' для вывода результата. Нет номера 0011, только номер 11. 0011 всегда будет строкой. – Hyperboreus

+0

Вы правы !!! Как глупо со мной. Бесконечно благодарен!!!! – Doug

3

0011 является 11. Ведущие нули отбрасываются, так что если вы хотите сохранить их, возвращать строку:

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

Проблема заключается в том, что вы вернуть его в качестве междунар. Если у вас есть ведущие 0, они не будут включены. Если вы хотите напечатать возвращаемое значение как 4-значное число, вы можете использовать the string format function следующим образом:

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

Если вы хотите, чтобы обобщить это п-значных входов, вы можете сделать следующее (спецификатор формата в пределах строка формата, чтобы определить ширину):

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

конечно, это может иметь смысл, чтобы просто оставить вывод функции в виде строки, в зависимости от вашего приложения.

Смежные вопросы