Python-我如何简化它?
我至少还有6个“块”要做,至少还有30个类,我怎么能让它变得更简单而不那么长呢?我已经尝试过使用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:
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