我正在尝试使用我从书中学到的基本功能(Mark Summerfield)在Python中创建原始字典(或列表)。
这是我的问题。
一切都按照我的需要工作,但我在将字符串写入文件时遇到了问题。
这是我的一段代码:
word = input("New word is: ") #adding new word
if word:
word.strip() #erasing new str from any symbols
x = len(word)
numeration = str(count) + ". "
word = word[:0] + numeration + word[0:] # =to sort as list
word = word[:x] + ",\n" # =adding shift to the end of str
file = open("test.txt", "a") # =wriing to the file
file.write(word)
file.close()
count += 1
问题在输出中显示:
======================== RESTART: /home/z177/test.py ========================
Type word to add word, type nothing to read dict, ^D\Z to quit
New word is: currently raining
New word is: currently not
New word is:
1. currently rain,
2. currently ,
它覆盖了字符串中的最后3个符号。
我通过替换
解决了这个问题word[:x] + ",\n"
带
word + ",\n"
当我在字符串的末尾添加新符号时,我仍然感兴趣为什么代码正在替换这3个符号。
你能解释一下吗?
答案 0 :(得分:1)
问题是在这一行中创建的:
word = word[:x] + ",\n" # =adding shift to the end of str
您需要记住变量word
不再包含您的单词。你那里有例如“0. word”。
因此,您必须更新x
- 行计数才能在文件中获得正确的结果。
答案 1 :(得分:1)
插入numeration
后,单词的长度增加,因此x
保存更新前旧长度的值。您应该在更新后移动分配x
的行:
numeration = str(count) + ". "
word = numeration + word[0:] # length of word changes here
x = len(word)
word = word[:x] + ",\n"
或坚持使用word = word + ",\n"
,它不那么冗长,但仍然做同样的事情。
然而,整个逻辑可简化为以下内容:
word = numeration + word + ',\n'
答案 2 :(得分:1)
您的问题是您将x
设置为输入字的长度,但随后将numeration
添加到字符串中,使其更长几个字符(如果是单个字符,则为三个字符) -digit count
)。如果你要改变
word = word[:x] + ",\n" # =adding shift to the end of str
到
word = word[:len(word)] + ",\n"
你应该得到正确的结果。
与您的问题无关,您提供的代码非常不具有Pythonic,当您掌握了该程序的逻辑时,我会使用with open('test.txt', 'a') as file:
来查看重构。显式file.close()
并使用str.format()
进行连接。