|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 jiangyifei 于 2020-2-23 18:01 编辑
麻烦看一下下面代码哪里出问题了?
题目是这样的:
将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2将这17位数字和系数相乘的结果相加。用加出来和除以11,看余数是多少?余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。
from tkinter import*
factor=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)
last=('1','0','X','9','8','7','6','5','4','3','2')
def func():
id=ipt.get()
if len(id)!=18:
lb.config(text='输入非18位,请重新输入')
ipt.delete(0,END)
else:
sum=0
for i in range(17):
sum+=int(id)*factor
m=sum%11
lastchar=id[-1]
lastchar=lastchar.upper()
if lastchar==last[m]:
s='为合法身份证号码,\n'
s+=('出生日期为:%s年%s月%s日,\n'%(id[6:10],id[10:12],id[12:14]))
if int(id[-2])%2==0:
s+='性别:女'
else:
s+='性别:男'
root=Tk()
root.title('身份证号码')
root.geometry('320x240')
lb=Label(root,text='result')
lb.place(relx=0.2,rely=0.4,relwidth=0.15,relheight=0.1)
lb.config(text=s)
ipt=Entry(root)
ipt.place(relx=0.1,rely=0.1,relwidth=0.8,relheight=0.08)
bt=Button(root,text='校验',command=func)
bt.place(relx=0.8,rely=0.3,relwidth=0.1,relheight=0.08)
root.mainloop()
Traceback (most recent call last):
File "D:/python/第8章/3.身份证.py", line 28, in <module>
lb.config(text=s)?不是定义过吗?
NameError: name 's' is not defined
>>>
然后我把 lb.config(text=s) 改为 lb.config(text=‘s’)后,点击按钮就没有反应了,请问是怎么回事?
额,不是
在导入模块的后面
- from tkinter import*
- s = ""
- factor=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)
- last=('1','0','X','9','8','7','6','5','4','3','2')
- #剩下的代码
- #global s不用变位置
复制代码
|
|