如何使用模数(%)来换行字符
how to use modulo (%) to wrap characters
我正在尝试在 python 中使用 mod,但出了点问题
我的代码:
def wrap(string, max_width):
result = ''
for i in range(len(string)):
result += string[i]
if i % max_width-1 == 0:
result += '\n'
return result
if __name__ == '__main__':
string, max_width = input(), int(input())
result = wrap(string, max_width)
print(result)
我的输入:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
4
我的输出:
AB
CDEF
GHIJ
KLMN
OPQR
STUV
WXYZ
但我的预期输出是:
ABCD
EFGH
IJKL
IMNO
QRST
UVWX
YZ
我找不到问题所在,调试器似乎给出了错误的结果
泰
你的数据看起来像这样 4 个循环:
letter A B C D E F G H I J K L M N O ...
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
modulo 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 ...
mod(idx+1) 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 ...
所以,当模数等于 max_width-1
(此处为 3)时,您想要换行,或者当 modulo(index+1)
等于 0
[= 时,可能更容易获得23=]:
def wrap(string, max_width):
result = ''
for i in range(len(string)):
result += string[i]
if (i+1) % max_width == 0:
result += '\n'
return result
print(wrap('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 4))
输出:
ABCD
EFGH
IJKL
MNOP
QRST
UVWX
YZ
您可以使用枚举来获取字符及其位置。你 cna 还告诉它从 1 开始,这将使模运算在适当的中断索引上工作:
def wrap(string, max_width):
result = ''
for i,c in enumerate(string,1):
result += c
if i % max_width == 0:
result += '\n'
return result
或者,您可以使用跨步下标将字符串分解为块,然后 assemble 使用 join:
def wrap(string, width):
return "\n".join(string[i:i+width] for i in range(0,len(string),width))
或者将逻辑组合成一个提供给连接函数的理解:
def wrap(string, width):
return "".join(c+"\n"[i%width:] for i,c in enumerate(string,1))
我正在尝试在 python 中使用 mod,但出了点问题
我的代码:
def wrap(string, max_width):
result = ''
for i in range(len(string)):
result += string[i]
if i % max_width-1 == 0:
result += '\n'
return result
if __name__ == '__main__':
string, max_width = input(), int(input())
result = wrap(string, max_width)
print(result)
我的输入:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
4
我的输出:
AB
CDEF
GHIJ
KLMN
OPQR
STUV
WXYZ
但我的预期输出是:
ABCD
EFGH
IJKL
IMNO
QRST
UVWX
YZ
我找不到问题所在,调试器似乎给出了错误的结果 泰
你的数据看起来像这样 4 个循环:
letter A B C D E F G H I J K L M N O ...
index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
modulo 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 ...
mod(idx+1) 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 ...
所以,当模数等于 max_width-1
(此处为 3)时,您想要换行,或者当 modulo(index+1)
等于 0
[= 时,可能更容易获得23=]:
def wrap(string, max_width):
result = ''
for i in range(len(string)):
result += string[i]
if (i+1) % max_width == 0:
result += '\n'
return result
print(wrap('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 4))
输出:
ABCD
EFGH
IJKL
MNOP
QRST
UVWX
YZ
您可以使用枚举来获取字符及其位置。你 cna 还告诉它从 1 开始,这将使模运算在适当的中断索引上工作:
def wrap(string, max_width):
result = ''
for i,c in enumerate(string,1):
result += c
if i % max_width == 0:
result += '\n'
return result
或者,您可以使用跨步下标将字符串分解为块,然后 assemble 使用 join:
def wrap(string, width):
return "\n".join(string[i:i+width] for i in range(0,len(string),width))
或者将逻辑组合成一个提供给连接函数的理解:
def wrap(string, width):
return "".join(c+"\n"[i%width:] for i,c in enumerate(string,1))