簡體   English   中英

如何連接字符串和整數以獲得三位數

[英]How to concatenate a string and an integer to get a three digit number

我正在參加初學者課程,我制作了這段代碼,但它不起作用

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'

我猜它與字符串和整數有關。

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

作為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'
    >>> '%03d' % 1
    '001'

由於您出於教育原因這樣做,因此答案是運算符(例如 *、+、- 等)具有優先權。

你在寫:

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)

您還在隨機數中添加了錯誤的內容 - 您應該在(您的)第 4 行中添加“zero_number”變量,該變量是您在上一行(您的第 3 行)中創建的

以上答案更有用(您不必重新發明輪子),但要使用您自己的代碼:

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 = ?

您不能連接兩種不同的類型(這里是intstring )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM