在我的代码中,我收到一个名称错误,称未定义名称“sort”

时间:2015-06-28 18:34:08

标签: python

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)

请你告诉我怎样才能解决这个问题。谢谢。当我给出第一个问题的响应1并给出第二个问题的响应时,我还有另一个问题,它打印出所有来自文件的名称,但它只是从表单1输入名称。

1 个答案:

答案 0 :(得分:3)

如果表格不是" 1"你不能在下一个之前定义排序

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

如果要排序在if语句之前设置默认值:

sort = "some default"

或嵌套if's

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":
         ....

您可能只需要验证用户做出有效选择,然后再继续:

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

sort也不能超过一个值,所以请使用if / elif' s:

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

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

你可以删除很多重复的代码,在每个块的一个地方打开文件,你应该使用elif&if并在if if ==的

中嵌入if / elifs的排序
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)

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