我做了一个数学测验作为练习。任务3的一部分是组织一个CSV文件,其中包含按字母顺序排列的名称和分数。我已经完成了一些代码,但我想知道如何使它像我期望的那样工作。我不确定我做了什么,所以请你能解释一下。
data = input('How would you like the data? a for alphabetically, b for highest score to lowest and c for average score highest to lowest. press q to exit: ')
if 'a':
score_file = open('scorefile.csv')
for x in sorted (score_file, key=str.lower):
print (x)
答案 0 :(得分:1)
看看这里发生了什么?
>>> if "a":
... print ("True!")
... else:
... print("False!")
...
True!
>>>
>>> if "aadasgabherbasdvc23d3wv":
... print ("True!")
... else:
... print("False!")
...
True!
>>>
>>> if "":
... print ("True!")
... else:
... print("False!")
...
False!
>>>
>>> if None:
... print ("True!")
... else:
... print("False!")
...
False!
>>>
任何非空字符串都将评估为True
。空字符串和关键字None
评估为False
(可能还有更多示例)。
这意味着无论您输入什么,都将执行嵌套在if 'a'
下的代码。如果/当您为用户输入编写代码" b"和" c",你会看到这一点。
如果您想将用户输入与字符串'a'
进行比较,您可以这样做:
data = input('How would you like the data? a for alphabetically, b for highest score to lowest and c for average score highest to lowest. press q to exit: ')
if data == 'a':
# do something
关于代码的其余部分...... Python有一个csv
模块。您可以轻松地手动拆分csv文件,因为它应该以逗号分隔,但csv
模块以稍微复杂的方式处理它(我不确定,但我认为它理解带有逗号的值,例如)。
当您使用open()
时,请勿忘记之后致电close()
。您可以使用open/close
(称为上下文管理器btw)完全避免此with
业务。然后你可以做
import csv
with open('scorefile.csv', 'r') as csv_file:
rows = csv.reader(csv_file)
或
with open('scorefile.csv', 'r') as csv_file:
for line in csv_file:
...
或者你想对文件做什么。关键点在于,一旦您完成数据读取,使用with
会自动关闭文件。这样,您就不必记得拨打close()
。