首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码跳过IF语句,直接转到ELSE语句

代码跳过IF语句,直接转到ELSE语句
EN

Stack Overflow用户
提问于 2018-05-07 23:30:37
回答 1查看 399关注 0票数 0

//如果语句被完全跳过,但当我删除ELSE语句时,IF语句可以工作吗?

代码语言:javascript
复制
if fname != '' and lname != '' and user != '' and rank != '' and password != 
'' and  firenum != '' and phonenum != '' and phoneconfirm != '' and admin != 
'':
    if phonenum == phoneconfirm and len(phonenum) == int(10):
        get = AllPersonnel.query.filter_by(agencyid=current_user.agencyid).all()
        for i in get:
            if phonenum == i.phonenum:
                all = []
                all.append({'error' : 'ERROR: Phone number already exists in database'})
                return jsonify(all)
            else:
                pers = AllPersonnel(name.upper(), rank.upper(), firenum, phonenum, username, password, admin.upper(), agencyid, agencyname.upper(), availability, avtimestamp, enat, enattimestamp, taskavailbility, avtimetsamptask, plusdate)
                db.session.add(pers)
                db.session.commit()
                all = []
                all.append({'success' : 'SUCCESS: FireFighter added to database!'})
                return jsonify(all)

这是我的另一个代码,适用于我的另一个程序。

代码语言:javascript
复制
        phoneemp = EmsaEmp.query.all()
        for num in phoneemp:
            if phonenum == num.phonenum:
                allexist = ('ERROR: Phone Number Already Exists In Database. Please Use The Help Desk or Contact a Supervisor. Thanks')
                return render_template('register.html', allexist=allexist)
            else:
                print('Success')
                ans = ''
                name = (fname + ' ' + lname)
                emp = EmsaEmp(name.upper(), title.upper(), phonenum, ans)
                db.session.add(emp)
                db.session.commit()

这就是我最终要做的,现在它起作用了。

代码语言:javascript
复制
if phonenum == phoneconfirm and len(phonenum) == int(10):
        get = AllPersonnel.query.filter_by(agencyid=current_user.agencyid).all()
        for i in get:
            if phonenum == i.phonenum:
                all = []
                all.append({'error' : 'ERROR: Phone number already exists in database'})
                return jsonify(all)
        for u in get:
            if phonenum != i.phonenum:
                pers = AllPersonnel(name.upper(), rank.upper(), firenum, phonenum, username, password, admin.upper(), agencyid, agencyname.upper(), availability, avtimestamp, enat, enattimestamp, taskavailbility, avtimetsamptask, plusdate)
                db.session.add(pers)
                db.session.commit()
                all = []
                all.append({'success' : 'SUCCESS: FireFighter added to database!'})
                return jsonify(all)
EN

回答 1

Stack Overflow用户

发布于 2018-05-07 23:33:44

你在一个循环中。

因此,在第一个元素上,您将获得else,然后是return,并且永远不会执行后续的元素。

如果您删除else,那么您的algo将有机会执行后续的if语句。

我会说你的算法没有做你想做的事情;-)。

此外,将您庞大的if替换为

代码语言:javascript
复制
if all((fname, lname, user, rank, password, firenum, phonenum, phoneconfirm, admin)):

更多信息请点击此处:https://docs.python.org/3.6/library/functions.html#all

而且不需要做len(phonenum) == int(10)。只要len(phonenum) == 10就足够了(Python至少和其他语言一样简单,如果不是更简单的话)

另一个问题:

代码语言:javascript
复制
            all = []
            all.append({'error' : 'ERROR: Phone number already exists in database'})
            return jsonify(all)

可以将其重写为:

代码语言:javascript
复制
            return jsonify([{'error' : 'ERROR: Phone number already exists in database'}])

这样您就不再需要创建临时变量(这不是这3行代码的唯一问题,但我就到此为止)。

大编辑:

请尝试以下代码:

代码语言:javascript
复制
import collections

PersonnelData = collections.namedtuple('PersonnelData', [
  'fname', 'lname', 'user', 'rank', 'password', 
  'firenum', 'phonenum', 'phoneconfirm', 'admin',
])

@app.route('/addpersonnellist', methods=['GET', 'POST'])
def addpersonnellist():
    data = PersonnelData(
        fname=request.args.get('fname'),
        lname=request.args.get('lname'),
        username=request.args.get('user'),
        rank=request.args.get('rank'),
        password=request.args.get('password'),
        firenum=request.args.get('firenumone'),
        phonenum=request.args.get('phonenum'),
        phoneconfirm=request.args.get('phonenumconfirm'),
        admin=request.args.get('admin'),
    )
    name = '{data.fname} {data.lname}'.format(data=data)
    if all(data):
        if phonenum == phoneconfirm and len(phonenum) == 10:
            personnel_phonenum = AllPersonnel.objects.values_list('phonenum', flat=True)
            if data.phonenum in personnel_phonenum:
                response = 'ERROR: Phone number already exists in database'
            else:
                pers = AllPersonnel(
                    name.upper(), data.rank.upper(), data.firenum, data.phonenum,
                    data.username, data.password, data.admin.upper(),
                    current_user.agencyid, current_user.agencyname.upper(),
                    '', '', '', '', '', '', '',
                )
                db.session.add(pers)
                db.session.commit()  # Can you do a commit when you're not in a transaction???
                response = 'SUCCESS: FireFighter added to database!'
        else:
            response = 'ERROR: Phone numbers do not match and/or format is invalid.'
    else:
        response = 'ERROR: Not all fields filled out correctly!'
    return jsonify({'response' : response})

正如您所注意到的,这里没有for循环。尝试使用实际的API。花点时间阅读文档。这不是浪费时间。

检查这个:https://docs.djangoproject.com/en/1.11/ref/models/querysets/#values-list

单一保护方式的另一种替代方法是使用return子句:https://refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html

代码语言:javascript
复制
import collections

PersonnelData = collections.namedtuple('PersonnelData', [
  'fname', 'lname', 'user', 'rank', 'password', 
  'firenum', 'phonenum', 'phoneconfirm', 'admin',
])

@app.route('/addpersonnellist', methods=['GET', 'POST'])
def addpersonnellist():
    data = PersonnelData(
        fname=request.args.get('fname'),
        lname=request.args.get('lname'),
        username=request.args.get('user'),
        rank=request.args.get('rank'),
        password=request.args.get('password'),
        firenum=request.args.get('firenumone'),
        phonenum=request.args.get('phonenum'),
        phoneconfirm=request.args.get('phonenumconfirm'),
        admin=request.args.get('admin'),
    )

    if not all(data):
        return jsonify({'response' : 'ERROR: Not all fields filled out correctly!'})

    if not phonenum == phoneconfirm or len(phonenum) != 10:
        return jsonify({'response' : 'ERROR: Phone numbers do not match and/or format is invalid.'})

    personnel_phonenum = AllPersonnel.objects.values_list('phonenum', flat=True)

    if data.phonenum in personnel_phonenum:
        return jsonify({'response' : 'ERROR: Phone number already exists in database'})

    pers = AllPersonnel(
        '{data.fname} {data.lname}'.format(data=data).upper(),
        data.rank.upper(), data.firenum, data.phonenum,
        data.username, data.password, data.admin.upper(),
        current_user.agencyid, current_user.agencyname.upper(),
        '', '', '', '', '', '', '',
    )
    db.session.add(pers)
    db.session.commit()  # Can you do a commit when you're not in a transaction???

    return jsonify({'response' : 'SUCCESS: FireFighter added to database!'})
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50217722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档