Python 在我的代码中,出现了一个名称错误,表示名称';排序';没有定义

Python 在我的代码中,出现了一个名称错误,表示名称';排序';没有定义,python,Python,你能告诉我我能做些什么来解决这个问题吗?谢谢。我还有另一个问题,当我对第一个问题给出回答1,对第二个问题给出回答a时,它会打印出所有from文件中的名称,但它只用于输入表格一中的名称。如果表格不是“1”,则在下一个if之前不定义排序 import csv import operator form = input('If you would like to view form 1 please enter "1".If you would like to view form 2 please e

你能告诉我我能做些什么来解决这个问题吗?谢谢。我还有另一个问题,当我对第一个问题给出回答1,对第二个问题给出回答a时,它会打印出所有from文件中的名称,但它只用于输入表格一中的名称。

如果表格不是“1”,则在下一个if之前不定义排序

import csv
import operator

form = input('If you would like to view form 1 please enter "1".If you would like to view form 2 please enter "2" and If you would like to view form 3 please enter "3"')
if form == "1":
   sort = input('If you would like the names sorted alphabetically enter "a".If you would like the scores sorted from highest to lowesr please enter "b" and If you would like the average scores sorted from highest to lowest please enter "c"')
if sort == "a":
    readfile = csv.reader(open("Form1.csv"), delimiter=",")
    sortedfile = sorted(readfile, key=operator.itemgetter(0))
    file = open("Form1.csv", "a")
    for eachline in sortedfile:
        eachline.sort()
        print(eachline)
    file.close()
if sort == 'b':
    file = open('Form1.csv')
    readfile = csv.reader(file)
    for line in readfile:
        integers = (line[0:4])
        integers.sort(reverse = True)
        print(integers)
averages = []
if sort == 'c':
    file = open('Form1.csv')
    readfile = csv.reader(file)
    for line in readfile:
        values = (line[2:4])
        values = list(map(int, values))
        average = (sum(values)/len(values))
        averages.append(average)
        averages.sort(reverse = True)
        print(averages)

elif form == "2":
    sort = input('If you would like the names sorted alphabetically enter "a".If you would like the scores sorted from highest to lowesr please enter "b" and If you would like the average scores sorted from highest to lowest please enter "c"')
if sort == "a":
    readfile = csv.reader(open("Form2.csv"), delimiter=",")
    sortedfile = sorted(readfile, key=operator.itemgetter(0))
    file = open("Form2.csv", "a")
    for eachline in sortedfile:
        eachline.sort()
        print(eachline)
    file.close()
if sort == 'b':
    file = open('Form2.csv')
    readfile = csv.reader(file)
    for line in readfile:
        integers = (line[0:4])
        integers.sort(reverse = True)
        print(integers)
averages = []
if sort == 'c':
    file = open('Form2.csv')
    readfile = csv.reader(file)
    for line in readfile:
        values = (line[2:4])
        values = list(map(int, values))
        average = (sum(values)/len(values))
        averages.append(average)
        averages.sort(reverse = True)
        print(averages)

elif form == "3":
    sort = input('If you would like the names sorted alphabetically enter "a".If you would like the scores sorted from highest to lowesr please enter "b" and If you would like the average scores sorted from highest to lowest please enter "c"')
if sort == "a":
    readfile = csv.reader(open("Form3.csv"), delimiter=",")
    sortedfile = sorted(readfile, key=operator.itemgetter(0))
    file = open("Form3.csv", "a")
    for eachline in sortedfile:
        eachline.sort()
        print(eachline)
    file.close()
if sort == 'b':
    file = open('Form3.csv')
    readfile = csv.reader(file)
    for line in readfile:
        integers = (line[0:4])
        integers.sort(reverse = True)
        print(integers)
averages = []
if sort == 'c':
    file = open('Form3.csv')
    readfile = csv.reader(file)
    for line in readfile:
        values = (line[2:4])
        values = list(map(int, values))
        average = (sum(values)/len(values))
        averages.append(average)
        averages.sort(reverse = True)
        print(averages)
如果希望排序在If语句之前设置默认值:

if form == "1": 
   sort = input('If you would like the names sorted alphabetically enter "a".If you would like the scores sorted from highest to lowesr please enter "b" and If you would like the average scores sorted from highest to lowest please enter "c"')
if sort == "a": # not defined
或者嵌套
如果是

sort = "some default"
在进一步操作之前,您可能应该验证用户是否做出了有效的选择:

if form == "1":
   sort = input('If you would like the names sorted alphabetically enter "a".If you would like the scores sorted from highest to lowesr please enter "b" and If you would like the average scores sorted from highest to lowest please enter "c"')
    if sort == "a":
         ....
排序也不能超过一个值,因此在以下情况下使用/elif:

while True:
    form = input('If you would like to view form 1 please enter "1".If you would like to view form 2 please enter "2" and If you would like to view form 3 please enter "3"')
    if form not in {"1","2","3"}:
        print("Invalid choice")
    else:
        break
您可以删除大量重复的代码,在每个块的一个位置打开文件,您应该使用elif并将sort if/elif嵌套在if表单==:

if sort == "a":
   ....

elif sort == "b":
    ....

您可能还希望将窗体while循环逻辑应用于每个排序,使用带有while循环的函数确保用户选择正确的选项。

@abi虽然感谢用户的帮助是礼貌的,但请不要在评论中说“谢谢”或“+1”。这样可以避免堆栈溢出造成混乱。@abi,有什么问题吗?@abi,我对您的代码进行了一些清理,不完全确定所有这些都在做什么,但逻辑应该更接近您想要做的do@PadraicCunningham我试着使用你的代码,但它不起作用,但我真的不担心现在的平均分数。每次我输入一个特定的表单,并对其排序方式做出响应时,它都会使用所有表单csv文件中的数据。你知道怎么解决这个问题吗?@abi,我漏掉了一部分代码,根据排序输入,你只能读取一个文件
averages = []
while True:
    form = input(
        'If you would like to view form 1 please enter "1".If you would like to view form 2 please enter "2" and If you would like to view form 3 please enter "3"')
    if form not in {"1", "2", "3"}:
        print("Invalid choice")
    else:
        break

if form == "1":
    sort = input(
        'If you would like the names sorted alphabetically enter "a".If you would like the scores sorted from highest to lowesr please enter "b" and If you would like the average scores sorted from highest to lowest please enter "c"')
    with  open("Form1.csv") as f:
        read_file = csv.reader(f)
        if sort == "a":
            sorted_file = sorted(read_file)
            for each_line in sorted_file:
                each_line.sort()
                print(each_line)
        elif sort == 'b':
            for line in read_file:
                integers = (line[0:4])
                integers.sort(reverse=True)
                print(integers)
        elif sort == 'c':
            for line in read_file:
                values = (line[2:4])
                values = list(map(int, values))
                average = (sum(values) / len(values))
                averages.append(average)
            averages.sort(reverse=True)
            print(averages)      
elif form == "2":
    sort = input('If you would like the names sorted alphabetically enter "a".If you would like the scores sorted from highest to lowesr please enter "b" and If you would like the average scores sorted from highest to lowest please enter "c"')
    with open('Form2.csv') as f:
        read_file = csv.reader(f)
    if sort == "a":
        sorted_file = sorted(read_file)
        for each_line in sorted_file:
            each_line.sort()
            print(each_line)
    elif sort == 'b':
        for line in read_file:
            integers = (line[0:4])
            integers.sort(reverse = True)
            print(integers)

    elif sort == 'c':
        for line in read_file:
            values = (line[2:4])
            values = list(map(int, values))
            average = (sum(values)/len(values))
            averages.append(average)
            averages.sort(reverse = True)
            print(averages)
elif form == "3":
    sort = input(
        'If you would like the names sorted alphabetically enter "a".If you would like the scores sorted from highest to lowesr please enter "b" and If you would like the average scores sorted from highest to lowest please enter "c"')
    with open("Form3.csv") as f:
        read_file = csv.reader(f)
        if sort == "a":
            sorted_file = sorted(read_file)
            for each_line in sorted_file:
                each_line.sort()
                print(each_line)
        elif sort == 'b':
            for line in read_file:
                integers = (line[0:4])
                integers.sort(reverse=True)
                print(integers)
        elif sort == 'c':
            for line in read_file:
                values = (line[2:4])
                values = list(map(int, values))
                average = (sum(values) / len(values))
                averages.append(average)
            averages.sort(reverse=True)
            print(averages)