为什么我在最后一个字典值处不断获得随机"n"



JP.txt:

Template: ALE
Student's name: JP
Grades = {'Mathématiques': '18.0', 'Français': '18.0', 'ALE': '18.0', 'Espagnole': '18.0', 'Anglais': '18.0', 'SVT': '18', 'SPC': '18', 'Technologie': '18.0', 'HGPF': '18.0', 'EMC': '18.0', 'EPS': '18.0', 'Art': '18.0'}
Coefs = {'Mathématiques': '4', 'Français': '4', 'ALE': '1', 'Espagnole': '1', 'Anglais': '2', 'SVT': '2', 'SPC': '2', 'Technologie': '1', 'HGPF': '2', 'EMC': '1', 'EPS': '1', 'Art': '18'}
Student's overall average: 18.0

这是我的代码

def removeline(filename, a):
a_file = open(filename, "r")
lines = a_file.readlines()
a_file.close()
new_file = open(filename, "w")
for line in lines:
if line.strip("n") != a:
new_file.write(line)
new_file.close()
import os
file_path = 'D:/Users/Jean Paul/OneDrive/Programming/Programs/Prog 2 - Moyenne de Notes/saved_grades/'
Complete_name = os.path.join(file_path + '.saved_list' + '.dat')
Complete_name = file_path + "JP.txt"
selected_saved = open(Complete_name, "r")
saved_file_data = selected_saved.read()
saved_file_data = saved_file_data.replace("'", "").replace("{", "").replace("}", "").replace(" =", ":").replace("Coefs", "Coefficients").replace("h�", "hé").replace("n�", "nç")#.replace("\\\\n\\n\nn", "n")
print(saved_file_data)
selected_saved = open(Complete_name, "r")
content = selected_saved.readlines()
template = content[0][10:]
studentname = content[1][16:]
grades = content[2][9:].replace("{", "").replace("}", "").replace("'", "").replace("h�", "hé").replace("n�", "nç").replace(": ", "=").replace(" ", "")
grades = dict(subString.split("=") for subString in grades.split(","))
coef = content[3][8:].replace("{", "").replace("}", "").replace("'", "").replace("h�", "hé").replace("n�", "nç").replace(": ", "=").replace(" ", "")
coef = dict(subString.split("=") for subString in coef.split(","))
average = content[4][27:]
print("Which of your grades would you like to edit? Please enter the full material name and separate each one with a space only (" "). Use spaces ONLY to separate material names.")
materials = str(input())
while "," or "  " in materials:
if "," in materials:
materials = materials.replace(",", " ")
if "  " in materials:
materials = materials.replace("  ", " ")
continue
if "," and "  " not in materials:
break
materials_list = materials.split()
print("You will be editing your grades of: " + materials.replace(" ", ", "))
number_of_words = len(materials_list)
r = 0
a = 0
while r < number_of_words:
if materials_list[a] in grades.keys():
r = r + 1
a = a + 1
continue
else:
fixed_typo = str(input(materials_list[a] + " doesn't match any of your materials, please enter the right material name: "))
materials_list[a] = fixed_typo
if number_of_words > 1:
print("")
r = 0
a = 0
while r < number_of_words:
print("Your old grade in " + materials_list[a] + " is: " + grades[materials_list[a]])
new_grade = input("How much do you want it to become? ")
if 0 > float(new_grade) or float(new_grade) > 20:
print("Enter a number between 0 and 20.")
continue
grades[materials_list[a]] = new_grade
r = r + 1
a = a + 1
print("")
selected_saved.close()
selected_saved = open(Complete_name, "w")
selected_saved.truncate()
selected_saved.close()
selected_saved = open(Complete_name, "a")
print('Template: ' + template, file = selected_saved)
print('Student's name: ' + studentname, file = selected_saved)
print('Grades = ' + str(grades), file = selected_saved)
print('Coefs = ' + str(coef), file = selected_saved)
print('Student's overall average: ' + str(average), file = selected_saved)
selected_saved.close()
removeline(Complete_name, "")

在这个程序中,我得到了另一个文件的数据,并询问用户是否想编辑这个文件中的一些成绩。如果他选择编辑";SVT";以及";SPC";他会得到这些材料的分数,然后能够更改它们。更改后,文件(JP.txt(被清除,然后所有内容都被重新打印到它。但重新打印后,我在每个字典(GradesCoefs(的末尾都发现了这些奇怪的东西(n(。每次重新运行程序时,我都会在同一位置添加更多的n

以下是之后的JP.txt

Template: ALE
Student's name: JP
Grades = {'Mathématiques': '18.0', 'Français': '18.0', 'ALE': '18.0', 'Espagnole': '18.0', 'Anglais': '18.0', 'SVT': '18', 'SPC': '18', 'Technologie': '18.0', 'HGPF': '18.0', 'EMC': '18.0', 'EPS': '18.0', 'Art': '18.0n'}
Coefs = {'Mathématiques': '4', 'Français': '4', 'ALE': '1', 'Espagnole': '1', 'Anglais': '2', 'SVT': '2', 'SPC': '2', 'Technologie': '1', 'HGPF': '2', 'EMC': '1', 'EPS': '1', 'Art': '18n'}
Student's overall average: 18.0

我还没有添加重新计算平均值的代码,因为我现在还没有处理这个问题。

这个答案解决了我的问题,它来自@Håken Lid

如果字符串等级以n结尾(此处为dict(subString.split("=") for subString in grades.split(","))(,则可能会发生这种情况。Try grades = grades.strip()首先删除尾部空白。

当您对等级和系数的内容进行切片时,它会在行的末尾添加n。尝试更换

grades = content[2][9:]
coef = content[3][8:]

带有

grades = content[2][9:-1]
coef = content[3][8:-1]

相关内容

最新更新