python中函数的另一种简化方法

python中函数的另一种简化方法,python,arrays,string,Python,Arrays,String,我必须用python实现一个函数,它返回一个从0到9999的整数的4个字符的字符串。 字符串的值应以0开头 例如: 输入: 3 22 123 1235 输出: 0003 0022 0123 0123 我实现的代码是: def stringtoZ(n): a = str(n) if(n < 10): string = "0" + "00" + a elif (n < 100): string = "0" + "0" + a

我必须用python实现一个函数,它返回一个从0到9999的整数的4个字符的字符串。 字符串的值应以0开头

例如:

输入:

3
22
123
1235
输出:

0003
0022
0123
0123
我实现的代码是:

def stringtoZ(n):
    a = str(n)
    if(n < 10):
        string = "0" + "00" + a
    elif (n < 100):
        string = "0" + "0" + a
    elif (n < 1000):
        string = "0" + a
    else:
        string = "0" + a[:3]
    return string;
def stringtoZ(n):
a=str(n)
如果(n<10):
string=“0”+“00”+a
elif(n<100):
string=“0”+“0”+a
elif(n<1000):
string=“0”+a
其他:
string=“0”+a[:3]
返回字符串;
通常结果是正确的,但由于我是python的初学者,我想知道是否有其他更容易实现的方法? 非常感谢你

如果数字小于1000,可以使用
4-len(a)
确定前导零的数量,否则
'0'+a[:3]
对字符串的前三个数字进行切片。例如:

def stringtoZ(n):
    a = str(n)
    return '0' * (4-len(a)) + a if n < 1000 else '0' + a[:3]

print(stringtoZ(3), stringtoZ(123), stringtoZ(1234))
# 0003 0123 0123
def stringtoZ(n):
a=str(n)
如果n<1000,则返回“0”*(4-len(a))+a,否则返回“0”+a[:3]
打印(stringtoZ(3)、stringtoZ(123)、stringtoZ(1234))
# 0003 0123 0123
另一种方法是jarmod在评论中提到的:

def stringtoZ(n):
    return str(n).zfill(4) if n < 1000 else str(n//10).zfill(4)
def stringtoZ(n):
如果n<1000,则返回str(n).zfill(4),否则返回str(n//10).zfill(4)

如果要检查有效输入,请尝试

def z(n):
    if -1 < n < 1000  : return ('000'+str(n))[-4:]
    if -1 < n < 10000 : return '0'+str(n//10)
    raise ValueError('n = %d is out of range (0 ≤ n < 10000).'%n)
最后是一个如何在代码中管理异常的示例:

In [35]: for n in (-1, 0, 1, 999, 9999, 10000):
    ...:     try:
    ...:         print('%8d ——→'%n, z(n))
    ...:     except ValueError as e:
    ...:         print(e)
n = -1 is out of range (0 ≤ n < 10000).
       0 ——→ 0000
       1 ——→ 0001
     999 ——→ 0999
    9999 ——→ 0999
n = 10000 is out of range (0 ≤ n < 10000).

In [36]:
In[35]:对于n In(-1,0,1,999,9999,10000):
…:试试看:
…:打印(“%8d”)--→'%n、 z(n))
…:除ValueError为e外:
…:打印(e)
n=-1超出范围(0≤ n<10000)。
0 ——→ 0000
1 ——→ 0001
999 ——→ 0999
9999 ——→ 0999
n=10000超出范围(0≤ n<10000)。
在[36]中:

使用str(n).zfill(4)。请参阅@jarmod
zfill()
如果数字必须以0开头(如果需要,可以截断)则无法使用@Mohd我不知道你的意思。你能给我一个0到9999之间的整数的例子吗?@jarmod OP的第四个例子:
1235
->
0123
@Mohd好的,谢谢,我没有读最后一个例子。多么奇怪的要求。好的,类似于:
str(n).zfill(4)if n<1000 else str(n//10).zfill(4)
In [35]: for n in (-1, 0, 1, 999, 9999, 10000):
    ...:     try:
    ...:         print('%8d ——→'%n, z(n))
    ...:     except ValueError as e:
    ...:         print(e)
n = -1 is out of range (0 ≤ n < 10000).
       0 ——→ 0000
       1 ——→ 0001
     999 ——→ 0999
    9999 ——→ 0999
n = 10000 is out of range (0 ≤ n < 10000).

In [36]: