Python-我如何简化它?

Python-我如何简化它?,python,csv,Python,Csv,我至少还有6个“块”要做,至少还有30个类,我怎么能让它变得更简单而不那么长呢?我已经尝试过使用eqid==class_uquo;,但这不符合我的需要,因为eqid然后被导出到CSV文件中,我不想将任何“类”导入CSV文件中 eqid=str.upper(原始输入('请刷卡:')) 我就是从那里得到eqid的 #Checking Of Class #N BLOCK if eqid == "N001": class_ = "N001" print ("Class selected:

我至少还有6个“块”要做,至少还有30个类,我怎么能让它变得更简单而不那么长呢?我已经尝试过使用
eqid==class_uquo;
,但这不符合我的需要,因为
eqid
然后被导出到CSV文件中,我不想将任何“类”导入CSV文件中

eqid=str.upper(原始输入('请刷卡:'))

我就是从那里得到eqid的

#Checking Of Class
#N BLOCK
if eqid == "N001":
    class_ = "N001"
    print ("Class selected: "+class_)
    continue

if eqid == "N002":
    class_ = "N002"
    print ("Class selected: "+class_)
    continue

if eqid == "N003":
    class_ = "N003"
    print ("Class selected: "+class_)
    continue

if eqid == "N004":
    class_ = "N004"
    print ("Class selected: "+class_)
    continue

#E BLOCK
if eqid == "E001":
    class_ = "E001"
    print ("Class selected: "+class_)
    continue

if eqid == "E002":
    class_ = "E002"
    print ("Class selected: "+class_)
    continue

if eqid == "E003":
    class_ = "E003"
    print ("Class selected: "+class_)
    continue

if eqid == "E004":
    class_ = "E004"
    print ("Class selected: "+class_)
    continue
这是CSV编写器,整个脚本处于while循环中

#CSV Writer
    ofile = open('Attendance.csv', "a")
    writer = csv.writer(ofile, delimiter=',')
    writer.writerow([eqid, period+1, clcode, attendance]) 
    ofile.close()
导入csv
导入日期时间
导入操作系统
而(一):
#默认值
class=“N004”#如果未指定任何类,则默认为N004
#磁卡读卡器输出和考勤(默认值=0)
出席人数='0'
eqid=str.upper(原始输入('请刷卡:'))
#查课
#N区
如果eqid==“N001”:
class=“N001”
打印(“所选类别:“+Class_389;”)
持续
如果eqid==“N002”:
class=“N002”
打印(“所选类别:“+Class_389;”)
持续
如果eqid==“N003”:
class=“N003”
打印(“所选类别:“+Class_389;”)
持续
如果eqid==“N004”:
class=“N004”
打印(“所选类别:“+Class_389;”)
持续
#E区
如果eqid==“E001”:
class=“E001”
打印(“所选类别:“+Class_389;”)
持续
如果eqid==“E002”:
class=“E002”
打印(“所选类别:“+Class_389;”)
持续
如果eqid==“E003”:
class=“E003”
打印(“所选类别:“+Class_389;”)
持续
如果eqid==“E004”:
class=“E004”
打印(“所选类别:“+Class_389;”)
持续
#日期和时间检查器
format=“%H%M%S”
格式\=“%H%M”
今天=datetime.datetime.today()
s=今天。strftime(格式)#24小时内的时间
s2=今天。strftime(格式u41;
d=datetime.datetime.today().weekday()#星期几(0-5)
周期=0#如果他们在专用周期之外扫描,则默认为周期1
#周期检查器
如果“084500”小于“094000”:
周期=0
如果“094000”小于“104000”:
周期=1
如果“112000”小于“121500”:
周期=2
如果“121500”小于“131500”:
周期=3
如果“133500”小于“143000”:
周期=4
#类代码读取器
数据列表=[]
打开('J:/Attention/Timetables/'+class_+'.csv','r')作为csv文件:
csvreader=csv.reader(csvfile)
对于csvreader中的行:
dataList.append(行)
csvfile.close()
#类别代码
clcode=数据列表[期间][d]
#CSV编写器
ofile=open('attention.csv',“a”)
writer=csv.writer(文件,分隔符=',')
writer.writerow([eqid,句点+1,clcode,考勤])
ofile.close()
TL;DR:我如何简化我的
类检查
脚本


谢谢你

我想你不需要以下内容

import csv
import datetime
import os

while (1):
    #Defaults
    class_ = "N004" #If no class is specified it is defaulted to N004

    #Magnetic Card Reader Output & Attendance (Default = 0)
    attendance = '0'
    eqid = str.upper(raw_input('Please swipe your card: '))

    #Checking Of Class
    #N BLOCK
    if eqid == "N001":
        class_ = "N001"
        print ("Class selected: "+class_)
        continue

    if eqid == "N002":
        class_ = "N002"
        print ("Class selected: "+class_)
        continue

    if eqid == "N003":
        class_ = "N003"
        print ("Class selected: "+class_)
        continue

    if eqid == "N004":
        class_ = "N004"
        print ("Class selected: "+class_)
        continue

    #E BLOCK
    if eqid == "E001":
        class_ = "E001"
        print ("Class selected: "+class_)
        continue

    if eqid == "E002":
        class_ = "E002"
        print ("Class selected: "+class_)
        continue

    if eqid == "E003":
        class_ = "E003"
        print ("Class selected: "+class_)
        continue

    if eqid == "E004":
        class_ = "E004"
        print ("Class selected: "+class_)
        continue

    #Day & Time Checker
    format = "%H%M%S"
    format_ = "%H%M"
    today = datetime.datetime.today()
    s = today.strftime(format) #Time in 24hour
    s2 = today.strftime(format_)
    d = datetime.datetime.today().weekday() #Day of week (0-5)
    period = 0 #If they scan it outside of the dedicated periods it defaults to period 1

    #Period Checker
    if "084500" < s < "094000":
        period = 0
    if "094000" < s < "104000":
        period = 1
    if "112000" < s < "121500":
        period = 2
    if "121500" < s < "131500":
        period = 3
    if "133500" < s < "143000":
        period = 4

    #Class Code Reader
    dataList = []
    with open('J:/attendance/Timetables/'+class_+'.csv', 'r') as csvfile:
      csvreader = csv.reader(csvfile)
      for row in csvreader:
         dataList.append(row)
    csvfile.close()

    #Class Code
    clcode = dataList[period][d] 

    #CSV Writer
    ofile = open('Attendance.csv', "a")
    writer = csv.writer(ofile, delimiter=',')
    writer.writerow([eqid, period+1, clcode, attendance]) 
    ofile.close()
因为您只是在检查if条件后将其分配给class_uu变量。我的解决方案是“你可以直接分配它

看起来您只是在检查
eqid
是否是允许的类值

试一试

此外,“类代码读取器”块不应该在循环中(现在您正在为处理的每个学生重新加载类文件);相反,试着像这样读一次

allowed_classes = set(["N001", "N002", "N003", "N004", "E001", "E002", "E003"])  # etc
default_class = "N004"

while True:
    eqid = raw_input('Please swipe your card: ').strip().upper()
    class_ = eqid if eqid in allowed_classes else default_class
    print("Selected class", class_)
    # rest of processing...

代码复查堆栈交换会更合适啊,谢谢,我会去那里的。很抱歉。我在循环中有它,所以在任何阶段它都可以更改为不同的类代码。我如何在类中添加continue\uqid if eqid in allowed\u classes else default\u class我不理解那种if语句,我需要添加一个continue,好像
eqid==allowed\u classes
那么我希望while循环停止,我也只希望它在
eqid==allowed\u classes
allowed_classes = set(["N001", "N002", "N003", "N004", "E001", "E002", "E003"])  # etc
default_class = "N004"

while True:
    eqid = raw_input('Please swipe your card: ').strip().upper()
    class_ = eqid if eqid in allowed_classes else default_class
    print("Selected class", class_)
    # rest of processing...
class_timetable_file = "J:/attendance/Timetables/{class_}.csv"

# class_codes[class_][period][day_of_week] = class_code
class_codes = {}

for class_ in allowed_classes:
    with open(class_timetable_file.format(class_ = class_)) as inf:
        rd = csv.reader(inf)
        class_codes[class_] = list(rd)   # list of list of str