2017-08-04 43 views
0

如何将继续添加到class_ = eqid if eqid in allowed_classes else default_class我不明白那种if语句,我需要添加continue作为if eqid == allowed_classes然后我希望while循环停止,I也只是希望它打印选定类别中,如果eqid == allowed_classes如何将继续添加到if块

allowed_classes = set(["N001", "N002", "N003", "N004", "E001", "E002", "E003"]) # etc 
default_class = "N004" #If no class is specified it is defaulted to N004 

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

我已经试过

eqid = raw_input('Please swipe your card: ').strip().upper() 
if eqid in allowed_classes 
    class_ = eqid 
    print('Selected class: ', class_) 
else default_class 

,但不工作,甚至不会运行。

全码:

import csv 
import datetime 
import os 

#Defaults 
allowed_classes = set(["N001", "N002", "N003", "N004", "E001", "E002", "E003"]) # etc 
default_class = "N004" #If no class is specified it is defaulted to N004 

while (1): 

    #Magnetic Card Reader Output & Attendance (Default = 0) 
    attendance = '0' 
    eqid = raw_input('Please swipe your card: ').strip().upper() 
    class_ = eqid if eqid in allowed_classes else default_class 
    print("Selected class", class_) 


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

(它是格式正确只是无法得到它在这里对不起格式:/)

+0

在'else'语句中,您没有将值赋给'class_'。试试'else:class_ = default_class' –

+1

它被称为三元组。如果你想打破/继续一个循环,你不能使用该语法 –

+0

“不起作用,甚至不会运行”......呃,你有一个语法错误。如果语句和其他语句以冒号字符结尾 –

回答

2

简单的答案是,你不能这样做。您将ternary operatorif statement混淆,可能是因为它们有一些语法相似性。三元运算符返回基于一个条件两个表达式中的一个:

expr1 if condition else expr2 

这是一个表达,而不是一个语句块。您无法将continue添加到表达式中。

相反,你必须使用完整的形式:

if eqid in allowed_classes: 
    class_ = eqid 
    print('Selected class: ', class_) 
    continue 
else: 
    class_ = default_class 

是你需要什么?

+0

是的,这是我需要的,谢谢:D是它是否缺少了'else:'和'class_ default_class'?我的一切看起来都一样。 – Sirsyorrz

+0

请注意,'else'不是绝对必要的,因为如果条件为真,执行将不会继续超出循环体的if部分。 – chepner

+0

是的,我没有删除'else' – Sirsyorrz