2017-08-01 152 views
-2
#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 

我至少還有另外6個'塊'這樣做,至少有另外30個類,我怎麼能讓這個更簡單而不那麼久?我嘗試了eqid == class_,但這不符合我的需要,因爲eqid然後導出爲CSV文件,我不希望將任何「類」導入到CSV文件中。Python - 我怎麼能簡化這個?

eqid = str.upper(raw_input('Please swipe your card: '))

這就是我得到eqid從。

#CSV Writer 
    ofile = open('Attendance.csv', "a") 
    writer = csv.writer(ofile, delimiter=',') 
    writer.writerow([eqid, period+1, clcode, attendance]) 
    ofile.close() 

這是CSV編寫器,整個腳本處於while循環。

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() 

TL; DR:我怎麼會去簡化我Checking Of Class腳本。

謝謝

+0

代碼審查堆棧交換會更合適 –

+1

啊,謝謝你,會去那裏抱歉。 – Sirsyorrz

回答

0

我猜你不需要以下

#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 

因爲你只是在它檢查,如果條件之後分配給class_變量。我的解決方案將是「你可以直接分配它 」

1

它看起來像你只是檢查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... 

此外,「類代碼讀者」塊不應該是你的循環內(現在你重裝爲每個學生處理類文件);反而嘗試讀取它們一次像

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 
+0

我把它放在循環中,所以在任何階段都可以更改爲不同的類代碼。 – Sirsyorrz

+0

如何在'class_ = eqid中添加continue'如果在allowed_classes else default_class中有eqid我不明白那種if語句,我需要添加一個continue,就像'eqid == allowed_classes'那麼我想要循環停止,我也只希望它打印選定的類,如果'eqid == allowed_classes' – Sirsyorrz