# -*- coding: utf-8 -*- from flask import Flask, render_template, request import csv app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') @app.route('/', methods=['POST']) def submit(): card = request.form['card'] phone1 = request.form['phone1'] phone2 = request.form['phone2'] result = check_card(card, phone1, phone2) return render_template('index.html', result=result) def check_card(card, phone1, phone2): with open('data.csv', 'r') as f: reader = csv.reader(f) for row in reader: if row[0] == card: if row[1] == phone1 or row[2] == phone2: with open('data.csv', 'w') as f: writer = csv.writer(f) for r in reader: if r[0] != card: writer.writerow(r) return str(int(row[3]) + 5) + phone1 + phone2 else: return '手机号不正确' elif row[1] == phone1 and row[2] == phone2: with open('data.csv', 'w') as f: writer = csv.writer(f) for r in reader: if r[0] != row[0]: writer.writerow(r) return str(int(row[3]) + 10) + phone1 + phone2 return '不存在' if __name__ == '__main__': app.run(debug=True)
时间: 2024-02-14 12:14:10 浏览: 65
13818-3:1998
这段代码有一些问题:
1. 在 `submit()` 函数中,如果手机号码不正确,直接返回字符串 `'手机号不正确'`,但是没有给出具体的错误原因。可以考虑在返回的字符串中添加一些错误提示,例如 `'手机号码1或手机号码2不正确'`。
2. 在 `check_card()` 函数中,如果找到了匹配的卡号和手机号码,会打开数据文件并将相应的行删除,但是文件指针并没有重置,因此会导致后面的循环无法读取到正确的数据。可以考虑在删除行之前将数据读入内存中,然后在内存中进行操作,最后再将修改后的数据写回文件中。
3. 在 `check_card()` 函数中,如果未找到匹配的卡号和手机号码,会返回字符串 `'不存在'`,但是没有明确说明是哪个不存在。可以考虑在返回的字符串中添加一些错误提示,例如 `'该卡号和手机号码组合不存在'`。
4. 在 `check_card()` 函数中,如果找到匹配的卡号和手机号码,会返回一些字符串,其中包括卡号对应的积分加上一个固定值,以及手机号码。这种方式不够灵活,不能满足不同业务场景下的需求。可以考虑将返回值改为一个字典,其中包含卡号对应的积分和手机号码,然后在模板中根据需求进行格式化输出。
下面是改进后的代码:
```python
# -*- coding: utf-8 -*-
import csv
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/', methods=['POST'])
def submit():
card = request.form['card']
phone1 = request.form['phone1']
phone2 = request.form['phone2']
result = check_card(card, phone1, phone2)
return render_template('index.html', result=result)
def check_card(card, phone1, phone2):
with open('data.csv', 'r') as f:
reader = csv.reader(f)
data = [row for row in reader]
for i, row in enumerate(data):
if row[0] == card:
if row[1] == phone1 or row[2] == phone2:
data.pop(i)
with open('data.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)
return {'积分': int(row[3]) + 5, '手机号码': phone1 + phone2}
else:
return {'错误': '手机号码1或手机号码2不正确'}
elif row[1] == phone1 and row[2] == phone2:
data.pop(i)
with open('data.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)
return {'积分': int(row[3]) + 10, '手机号码': phone1 + phone2}
return {'错误': '该卡号和手机号码组合不存在'}
if __name__ == '__main__':
app.run(debug=True)
```
在改进后的代码中,`check_card()` 函数返回一个字典类型的值,其中包含卡号对应的积分和手机号码。在模板中可以根据需求进行格式化输出。同时,在读取和写入数据文件时,使用了 `newline=''` 参数,以避免 Windows 系统下的换行符问题。
阅读全文