为什么老师的Python2能产生一个TXT文件而我的python3却不能?

大家好,求教一个生物信息学的python编程。现需要用随机数按照染色体号和对应碱基数生成碱基序列。
染色体号与碱基数文件如下(txt文件)
chr01 1100
chr02 1400
chr03 1500
chr04 2200
chr05 1150
chr06 900
chr07 300
老师的代码如下:
import struct
import sys
import os
import random
args=sys.argv
def main(args):
chr_list = args[1]
fasta = args[2]
ATGC = ['A','T','G','C']
with open(chr_list,'r')as if_chr:
with open(fasta,'w')as of_fasta:
for line in if_chr:
chrome,length = line.strip('\n').split('\t')
length = int(length)
num = 0
of_fasta.write(">"+chrome+'\n')
print(chrome)
N=50
for i in range(1,length+N,N):
for k in range(0,N):
of_fasta.write(random.choice(ATGC))
num += 1
of_fasta.write('\n')
if name=="_main_":
main(args)
来一个运行代码图片:
图片说明
老师的python2运行前设置图片:
图片说明
运行后可以生成结果:
图片说明
而我的Python3运行同样的代码结果是“NameError: name '_name_' is not defined
”如果把最后两行去掉,则显示“Process finished with exit code 0
”请专家指点迷津,到底是怎么回事。

3个回答

try this

 if __name__=="__main__":
    main(args)
m0_37816348
m0_37816348 回复欧阳嘉: “主程序要求数据参数才能正确执行 参数是什么,是否正确传递了?“大神我应该看什么材料能学会您说的这个东西?
接近 3 年之前 回复
m0_37816348
m0_37816348 回复欧阳嘉: 我没弄明白什么是堆栈,但是现在console那边提示:Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/radom.py/random.py", line 26, in <module> main(args) File "C:/Users/Administrator/PycharmProjects/radom.py/random.py", line 13, in main chrome, length = line.strip('\n').split('\t') ValueError: not enough values to unpack (expected 2, got 1) Process finished with exit code 1
接近 3 年之前 回复
m0_37816348
m0_37816348 回复欧阳嘉: 抱歉,刚才犯了个低级错误,if __name__=="__main__"后面没加冒号,所以提示invalid syntax
接近 3 年之前 回复
iamoyjj
欧阳嘉 请给出堆栈,另外注意你的主程序要求数据参数才能正确执行 参数是什么,是否正确传递了
接近 3 年之前 回复
m0_37816348
m0_37816348 回复欧阳嘉: 那个name前后都有一个底划线的,只是在发帖时没显示出来。我又改成前后两个底划线,显示那一行是invalid syntax
接近 3 年之前 回复
iamoyjj
欧阳嘉 另外python 3.x和2.x语法差异很大,不想被坑的话最好装同版本
接近 3 年之前 回复
iamoyjj
欧阳嘉 注意前后都有两个底划线
接近 3 年之前 回复
 print "hello"
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Linux查看可执行文件调用的python路径
Windows系统装了mobaXterm来下载gdc数据 使用gdc-client的时候,出现如下提示 ![图片说明](https://img-ask.csdn.net/upload/201908/21/1566354222_984903.jpg) 已经在该远程上装了2.7.16的python,老师让我head一下可执行文件,查看调用的python路径,不大明白怎么操作,或者有人知道这个提示该怎么解决吗?谢谢大家
c和python的通信是否可以用输入输出重定向?
一个c程序的输出作为一个python的输入,这个python的输出再作为另一个c程序的输入。 老师要我们写一个driver再linux运行。请问:是否可以这样: 用fork()复制个子进程,用exec()来实现python()进程替换c进程。而c的输出给一个文件,当系统运行python的时候去读取这个文件的内容。这样可行吗? 还有个问题我是3个程序,这个进程如何设计?是fork()复制第一个c的子进程->exec()用python替换第一个c的子进程-->fork()复制python的子进进程(也就是第一个c的子进程的子进程)然后exec()用第二c程序替换python? 谢谢!!
关于在java代码中调用Python代码的问题?
就是有些疑惑,想问问大家,以为是第一次接触。 **背景**:学长写了一个系统,关于数据分析的,老师给了他数据(excel表),但是他并没用运用技术去清洗数据,仅仅是用人工把那些脏数据变成他自己想要的格式,然后存进数据库,再用MATLAB(把模型变成jar包,在java中调用)进行建模分析。现在这个项目想上线了,老师把这个事情给我了。项目使用的开发工具是idea,jdk1.8,tomcat8. **问题**:这个系统最大的问题就是没有数据清洗这个步骤,所以,我就想用Python写一个数据清洗的模块,然后在java代码中调用。目前的想法是,先把脏数据存进数据库中,之后调用Python代码(比如pandas)去清洗,再将清洗后的数据存进数据库表中,最后再去数据分析。 现在先向用java里面的runtime方法去调用Python代码,但是有个问题比较疑惑,runtime方法不是要写Python代码路径吗,我把路径写死了,那么我以后发布出去怎么用?还有我可能要调用多个python文件,这要怎么办? 想问问大家我的这个思路是否可行?或者大家还有没有更好的思路方法。小白一定洗耳恭听。
python 压缩文件的几个问题
第一个问题:下面代码中的compresslevel=9是什么意思?下面代码中的compresslevel有几个取值?谢谢 ``` g = gzip.GzipFile(filename="", mode='wb', compresslevel=9, fileobj=open("wanshe.txt.gz", 'wb')) g.write(open('t.txt','r').read()) g.close() ``` 第二个问题:下面代码中的w:gz是什么意思?谢谢 ``` tar = tarfile.open('simple.tar.gz', 'w:gz') tar.add('simple.tar',arcname='Simple2') tar.close() ``` 请各位老师指点一下,谢谢
Windows10里annaconda下安装pycocotools包报错ERROR: Command errored out with exit status 128
最近为了课题,从https://github.com/ultralytics/yolov3 这里下载了代码并准备配置环境去训练我自己的数据。配置过程中出现了问题。 --- **背景** 由于我一开始用虚拟机装Ubuntu后配置基本功能就各种报错,不耐烦之后又按老师推荐下了docker,但是因为我是win10家庭版,安装过程也特别曲折。安装完之后发现现在阿里云里提供的镜像特别少,也没看到我需要的(难道是我的打开方式有问题?)反正最终也放弃了。现在选择直接在win10里用annaconda配置Pytorch来运行代码进行训练。 --- **配置要求** git clone获取的文件里requirements.txt的配置要求有 numpy opencv-python >= 4.1 torch >= 1.4 matplotlib pycocotools tqdm pillow 我已经在annaconda的base环境里安装了pytorch框架,搜索得到没有安装的只有opencv-python和pycocotools。在安装这两个包的过程中出现了各种各样的问题。 _opencv-python我通过pip的方式安装成功了,但是我也不知道装到哪里去了,也没有找到把它添加到annaconda环境里的方法。如果大佬有知道怎么解决就顺便教下我吧orz_ 最大的问题出现在安装pycocotools上。 --- **问题与尝试过的解决方法** 我在论坛里查了一下,目前有人提供了可在windows上下载pycocotools的链接:https://github.com/philferriere/cocoapi 。给出的教程有以下几步: 1. 安装[visualcppbuildtools_full.exe](https://blog.csdn.net/u012247418/article/details/82314129) 2. 重启电脑,在开始菜单中打开"Visual C++ 2015 x64 Native Build Tools Command Prompt"命令行 3. 命令行中键入"activate env_name"激活虚拟环境(env_name为虚拟环境名称——我输入的是base) 4. 命令行中键入下文完成pycocotools安装 ```pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI``` 我实际操作的过程: * 我安装了这个vs15插件,但我本机上安装的是vs17 ![安装完成后的开始菜单](https://img-ask.csdn.net/upload/202003/14/1584118044_295423.jpg) * 我分别用命令行,git cmd和上面截图中的两个vs本机命令行进行了上面教程中的操作,结果都是一样的,下面是其中一个的截图 ![用vs17命令工具运行结果](https://img-ask.csdn.net/upload/202003/14/1584119741_522499.jpg) 文字版如下: (base) D:\Anaconda3\Lib\site-packages>pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI Collecting git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI Cloning https://github.com/philferriere/cocoapi.git to c:\users\********\appdata\local\temp\pip-req-build-m06w4ozg Running command git clone -q https://github.com/philferriere/cocoapi.git 'C:\Users\********\AppData\Local\Temp\pip-req-build-m06w4ozg' fatal: early EOF fatal: the remote end hung up unexpectedly fatal: index-pack failed error: RPC failed; curl 18 transfer closed with outstanding read data remaining ERROR: Command errored out with exit status 128: git clone -q https://github.com/philferriere/cocoapi.git 'C:\Users\********\AppData\Local\Temp\pip-req-build-m06w4ozg' Check the logs for full command output. 我的git刚刚升级时勾选了可以git字符网址,不过运行了还是这个报错。网上有说可以修改git config的,但是我搜索了我的所有安装盘都没有找到git的配置文件,就不了了之了。 向大佬们求一个解决方法!
不知道这个是Python,还是xml,或者svg,哪位老师能解释一下
``` <svg xmlns="http://www.w3.org/2000/svg" width="54" height="100"><path fill="#EBEEEF" d="M6 0h42c3.312 0 6 2.688 6 6v88c0 3.312-2.688 6-6 6h-42c-3.312 0-6-2.688-6-6v-88c0-3.314 2.687-6 6-6z"/><path fill="#1C3C50" d="M0 10h54v80h-54v-80z"/><path fill="#24485F" d="M4 14h46v72h-46v-72z"/><path fill="#BCC3C8" d="M13 93h28v4h-28v-4z"/><path fill="#BCC3C8" d="M13 3h28v4h-28v-4z"/><path fill="#1C3C50" d="M46 3c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2zm-37 2c-.553 0-1 .448-1 1 0 .553.447 1 1 1s1-.447 1-1-.447-1-1-1zm-3 0c-.553 0-1 .448-1 1 0 .553.447 1 1 1s1-.447 1-1-.447-1-1-1z"/></svg> ``` 这句代码保存在一个.svg文件中,而且这个svg文件只有这一句代码,并且没有换行。我们的项目引用它后就显示成了图片。哪位老师能解释一下它的含义,还有那个xmlns后面的网址是做什么的?后面跟的一些数字是做什么的?为什么不能换行谢谢,感激不尽。
启动pyspider时,一直卡在result_worker starting...,应该怎么解决
**启动pyspider,一直卡在result__worker starting不往下运行** ``` Microsoft Windows [版本 10.0.17763.678] (c) 2018 Microsoft Corporation。保留所有权利。 C:\Users\zhihe>pyspider all c:\users\zhihe\appdata\local\programs\python\python37\lib\site-packages\pyspider\libs\utils.py:196: FutureWarning: timeout is not supported on your platform. warnings.warn("timeout is not supported on your platform.", FutureWarning) phantomjs fetcher running on port 25555 [I 190821 00:46:03 result_worker:49] result_worker starting... ``` 网上找的到的解决方法都是:关闭防火墙。但是我关闭了防火墙仍然没有效果。 **我的Python版本:** ``` Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32 ``` **Pyspider版本:** ``` C:\Users\zhihe>pip3 show pyspider Name: pyspider Version: 0.3.10 Summary: A Powerful Spider System in Python Home-page: https://github.com/binux/pyspider Author: Roy Binux Author-email: roy@binux.me License: Apache License, Version 2.0 Location: c:\users\zhihe\appdata\local\programs\python\python37\lib\site-packages Requires: chardet, Jinja2, tblib, u-msgpack-python, six, click, tornado, lxml, pycurl, requests, wsgidav, Flask, cssselect, pyquery, Flask-Login ``` **Pycurl版本:** ``` C:\Users\zhihe>pip3 show pycurl Name: pycurl Version: 7.43.0.3 Summary: PycURL -- A Python Interface To The cURL library Home-page: http://pycurl.io/ Author: Kjetil Jacobsen, Markus F.X.J. Oberhumer, Oleg Pudeyev Author-email: kjetilja at gmail.com, markus at oberhumer.com, oleg at bsdpower.com License: LGPL/MIT Location: c:\users\zhihe\appdata\local\programs\python\python37\lib\site-packages Requires: Required-by: pyspider ``` 替换关键字的三个文件都进行替换了,忘各位大拿老师解惑
ubuntu下dateutil的安装
操作:在ubuntu中virtualenv下运行程序 错误提示:ImportError: No module named dateutil 已完成:下载了dateutil.tar.gz并已解压,里面有setup.py 我在网上看的安装setup.py文件需要python setup.py install --安装路径. 问题1:请问在安装dateutil我应该在ubuntu哪个目录下操作,是放要运行的项目的那个目录还是随便一个目录就可以? 问题2:请问"python setup.py install --安装路径"安装路径我应该怎么写?安装到什么地方? 还有如果我用sudo pip install python-dateutil安装时,提示了: File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1259, in prepare_files )[0] IndexError: list index out of range 不知道为什么会越界. 哪位老师了解情况请不吝赐教,感激不尽.
从同一“区街道路村楼单元层”提取出缺失的房号,就是在第二列“房号”中,从最小到最大之间缺失的房号
目前手里有个表格,需要从同一“区街道路村楼单元层”提取出缺失的房号,就是在第二列“房号”中,从最小到最大之间缺失的房号。 本来是用了正则表达式,打算提取房号中的数字,然后从小到大进行比较,但是目前有两个问题: 1、同一街道这一块不知道应该怎么表述; 2、正则表达式提取出来的是个数组,没法进行大小比较。 目前想到的只有以下这些,小弟初学python想请哪位大哥指导一下,谢谢。 exported_alljob_path = r'C:/biaogezhuanyong/d.csv'##########定义打开文件 alljob = pd.read_csv(exported_alljob_path,encoding= 'gb18030') alljob.loc[:,'区街道路村'] = alljob.loc[:,'所属区县'].str.cat(alljob['所属乡镇/街道']).\ str.cat(alljob['所属路/巷/行政村']).str.cat(alljob['所属小区/学校/自然村']) col= ['所属区县','所属乡镇/街道','所属路/巷/行政村','所属小区/学校/自然村','所属楼','所属单元','所属层','区街道路村楼单元层','房号'] alljob_new = pd.DataFrame(alljob_first,columns = col) daima = [] def re_1(i): res = re .findall(r"\d+",i) return res alljob['层号2'] = alljob.apply(lambda x: re_1(x['所属层']),axis=1) ![图片说明](https://img-ask.csdn.net/upload/201911/09/1573308795_300126.jpg) 以上是原始表格的截图。 以下是原始表格的数据: 区街道路村楼单元层 房号 海东街道西毛家庄西毛家庄00单元0层 1号 海东街道西毛家庄西毛家庄00单元0层 2号 海东街道西毛家庄西毛家庄00单元0层 52号 海东街道西毛家庄西毛家庄00单元0层 53号 海东街道西毛家庄西毛家庄00单元0层 54号 海东街道西毛家庄西毛家庄00单元0层 55号 海东街道西毛家庄西毛家庄00单元0层 56号 海东街道西毛家庄西毛家庄00单元0层 57号 海东街道西毛家庄西毛家庄00单元0层 98号 海东街道西毛家庄西毛家庄00单元0层 100号 海东街道西毛家庄西毛家庄00单元0层 136号 海东街道教师楼1号楼1单元1层 102号 海东街道教师楼1号楼1单元1层 101号 海东街道教师楼1号楼2单元2层 202号 海东街道教师楼1号楼2单元5层 501号 海东街道教师楼1号楼2单元6层 602号 海东街道后海西村后海西村000 后海西村3号 海东街道后海西村后海西村000 后海西村10号 海东街道后海西村后海西村000 后海西村11号 海东街道后海西村后海西村000 后海西村20号 海东街道后海西村后海西村000 后海西村21号 海东街道后海西村后海西村000 后海西村22号 海东街道后海西村后海西村000 后海西村23号 海东街道后海西村后海西村000 后海西村24号 海东街道后海西村后海西村000 后海西村25号 实在不好意思,之前是我描述的不够清晰,我想再补充一点,想找的不是一个街道的,而是以“同一小区同一楼同一单元同一层”下缺失的房号。
flask框架用bootstrap的问题
第一步:在Python虚拟环境中安装了bootstrap的Flask扩展:pip install flask-bootstrap, 第二步:在py文件中 ``` from flask import Flask, render_template from flask.ext.bootstrap import Bootstrap bootstrap = Bootstrap(app) ``` 第三步:在html中引用bootstrap的样式 错误提示: ``` (venv) Think@RESEARCH E:\MyWebsite > python hello.py Traceback (most recent call last): File "hello.py", line 3, in <module> bootstrap = Bootstrap(app) NameError: name 'app' is not defined ``` 请问哪位老师指点一下,如何修改,谢谢 Python是2.7版本,flask是.10版,bootstrap是3.3.5.6的。
安装npm install时出现错误
我是在win8上面操作,需要在github上面克隆一个项目在本地编辑 在nodejs官网上面下载了一个安装包,安装后进行了如下操作 1:新建了一个文件夹,用virtualenv做成虚拟环境 2:将github上面的项目clone到该文件夹 3:将该文件夹进入venv虚拟环境 4:安装Python的依赖包flask之类的 5:进入项目的static文件夹,(这里面有package.json文件,dependencies里有一项是"sass-loader": "^2.0.0",) 输入了如下命令:npm install 错误如下: ``` Building: C:\Program Files\nodejs\node.exe node_modules\pangyp\bin\node-gyp rebuild --libsass_ext= --libsass_cflags= --libsa ss_ldflags= --libsass_library= gyp WARN install got an error, rolling back install gyp ERR! configure error gyp ERR! stack Error: node-v0.12.7.tar.gz local checksum 88bc1dbe3f1da75a4b5eabea55ab1f40a99373b8ae7356d2374e8053ced04ec0 no 42e53067127a5061415be7e12f39d gyp ERR! stack at deref (E:\project1_2\shijuan\node_modules\node-sass\node_modules\pangyp\lib\install.js:304:20) gyp ERR! stack at Request.<anonymous> (E:\project1_2\shijuan\node_modules\node-sass\node_modules\pangyp\lib\install.js:3 gyp ERR! stack at Request.emit (events.js:129:20) gyp ERR! stack at IncomingMessage.<anonymous> (E:\project1_2\shijuan\node_modules\node-sass\node_modules\pangyp\node_mod gyp ERR! stack at IncomingMessage.emit (events.js:129:20) gyp ERR! stack at _stream_readable.js:908:16 gyp ERR! stack at process._tickCallback (node.js:355:11) gyp ERR! System Windows_NT 6.3.9600 gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "E:\\project1_2\\shijuan\\node_modules\\node-sass\\node_modules\\pang ibsass_cflags=" "--libsass_ldflags=" "--libsass_library=" gyp ERR! cwd E:\project1_2\shijuan\node_modules\node-sass gyp ERR! node -v v0.12.7 gyp ERR! pangyp -v v2.3.0 gyp ERR! not ok Build failed ``` 不知道是哪个地方的原因,希望各位老师不吝赐教,谢谢
jsvalidation用法,小白提问!!
1、使用jsvalidation没效果,点击表单提交没验证直接到了下一页,按F12显示 HTTP404: 找不到 - 服务器尚未找到与请求的 URI (统一资源标识符)匹配的任何内容。 GET - http://localhost:8081/js/validation-framework.js 不知道啥原因,jsvalidation的三个dtd xml 和js代码是老师给的,说是要写一个什么正则表达式,不会改 求解答 2 查过资料 web。xml中没有设置那个什么过滤那个 3下面是framework。js的代码,看不懂 ``/* * JavaScript Validation Framework * * Author: Michael Chen(mechiland) on 2004/03 * This software is on the http://www.cosoft.org.cn/projects/jsvalidation * for update, bugfix, etc, you can goto the homepage and submit your request * and question. * Apache License 2.0 * You should use this software under the terms. * * Please, please keep above words. At least ,please make a note that such as * "This software developed by Michael Chen(http://www.jzchen.net)" . * $Id: validation-framework.js,v 1.7 2004/04/30 05:33:29 jzchen Exp $ */ /** Config Section, Config these fields to make this framework work. **/ // If there is only one config file in your system, use this property. otherwise, use // ValidationFramework.init("configfile") // instead. var ValidationRoot = "/LoginServletProjectFour/js/"; // the field style when validation fails. it aim to provide more beautiful UI and more good // experience to the end-user. // NOTE: this will be buggy. Please report the error to me. var ValidationFailCssStyle = "border:2px solid #FFCC88;"; //Validation function. The entry point of the framework. function doValidate(formRef) { try { var formId = formRef; if (typeof (formRef) == "string") { formId = formRef; } else if (typeof (formRef) == "object") { formId = formRef.getAttribute("id"); } var form = FormFactory.getFormFromId(formId); if (form != null) { return ValidationFramework.validateForm(form); } else { return false; } } catch (e) { ValidationFramework.exception(e.name+":" +e.description); return false; } } /**===================================================================**/ /* * JSValidation Framework Code Started * * Please do not modify the code unless you are very familiar with JavaScript. * The best way to solve problem is report the problem to our project page. * url: http://cosoft.org.cn/projects/jsvalidation */ // The Xml document. To process cross-browser. Thanks Eric. function XmlDocument() {} XmlDocument.create = function () { if (document.implementation && document.implementation.createDocument) { return document.implementation.createDocument("", "", null); } else if (window.ActiveXObject) { try { var prefix = ["MSXML2", "MSXML", "Microsoft", "MSXML3"]; for (var i = 0; i < prefix.length; i++) { //return new ActiveXObject(prefix[i] + ".DomDocument"); var obj = new ActiveXObject(prefix[i] + ".DomDocument"); if (obj == null || typeof(obj) == 'undefined') { continue; } else { return obj; } } } catch (e) { //^_^ throw new Error("My God, What version of IE are you using? IE5&+ is requiered."); } } else throw new Error("Cannot create DOM Document!"); } function ValidationFramework() {} ValidationFramework._validationCache = null; ValidationFramework._currentForm = null; ValidationFramework._userLanguage="auto"; /** * Validate a form. * NOTE: the form is Framework virture form, not the HTML Form. * Html Form can be transform to Virture form by * FormFactory.getFormFromId(htmlFormId); * See the doc for more information. * @param form the virtual form. */ ValidationFramework.validateForm = function(fform) { ValidationFramework._currentForm = fform; var failFields = []; var id = fform.getId(); var showError = fform.getShowError(); var showType = fform.getShowType(); var br = null; if (showError != "alert") { br = "<br />"; } else { br = "\n"; } var errorStrArray = []; var ret = false; var formObj = document.getElementById(id); var fields = fform.getFields(); var rightnum = 0; for (var i = 0; i < fields.length; i++) { var retVal = ValidationFramework.validateField(fields[i]); var fo=formObj[fields[i].getName()]; if (typeof (fo) !='undefined' && fo != null && typeof(fo.type) != "undefined") { fo.style.cssText = ""; } if (retVal != "OK") { errorStrArray[errorStrArray.length] = retVal; failFields[failFields.length] = formObj[fields[i].getName()]; } else { rightnum ++; } } if (rightnum == fields.length) { ret = true; } if (errorStrArray.length > 0) { if (showError == "alert") { if (showType == "first") { alert(errorStrArray[0]); } else { alert(errorStrArray.join(br)); } } else { var errObj = document.getElementById(showError); if (showType == "first") { errObj.innerHTML = errorStrArray[0]; } else { errObj.innerHTML = errorStrArray.join(br); } } if (typeof (failFields[0]) !='undefined' && failFields[0] != null && typeof(failFields[0].type) != "undefined") { failFields[0].focus(); } for (var i = 0; i < failFields.length; i++) { var o = failFields[i]; if ( typeof (o) !='undefined' && o != null && typeof(o.type) != "undefined") { o.style.cssText = ValidationFailCssStyle; } } } return ret; } /** * Validation the field * @param filed the field you want to validate. */ ValidationFramework.validateField = function(field) { var depends = field.getDepends(); var retStr = "OK"; for (var i = 0; i < depends.length; i++) { if (!ValidationFramework.validateDepend(field, depends[i])) { retStr = ValidationFramework.getErrorString(field, depends[i]); return retStr; //Break; } } return retStr; } /** * Validate the field depend. * This function dispatch the various depends into ValidateMethodFactory.validateXXX */ ValidationFramework.validateDepend = function(field, depend) { if (depend.getName() == "required") { return ValidateMethodFactory.validateRequired(field, depend.getParams()); } else if (depend.getName() == "integer") { return ValidateMethodFactory.validateInteger(field, depend.getParams()); } else if (depend.getName() == "double") { return ValidateMethodFactory.validateDouble(field, depend.getParams()); } else if (depend.getName() == "commonChar") { return ValidateMethodFactory.validateCommonChar(field, depend.getParams()); } else if (depend.getName() == "chineseChar") { return ValidateMethodFactory.validateChineseChar(field, depend.getParams()); } else if (depend.getName() == "minLength") { return ValidateMethodFactory.validateMinLength(field, depend.getParams()); } else if (depend.getName() == "maxLength") { return ValidateMethodFactory.validateMaxLength(field, depend.getParams()); } else if (depend.getName() == "email") { return ValidateMethodFactory.validateEmail(field, depend.getParams()); } else if (depend.getName() == "date") { return ValidateMethodFactory.validateDate(field, depend.getParams()); } else if (depend.getName() == "time") { return ValidateMethodFactory.validateTime(field, depend.getParams()); } else if (depend.getName() == "mask") { return ValidateMethodFactory.validateMask(field, depend.getParams()); } else if (depend.getName() == "integerRange") { return ValidateMethodFactory.validateIntegerRange(field, depend.getParams()); } else if (depend.getName() == "doubleRange") { return ValidateMethodFactory.validateDoubleRange(field, depend.getParams()); } else if (depend.getName() == "equalsField") { return ValidateMethodFactory.validateEqualsField(field, depend.getParams()); } else { ValidationFramework.exception("还未实现该依赖: " + depend.getName()); return false; } } // hold the current config file var _validationConfigFile = ""; ValidationFramework.getDocumentElement = function() { if (ValidationFramework._validationCache != null) { return ValidationFramework._validationCache; } var file = ""; if (_validationConfigFile != "") { file = _validationConfigFile; } else { file = ValidationRoot + "validation-config.xml"; } var xmlDoc = XmlDocument.create(); xmlDoc.async = false; // Damn!!! it cost me half an hour to fix it! xmlDoc.load(file); if (xmlDoc.documentElement == null) { ValidationFramework.exception("配置文件读取错误,请检查。"); return null; } // TODO: parse the document if it's a valid document. ValidationFramework._validationCache = xmlDoc.documentElement; var lang=ValidationFramework._validationCache.getAttribute("lang"); ValidationFramework._userLanguage = (lang==null) ? "auto" : lang; return ValidationFramework._validationCache; } ValidationFramework.init = function(configFile) { _validationConfigFile = configFile; ValidationFramework.getDocumentElement(); } ValidationFramework.getAllForms = function() { var vforms = []; var root = ValidationFramework.getDocumentElement(); if (root != null) { var fs = root.childNodes; for (var i = 0;i < fs.length ;i++ ) { vforms[i] = new ValidationForm(fs.item(i)); } } return vforms; } ValidationFramework.getErrorString = function(field, depend) { var stringResource = null; var lang = ValidationFramework._userLanguage.toLowerCase(); //if lang == auto, get the user's browser language. if (lang == "auto") { // different browser has the different method the get the // user's language. so this is a stupid way to detect the // most common browser IE and Mozilla. if (typeof navigator.userLanguage == 'undefined') lang = navigator.language.toLowerCase(); else lang = navigator.userLanguage.toLowerCase(); } // get the language if (typeof ValidationErrorString[lang] != 'object') { stringResource = ValidationErrorString['zh-cn']; } else { stringResource = ValidationErrorString[lang]; } var dep = depend.getName().toLowerCase(); var retStr = stringResource[dep]; //If the specified depend not defined, use the default error string. if (typeof retStr != 'string') { retStr = stringResource["default"]; retStr = retStr.replace("{0}", field.getDisplayName()); return retStr; } retStr = retStr.replace("{0}", field.getDisplayName()); if (dep == "minlength" || dep == "maxlength" || dep == "date" ) { retStr = retStr.replace("{1}", depend.getParams()[0]); } else if ( dep == "equalsfield") { var eqField = field.getForm().findField(depend.getParams()[0]); if (eqField == null) { ValidationFramework.exception("找不到名称为[" + depend.getParams()[0]+"]的域,请检查xml配置文件。"); retStr = "<<配置错误>>"; } else { retStr = retStr.replace("{1}", field.getForm().findField(depend.getParams()[0]).getDisplayName()); } } else if (dep == "integerrange" || dep == "doublerange") { retStr = retStr.replace("{1}", depend.getParams()[0]); retStr = retStr.replace("{2}", depend.getParams()[1]); } return retStr; } ValidationFramework.getWebFormFieldObj = function(field) { var obj = null; if (ValidationFramework._currentForm != null) { var formObj = document.getElementById(ValidationFramework._currentForm.getId()); obj = formObj[field.getName()]; if (typeof(obj) == 'undefined') { obj = null; } } if (obj == null) { ValidationFramework.exception("在配置文件中有需要验证的域,但在实际网页表单中不存在:[name=" + field.getName() + "]。"); } return obj; } ValidationFramework.exception = function(str) { var ex = "JavaScript Validation Framework 运行时错误:\n\n"; ex += str; ex += "\n\n\n任何运行错误都会导致该域验证失败。"; alert(ex); } ValidationFramework.getIntegerValue = function(val) { var intvalue = parseInt(val); if (isNaN(intvalue)) { ValidationFramework.exception("期待一个整型参数。"); } return intvalue; } ValidationFramework.getFloatValue = function(val) { var floatvalue = parseFloat(val); if (isNaN(floatvalue)) { ValidationFramework.exception("期待一个浮点型参数。"); } return floatvalue; } /** * FormFactory * Build virture form from Html Form. */ function FormFactory() {} FormFactory.getFormFromDOM = function(dom) { var form = new ValidationForm(); form.setId(dom.getAttribute("id")); form.setShowError(dom.getAttribute("show-error")); form.setOnFail(dom.getAttribute("onfail")); form.setShowType(dom.getAttribute("show-type")); if (dom.hasChildNodes()) { var f = dom.childNodes; for (var i = 0; i < f.length; i++) { if (f.item(i) == null||typeof(f.item(i).tagName) == 'undefined' || f.item(i).tagName != 'field') { continue; } var field = FieldFactory.getFieldFromDOM(f.item(i)); if (field != null) { form.addField(field); } } } return form; } /// Get the Form from ID FormFactory.getFormFromId = function(id) { var root = ValidationFramework.getDocumentElement(); if ( root == null || (!root.hasChildNodes()) ) return null; var vforms = root.childNodes; for (var i = 0; i < vforms.length; i++) { var f = vforms.item(i); if (typeof(f.tagName) != 'undefined' && f.tagName == 'form' && f.getAttribute("id") == id) { return FormFactory.getFormFromDOM(f); } } return null; } /** * A validation form object. */ function ValidationForm() { this._fields = []; this._id = null; this._showError = null; this._onFail = null; this._showType = null; this.getFields = function() { return this._fields; } this.setFields = function(p0) { this._fields = p0; } this.getId = function() { return this._id; } this.setId = function(p0) { this._id = p0; } this.getShowError = function() { return this._showError; } this.setShowError = function(p0) { this._showError = p0; } this.getShowType = function() { return this._showType; } this.setShowType = function(p0) { this._showType = p0; } this.getOnFail = function() { return this._onFail; } this.setOnFail = function(p0) { this._onFail = p0; } // find field by it's name this.findField = function(p0) { for (var i = 0; i < this._fields.length; i++) { if (this._fields[i].getName() == p0) { return this._fields[i]; } } return null; } this.addField = function(p0) { this._fields[this._fields.length] = p0; p0.setForm(this); } } /** * A form filed. virtual. */ function ValidationField() { this._name = null; this._depends = []; this._displayName = null; this._onFail = null; this._form = null; this.getName = function() { return this._name; } this.setName = function(p0) { this._name = p0; } this.getDepends = function() { return this._depends; } this.setDepends = function(p0) { this._depends = p0; } this.getDisplayName = function() { return this._displayName; } this.setDisplayName = function(p0) { this._displayName = p0; } this.getOnFail = function() { return this._onFail; } this.setOnFail = function(p0) { this._onFail = p0; } this.getForm = function() { return this._form; } this.setForm = function(p0) { this._form = p0; } this.addDepend = function(p0) { this._depends[this._depends.length] = p0; } } ///Factory methods for create Field function FieldFactory() {} FieldFactory.getFieldFromDOM = function(dom) { var field = new ValidationField(); field.setName(dom.getAttribute("name")); field.setDisplayName(dom.getAttribute("display-name")); field.setOnFail(dom.getAttribute("onfail")); if (dom.hasChildNodes()) { var depends = dom.childNodes; for (var i = 0; i < depends.length; i++) { var item = depends.item(i); if (typeof(item.tagName) == 'undefined' || item.tagName != 'depend') { continue; } var dp = new ValidationDepend(); dp.setName(item.getAttribute("name")); dp.addParam(item.getAttribute("param0")); dp.addParam(item.getAttribute("param1")); dp.addParam(item.getAttribute("param2")); dp.addParam(item.getAttribute("param3")); dp.addParam(item.getAttribute("param4")); field.addDepend(dp); } } return field; } function FormFieldUtils() {} FormFieldUtils.findField = function(formName, fieldName) { var formArr = ValidationFramework.getAllForms(); var theForm = null; for (var i = 0; i < formArr.length; i++) { if (formArr[i].getName() == formName) { theForm = formArr[i]; } } if (theForm != null) { return theForm.findField(fieldName); } else { return null; } } /** * A validaton depend. */ function ValidationDepend() { this._name = null; this._params = []; this.getName = function() { return this._name; } this.setName = function(p0) { this._name = p0; } this.getParams = function() { return this._params; } this.setParams = function(p0) { this.params = p0; } this.addParam = function(p0) { this._params[this._params.length] = p0; } } function ValidateMethodFactory() {} ValidateMethodFactory._methods = []; ValidateMethodFactory.validateRequired = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; if (typeof(obj.type) == "undefined") { var tmp = 0; for (var i = 0; i < obj.length; i++) { if (obj[i].checked) { return true; } } return false; } if (obj.type == "checkbox" || obj.type == "radio") { return (obj.checked); } else { return !(obj.value == ""); } } ValidateMethodFactory.validateInteger = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; if (obj.value == "") return true; var exp = new RegExp("^-?\\d+$"); return exp.test(obj.value); } ValidateMethodFactory.validateDouble = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; if (obj.value == "") return true; var exp = new RegExp("^-?\\d+\.\\d+$"); return exp.test(obj.value); } ValidateMethodFactory.validateCommonChar = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; if (obj.value == "") return true; var exp = new RegExp("^[A-Za-z0-9_]*$"); return exp.test(obj.value); } ValidateMethodFactory.validateChineseChar = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; if (obj.value == "") return true; var exp = new RegExp("^[\u4E00-\u9FA5\uF900-\uFA2D]*$"); return exp.test(obj.value); } ValidateMethodFactory.validateMinLength = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; var v = ValidationFramework.getIntegerValue(params[0]); return (obj.value.length >= v); } ValidateMethodFactory.validateMaxLength = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; var v = ValidationFramework.getIntegerValue(params[0]); return (obj.value.length <= v); } ValidateMethodFactory.validateEmail = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; return ValidateMethodFactory.__checkEmail(obj.value); } ValidateMethodFactory.validateDate = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; if (obj.value == "") return true; var value = obj.value; var datePattern = params[0]; var MONTH = "mm"; var DAY = "dd"; var YEAR = "yyyy"; var orderMonth = datePattern.indexOf(MONTH); var orderDay = datePattern.indexOf(DAY); var orderYear = datePattern.indexOf(YEAR); var bValid = true; var dateRegexp = null; if ((orderDay < orderYear && orderDay > orderMonth)) { var iDelim1 = orderMonth + MONTH.length; var iDelim2 = orderDay + DAY.length; var delim1 = datePattern.substring(iDelim1, iDelim1 + 1); var delim2 = datePattern.substring(iDelim2, iDelim2 + 1); if (iDelim1 == orderDay && iDelim2 == orderYear) { dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$"); } else if (iDelim1 == orderDay) { dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$"); } else if (iDelim2 == orderYear) { dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$"); } else { dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$"); } var matched = dateRegexp.exec(value); if(matched != null) { if (!ValidateMethodFactory.__isValidDate(matched[2], matched[1], matched[3])) { bValid = false; } } else { bValid = false; } } else if ((orderMonth < orderYear && orderMonth > orderDay)) { var iDelim1 = orderDay + DAY.length; var iDelim2 = orderMonth + MONTH.length; var delim1 = datePattern.substring(iDelim1, iDelim1 + 1); var delim2 = datePattern.substring(iDelim2, iDelim2 + 1); if (iDelim1 == orderMonth && iDelim2 == orderYear) { dateRegexp = new RegExp("^(\\d{2})(\\d{2})(\\d{4})$"); } else if (iDelim1 == orderMonth) { dateRegexp = new RegExp("^(\\d{2})(\\d{2})[" + delim2 + "](\\d{4})$"); } else if (iDelim2 == orderYear) { dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})(\\d{4})$"); } else { dateRegexp = new RegExp("^(\\d{2})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{4})$"); } var matched = dateRegexp.exec(value); if(matched != null) { if (!ValidateMethodFactory.__isValidDate(matched[1], matched[2], matched[3])) { bValid = false; } } else { bValid = false; } } else if ((orderMonth > orderYear && orderMonth < orderDay)) { var iDelim1 = orderYear + YEAR.length; var iDelim2 = orderMonth + MONTH.length; var delim1 = datePattern.substring(iDelim1, iDelim1 + 1); var delim2 = datePattern.substring(iDelim2, iDelim2 + 1); if (iDelim1 == orderMonth && iDelim2 == orderDay) { dateRegexp = new RegExp("^(\\d{4})(\\d{2})(\\d{2})$"); } else if (iDelim1 == orderMonth) { dateRegexp = new RegExp("^(\\d{4})(\\d{2})[" + delim2 + "](\\d{2})$"); } else if (iDelim2 == orderDay) { dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})(\\d{2})$"); } else { dateRegexp = new RegExp("^(\\d{4})[" + delim1 + "](\\d{2})[" + delim2 + "](\\d{2})$"); } var matched = dateRegexp.exec(value); if(matched != null) { if (!ValidateMethodFactory.__isValidDate(matched[3], matched[2], matched[1])) { bValid = false; } } else { bValid = false; } } else { bValid = false; } return bValid; } ValidateMethodFactory.validateTime = function(field, params) { ////NOT IMPLEMENT YET SINCE IT'S NOT USEFUL. return true; } ValidateMethodFactory.validateMask = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; if (obj.value == "") return true; var exp = new RegExp(params[0]); //FIXME: this method may be buggy, need more test. return exp.test(obj.value); } ValidateMethodFactory.validateIntegerRange = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; if (obj.value == "") return true; var p0 = ValidationFramework.getIntegerValue(params[0]); var p1 = ValidationFramework.getIntegerValue(params[1]); if (ValidateMethodFactory.validateInteger(field)) { var v = parseInt(obj.value); return (v >= p0 && v <= p1); } else { return false; } return true; } ValidateMethodFactory.validateDoubleRange = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; if (obj.value == "") return true; var p0 = ValidationFramework.getFloatValue(params[0]); var p1 = ValidationFramework.getFloatValue(params[1]); if (ValidateMethodFactory.validateInteger(field) || ValidateMethodFactory.validateDouble(field)) { var v = parseFloat(obj.value); return (v >= p0 && v <= p1); } else { return false; } return true; } ValidateMethodFactory.validateEqualsField = function(field, params) { var obj = ValidationFramework.getWebFormFieldObj(field); if (obj == null) return false; var formObj = document.getElementById(ValidationFramework._currentForm.getId()); var eqField = formObj[params[0]]; if (eqField != null) { return (obj.value == eqField.value) } else { return false; } } ValidateMethodFactory.__isValidDate = function(day, month, year) { if (month < 1 || month > 12) return false; if (day < 1 || day > 31) return false; if ((month == 4 || month == 6 || month == 9 || month == 11) &&(day == 31)) return false; if (month == 2) { var leap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); if (day>29 || (day == 29 && !leap)) return false; } return true; } /** * Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com), * http://javascript.internet.com */ ValidateMethodFactory.__checkEmail = function(emailStr) { if (emailStr.length == 0) { return true; } var emailPat=/^(.+)@(.+)$/; var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"; var validChars="\[^\\s" + specialChars + "\]"; var quotedUser="(\"[^\"]*\")"; var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/; var atom=validChars + '+'; var word="(" + atom + "|" + quotedUser + ")"; var userPat=new RegExp("^" + word + "(\\." + word + ")*$"); var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$"); var matchArray=emailStr.match(emailPat); if (matchArray == null) { return false; } var user=matchArray[1]; var domain=matchArray[2]; if (user.match(userPat) == null) { return false; } var IPArray = domain.match(ipDomainPat); if (IPArray != null) { for (var i = 1; i <= 4; i++) { if (IPArray[i] > 255) { return false; } } return true; } var domainArray=domain.match(domainPat); if (domainArray == null) { return false; } var atomPat=new RegExp(atom,"g"); var domArr=domain.match(atomPat); var len=domArr.length; if ((domArr[domArr.length-1].length < 2) || (domArr[domArr.length-1].length > 3)) { return false; } if (len < 2) { return false; } return true; } ////Language Definitions var ValidationErrorString = new Object(); ////Simplified Chinese(zh-ch) ValidationErrorString["zh-cn"] = new Object(); ValidationErrorString["zh-cn"]["default"]="域{0}校验失败。"; ValidationErrorString["zh-cn"]["required"]="{0}不能为空。<br/>"; ValidationErrorString["zh-cn"]["integer"]="{0}必须是一个整数。"; ValidationErrorString["zh-cn"]["double"]="{0}必须是一个浮点数(带小数点)。"; ValidationErrorString["zh-cn"]["commonchar"] = "{0}必须是普通英文字符:字母,数字和下划线。<br/>"; ValidationErrorString["zh-cn"]["chinesechar"] = "{0}必须是中文字符。"; ValidationErrorString["zh-cn"]["minlength"]="{0}长度不能小于{1}个字符。"; ValidationErrorString["zh-cn"]["maxlength"]="{0}长度不能大于{1}个字符。" ; ValidationErrorString["zh-cn"]["invalid"]="{0}无效。"; ValidationErrorString["zh-cn"]["date"]="{0}不是一个有效日期,期待格式:{1}。"; ValidationErrorString["zh-cn"]["integerrange"]="{0}必须在整数{1}和{2}之间。"; ValidationErrorString["zh-cn"]["doublerange"]="{0}必须在浮点数{1}和{2}之间。"; ValidationErrorString["zh-cn"]["pid"]="{0}不是一个有效身份证号。"; ValidationErrorString["zh-cn"]["email"]="{0}不是一个有效的Email。"; ValidationErrorString["zh-cn"]["equalsfield"]="{0}必须和{1}一致。"; ////English(en-us) ValidationErrorString["en-us"] = new Object(); ValidationErrorString["en-us"]["default"]="Failed when validating filed {0}."; ValidationErrorString["en-us"]["required"]="{0} is required."; ValidationErrorString["en-us"]["integer"]="{0} must be a integer."; ValidationErrorString["en-us"]["double"]="{0} must be a double value. "; ValidationErrorString["en-us"]["commonchar"] = "{0} should be common ascii characters, A-Z,a-z and undercore. "; ValidationErrorString["en-us"]["chinesechar"] = "{0} must be chinese characters. "; ValidationErrorString["en-us"]["minlength"]="{0} cannot be less then {1}. "; ValidationErrorString["en-us"]["maxlength"]="{0} cannot be more then {1}. "; ValidationErrorString["en-us"]["invalid"]="{0} in invalid. "; ValidationErrorString["en-us"]["date"]="{0} is not an invalid date format: {1}. "; ValidationErrorString["en-us"]["integerrange"]="{0} should be between number {1} and {2}. "; ValidationErrorString["en-us"]["doublerange"]="{0} should be between double {1} and {2}. "; ValidationErrorString["en-us"]["pid"]="{0} is not an valid pid. "; ValidationErrorString["en-us"]["email"]="{0} is not an valid email address. "; ValidationErrorString["en-us"]["equalsfield"]="{0} should be agree with field {1}. "; // preload the validation file. //ValidationFramework.getDocumentElement();` 4xml代码 ``` <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE validation-config SYSTEM "validation-config.dtd"> <validation-config lang="auto"> <form id="form1" show-error="alert" show-type="all"> <field name="name" display-name="姓名" onfail=""> <depend name="required" /> <depend name="commonChar" /> <depend name="minLength" param0="3" /> <depend name="maxLength" param0="20" /> </field> <field name="email" display-name="email邮箱"> <depend name="required" /> <depend name="email" /> </field> <field name="age" display-name="年龄"> <depend name="required" /> </field> <field name="protime" display-name="编程时间"> <depend name="required" /> </field> <field name="os" display-name="使用的操作系统"> <depend name="required" /> </field> <field name="lang" display-name="使用的编程语言"> <depend name="required" /> </field> <field name="editor1" display-name="建议"> <depend name="required" /> </field> </form> </validation-config> ``` 5jsp代码 ``` <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'Login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <script type='text/javascript' src='ckeditor/ckeditor.js'></script> <script type='text/javascript' src='/js/validation-framework.js'></script> <body> <h1>潜在用户网络调查</h1> <form action='LoginServlet' name='form1' id='form1' method='post' onSubmit="return doValidate(this)"> 姓名:<input type='text' name='name' value='' /><br/> EMAIL:<input type='text' name='email' value=''/><br/> 年纪:<input type='radio' name='age' value='小于18' />小于18 <input type='radio' name='age' value='18-25'/>18-25 <input type='radio' name='age' value='26-40'/>26-40 <input type='radio' name='age' value='大于40'/>大于40<br/> 编程时间:<select name='protime'> <option value='6-12月' >6-12月</option> <option value='12-24月'>12-24月</option> <option value='24月以上'>24月以上</option> </select><br/> 使用操作系统:<select name='os' multiple='multiple' size='6'> <option value='Win XP'>Win XP</option> <option value='Win 2000/2003'>Win 2000/2003</option> <option value='Linux'>Linux</option> <option value='FreeBSD'>FreeBSD</option> <option value='Mac OS'>Mac OS</option> <option value='Other'>Other</option> </select><br/> 使用的编程语言:<input type='checkbox' name='lang' value='C'/>C <input type='checkbox' name='lang' value='C++'/>C++ <input type='checkbox' name='lang' value='C#'/>C# <input type='checkbox' name='lang' value='PYTHON'/>PYTHON <input type='checkbox' name='lang' value='JAVA'/>JAVA <input type='checkbox' name='lang' value='VB'/>VB <input type='checkbox' name='lang' value='DEPHI'/>DEPHI<br/> 建议:<textarea class='ckeditor' cols='50' id='editor1' name='editor1' rows='10'></textarea><br/> <input type='submit' value='提交'> <input type='reset' value='重置'> <input type='hidden' name='ring' value='normal'><br/> <% HttpSession hs=request.getSession(true); hs.setAttribute("write", "yes"); %> </form> </body> </html> ```
已有原图像和mask 怎么去制作数据集呢
实验室老师给了一个课题是关于医学图像识别的 老师提供给我们一个他圈好的数据集 是黑白的超声图案和圈好的mask一一对应 然后用的是maskrcnn去做深度学习 ![图片说明](https://img-ask.csdn.net/upload/201910/05/1570261476_21269.jpg) 就像这样 在训练的时候遇到了问题 不知道要怎么去做成需要的格式的数据集 因为网上的教程好多都是用VGG Image Annotator (VIA)和labelme圈的,而我这个数据因为太多了而且比较精确 没有办法去手动圈 要怎么去做才能获得和via圈出来一样的数据集格式呢就是得到annotation的json文件 各位前辈有了解的请帮我解惑 非常感谢
js页面提示ReferenceError: require is not defined
应该是这个函数的问题了(我点击“提交”按钮会出发这个函数),这个函数在html页面里面,我是打算在这个页面里面输入用户名密码然后在python文件里验证, ``` function upSubmit() { u_name = document.getElementById("username").value; u_pwd = document.getElementById("password").value; request = require('superagent'); csrftoken = $('meta[name=csrf-token]').attr('content'); info = { username:u_name, password:u_pwd }; request.post('/run/login').send(info).set('X-CSRFTOKEN',csrftoken).end((function(_this) { return function(err,res) { if (res.ok) { if (res.body.code == 0) { alert('well done'); } else { alert('why'); } } else { alert('errorrrrr'); } } })(this)); } ``` python文件如下: ``` @app.route('login') def login(): phone_num = request.get_json.get('phone') password = request.get_json.get('password') if phone_num == 111 and password =='123': return jsonify(code=0,msg='') else: return jsonify(code=1,msg='error') ``` 运行后在页面提示的错误是ReferenceError: require is not defined。 我安装的有nodejs,请问各位老师 request = require('superagent');这个写法对吗?如何修改错误呢?谢谢
.vue文件中如何写if语句
如何写if语句呢?是在pycharm里面写的一个.vue文件,一下三种方法我试过了都不行: if(){} {% if %} if 判断内容: 该if语句必须嵌套在<ul>的<li>标签中。 希望各位老师不吝赐教,谢谢。 哦,还有什么是vue文件?
写一个真假羊肉分类器
在餐饮业存在合成假羊肉片冒充的情况。 通过化学方法构建了5万维特征向量描述的羊肉分类数据。附件是一组训练数据,文件T给出的是真羊肉特征向量,F给出的是假羊肉。特征向量均以列向量的方式排列。 请运用所学方法构建分类器,实现最优分类效果。 链接:https://pan.baidu.com/s/1pBw_BnnG7uJKbMSePp1Vnw 提取码:4lbb 这是老师给的作业要求,后面的链接是5万维的数据,请各位大神帮帮忙,谢谢!
、请设计一个用于保存和处理DNA序列的类DNASequence,该类具有以下特征和功能:
3、请设计一个用于保存和处理DNA序列的类DNASequence,该类具有以下特征和功能:  一个翻译表,定义为类属性,名为transcription_table,类型是字典,用于将DNA符号A、T、G、C分别转换为对应的符号,即A到U、T到A、G到C、C到G。  一个限制酶对照表,定义为类属性,名为enz_dict,类型是字典。所谓限制酶,指的是识别特定DNA序列并在识别区内产生截断的蛋白质。本题只关注两种限制酶,一个是’EcoRI’,识别’ GAATTC’序列,'EcoRV',识别'GATATC'序列。  构造函数__init__(self, seqstring)的参数seqstring为一个字符串,代表一个DNA序列,DNASequence有一个对象属性seqstring保存该字符串。要求将参数seqstring中所有字符转换为大写形式再保存到对象属性seqstring中。  有一个对象方法transcription(self),将对象属性seqstring保存的DNA序列,逐符号翻译为对应符号的DNA序列,如”ATG”翻译为”UAC”。  一个对象方法restriction(self, enz),enz为限制酶名称,类型为字符串。该方法的功能是统计对象属性seqstring中,所给限制酶对应的DNA序列的出现次数。如果不含限制酶对应的DNA序列,返回0。  重载len运算,即重新定义特殊函数__len__(self),用于返回对象属性seqstring的长度。  注意:本题不考虑__init__参数seqstring中字符是否合法,默认所给字符都是ATGC之一。 运行示例: >>> virus = DNASequence(’atggagagccttgttcttggtgtcaa’) >>> virus.seqstring ’ATGGAGAGCCTTGTTCTTGGTGTCAA’ >>> virus.transcription() ’ UACCUCUCGGAACAAGAACCACAGUU’ >>> other_virus = DNASequence(’atgatatcggagaggatatcggtgtcaa’) >>> other_virus.restriction(’EcoRV’) 2 >>>len(virus) 26 代码框架:请将该框架拷贝出去,保存在DNASequence.py文件中。如要测试,请在另外的文件里写测试程序。DNASequence.py只能包含DNASequence类的实现代码,不能有其他的测试代码。提交答题时,只提交DNASequence.py。如有其他代码影响了老师改卷,由此造成的扣分后果,由自己承担。 class DNASequence: transcription_table = {} #翻译表 enz_dict = {} #限制酶对照表 def __init__(self, seqstring): #请在下面编写程序 #请勿修改下面的程序 def __len__(self): # 请在下面编写程序 # 请勿修改下面的程序 def restriction(self, enz): # 请在下面编写程序 # 请勿修改下面的程序 def transcription(self): # 请在下面编写程序 # 请勿修改下面的程序
请问如何使用flask传递参数
我做个网页的用户验证,用的是mysql数据库。我会在.py文件里操作数据库,但是不知道用flask怎样从html页面向.py文件传值,简单来说就是用户在html文件输入信息后,如何将其传给.py文件?网上很多例子是用的sqlite,请不要发这样的例子了,不知道怎样将其转为mysql。谢谢,请老师指点一下。
flask 定义的路由找不到了,请问该如何定义flask路由
![图片说明](https://img-ask.csdn.net/upload/201511/10/1447162707_359837.png) 上面的图是这个项目的目录结构,和run.py 的代码,其余代码如下: app文件夹中的__init__.py: ``` app --init from flask import Flask, render_template, json, request from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config.from_object('config') @app.route('/') def index(): return render_template('home.html') # return "hello" @app.route('/signin', methods=['GET', 'POST']) def signin(): return 'ok' ``` 下面的是home.html的代码 ``` <input type="text" id="name" placeholder="Username"> <input type="text" id="password" class="inbox" placeholder="password"> <div style="text-align:center"> <input type="button" id="btn_up_submit" class="btn btn-primary" value="sign up" onclick="upSubmit()"> <input type="button" id="btn_up_cancel" class="btn btn-success" value="cancel" onclick="upCancel()"> </div> <script> function upSubmit() { var name = $("#name").val(); var password = $("#password").val(); mydata = { 'name':name, 'password':password }; $.getJSON('/signin') # 我不知道在js里如何可以寻找路由,在网上看到了有这个代码就写了试试, } <script> ``` 有两个问题: 问题一:运行该程序后可以正常显示home.htm页面,但是为什么 我点击button按钮触发upSubmit找不到/signin这个路由呢,是不是需要在哪个地方设置? 问题二:如果不用getJSON这个方法也可以,请老师推荐一个其他方法,在js里面写然后可以找到路由并且可以传值,因为后期肯定还要传值。 万分感谢
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
立即提问