2016-03-17 4 views
-2

Я в курсе для начинающих, и я сделал этот код, но он не работаетКак сцепить строку и целое число, чтобы получить трехзначное число

random_number = str(random.randrange (1, 1000)) 
random_number_length = (len (random_number)) 
zero_number = ("0" * 3 - (random_number_length)) 
final_number = (random_number_length + random_number) 
print (final_number) 

Конечный результат должен выглядеть примерно так:

004 

вместо:

4 

Мне нужно получить три цифры номера, даже если генерируемое число 89 или 7.

Когда я пытаюсь это, я получаю ошибку:

zero_number = ("0" * 3 - (random_number_length)) 
TypeError: unsupported operand type(s) for -: 'str' and 'int' 

Я предполагаю, что это что-то делать со строкой и целым числом.

ответ

0

Над ответами являются больше u seful (вам не придется изобретать колесо), но использовать свой собственный код:

import random 

# Get the random number 
random_number = str(random.randrange (1, 1000)) 

# Check number of digits in the number 
random_number_length = len (random_number) 

# Use the number of digits to get the number of zeros 
zero_number = "0" * (3 - (random_number_length)) 

# Concatenate zero_number with random_number 
final_number = zero_number + random_number 

print (final_number) 
# 006 

Попробуйте использовать менее скобки: это иногда сбивает с толку. Но ваша главная проблема:

zero_number = ("0" * 3 - (random_number_length)) 

Умножение идет перед вычитанием, так что:

  1. "0" * 3 => является строкой
  2. "000" - random_number_length => строка - INT =?

Вы не можете объединить два разных типа (здесь int и string).

5

Строки Python имеют метод zfill, который вы можете использовать для ввода строки с ведущими нулями.

>>> '1'.zfill(3) 
'001' 
>>> '89'.zfill(3) 
'089' 
>>> '189'.zfill(3) 
'189' 

Как zfill не допускается:

>>> def f(n): 
...  s = str(n) 
...  return '0' * (3 - len(s)) + s 
... 
>>> 
>>> for x in [1, 11, 111]: print(f(x)) 
... 
001 
011 
111 
+0

Мне не разрешено использовать метод zfill. Но спасибо вам в любом случае. –

+0

Вы редактируете ввод 'TypeError: неподдерживаемый тип операндов для +: 'int' и 'str'' – Idos

+1

@idos - спасибо - похоже, что я как-то потерял кронштейн. Должно быть хорошо сейчас? – snakecharmerb

3

В качестве альтернативы zfill вы можете использовать rjust:

>>> '1'.rjust(3, '0') 
'001' 
>>> '89'.rjust(3, '0') 
'089' 
>>> '189'.rjust(3, '0') 
'189' 

или формат:

>>> "{:0>3}".format('1') 
'001' 
>>> "{:0>3}".format('89') 
'089' 
>>> "{:0>3}".format('189') 
'189' 
1

Поскольку вы делаете это по образовательным причинам, ответ заключается в том, что операторы (такие как *, +, - и т. Д.) Имеют приоритет.

Вы пишете:

zero_number = ("0" * 3 - (random_number_length)) 

Оператор * используется первый, то оператор -.

Это то, что происходит на самом деле:

# assuming number is 89, so random_number_length is 2 

zero_number = ("0" * 3 - (random_number_length)) 
zero_number = ("0" * 3 - (2)) 
zero_number = ("000" - (2)) 
zero_number = ("000" - 2) 

# error - you can't subtract a number (an integer) from a string. 

Вы должны заставить вычитание произойти до строки умножения.

zero_number = "0" * (3 - random_number_length) 

Это окончательный код, отформатирован (я удалил ненужные скобки и ненужные пробелы)

import random 

random_number = str(random.randrange(1, 1000)) 
random_number_length = len(random_number) 
zero_number = "0" * (3 - random_number_length) 
final_number = zero_number + random_number 
print(final_number) 

Вы также добавив неправильную вещь в случайное число - вы должны добавили переменную «zero_number» в (вашей) строке 4, которую вы создали в приведенной выше строке (ваша строка 3)

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