我有一个类似的文本文件
3 forwhomthebelltolls
-6 verycomplexnumber
问题是,如果整数 K 为正,则采用前 K 个字符并将其放在字符串的末尾。如果为负,则取最后的 K 个字符并将其放在字符串的开头。像这样:
whomthebelltollsfor
numberverycomplex
我的代码是
file = open("tex.txt","r")
for line in file:
K, sentence = int(line.split(" ")[0]), line.split(" ")[1]
new_sentence = sentence[K:] + sentence[:K]
print(new_sentence)
但是它会打印如下值:
whomthebelltolls
for
numberverycomplex
我不明白为什么会这样。我只是添加了两个字符串,但是在打印部分中,添加的第二部分出现了问题。
答案 0 :(得分:4)
文件的实际内容:
3 forwhomthebelltolls\n
-6 verycomplexnumber
当您使用for line in file
遍历文件时,您将进入 entire 行,包括结尾的换行符。您永远不会删除它。因此,sentence[K:]
解析为whomthebelltolls\n
,而sentence[:k]
解析为for
。整个字符串为whomthebelltolls\nfor
。由于字符串的中间有换行符,所以将其打印出来。
要解决此问题,请先去除字符串:
for line in file:
K, sentence = int(line.split(" ")[0]), line.split(" ")[1].strip()
...
答案 1 :(得分:4)
如果逐行遍历文件,则每一行都将包含尾随换行符,因此在第一次迭代中line
实际上是forwhomthebelltolls\n
现在,当您构造new_sentence
时,您将执行以下操作:
new_sentence = 'forwhomthebelltolls\n'[3:] + 'forwhomthebelltolls\n'[:3]
= 'whomthebelltolls\n' + 'for'
= 'whomthebelltolls\nfor'
打印为:
whomthebelltolls
for
要摆脱结尾的换行符,请使用.strip()
(如line=line.strip()
)