-->



时隔了几天,我终于实现了注册与登录这部分的功能,实现过程我都一一标上了注解,虽然看上去这里的代码并不多,但其实我已经写了几天啦,在经过不断反复的调试后终于实现了一函两用,这也应验了编程界的一句话:“没有做不到只有想不到”,这些方法虽看上去简单,但其实真正实践起来时并没有想象中的容易呢,或许可能是我的智商低吧,逻辑一直转不过弯,如果大家有更好的方式,也欢迎大家一起来交流!

#coding: utf-8
__author__ = 'Naruto'
def rigster(flog): #用于注册\登录时输入账号密码,参数flog用于判断登录或注册n为登录y为注册
us = input("请输入您的账号:")
ps = input("请输入您的密码:")
check_acount(us,ps,flog) #将参数传给check_acount
def check_acount(arg,pw,flog): #判断用户是否存在或写入配置
num = 0 #用于增量,配置文件第一行用于标识信息,从第二行才开始遍历内容
account = "用户:%s 密码:%s" % (arg, pw) #将用户密码赋于account
dict={} #用于接收切割后的用户信息
with open('Eycheck.conf', 'a+') as df: #加载本地配置文件,并以读写形式追加
df.seek(0) #将文本指针指向0,表示从头开始遍历
line = df.readlines() #遍历文件内容并赋值给line
if line != '': #非空执行下面的代码
for i in line: #通过for循环将line的变量分别赋值给 i
num+=1 #增量
if num >=2: #从第二行开始遍历
user,psd =i.strip('\n').split() #将文本分割为 用户名:admin 密码:admin 的形式
dict[user[3:]]=psd[3:] #通过分片截取冒号以后的字符,也就是账号密码的值,并以key:value形式写入到字典中
for k,v in dict.items(): #用for循环分别将字典的键值写入到k,v
if arg == k and pw == dict[k]: #通过传入的参数(即用户信息)与字典的键值进行动态配对
if flog == "n": #判断登录或注册,n为登录
print("登录成功!")
return True
elif flog =="y": #判断登录或注册,y为注册
print("该用户已存在于数据库中,请直接登录!")
rigster("n")
elif arg ==k and pw != dict[k]:
if flog == "n": #判断登录或注册,n为登录
print("您输入的账号与密码不符")
rigster('n')
elif flog == "y": #判断登录或注册,y为注册
print("该用户名已被占用,请更换!")
rigster('y')
if arg not in dict: #通过上面的配对后都没有找到的情况下进行非操作,如为登录状态则返回该用户不存在,反之则将新用户写入到配置文本
if flog == 'n': #判断登录或注册,n为登录
print("该用户不存在,请重新输入!")
elif flog == 'y': #判断登录或注册,y为注册
df.write('\n' + account) # 如用户名不存在字典中则创建并返回成功!
print('账户创建完毕')
else: #当配置文件为空时写入配置信息
df.write('#===========这里是系统配置文件,请勿随意修改===========#\n' + account)
print("配置与用户信息写入完毕")
def start(): #加载启动的函数
choose = input("是否初次使用本系统? y|n:")
if choose == 'y':
rigster('y')
elif choose == 'n':
rigster('n')
#=============================================主程序启动=================================================#
if __name__== "__main__": #判断是否为主文件执行
start()


记得上个月给自己托付了2个任务,一个是编写一个购物车系统,另一个则是本次的个人资料查询系统,由于懒惰的关系,迟迟未能动手,今天心血来潮,便开始着手这个项目了,当然说了是个查询的系统,我追求的是完美,所以是不可能在一天内完成的,在博客中大家可以一同见证我开发这个项目的全过程,如果可以我希望能给大家带来帮助,同时我也很乐意与志同道合的朋友一起交流与学习,如果您也有兴趣,不妨一起研究探讨,将项目做得更完美,虽然这个系统仅仅只是一个作业,但对于我而言无疑就是一块冲向成功的垫脚石。
下面来介绍下这个系统的详细运作流程吧!
和购物车一样,这个查询系统也有登录的一环,但与购物车不一样的是,这次为了精简代码,我决定把反复要求用户输入账户密码的操作封装到了一个函数内,而check_aconut则用于判断用户名是否存在,存在则要求直接登录,否则将用户信息写入到配置文件Eycheck.conf里,当用户启动程序后,系统调用register函数当用户输入完账号密码后将按照选择的choose进行反馈,登录成功后将会调用到check_info函数进行个人信息查询,check_info函数主要实现模糊遍历、数据将以字典形式存储于Ey_information.ini中,当用户输入关键字后,函数会字典寻找与关键字相符的数据并以红色标明后展示给用户。(待续....)


#coding: utf-8
__author__ = 'Naruto'
def register(): #注册/登陆
us = raw_input("请输入您的账号:")
pad = raw_input("请输入您的密码:")
check_acount(us, pad)
def check_acount(arg,pw): #判断用户是否存在或写入配置
account = "用户:%s 密码:%s" % (arg, pw)
num = 0
with open('Eycheck.conf', 'a+') as df:
for i in df:
num += 1
if num == 2:
user, paw = i.strip('\n').split()
if user == arg[9:] and paw == pw[9:]:
return 'Error_Exist'
elif arg[9:] == '' and paw[9:] == '':
df.write('===========这里是系统配置文件,请勿随意修改===========\n' + account)
else:
df.write('\n' + account)


if __name__== "__main__":
while True:
choose = raw_input("是否初次使用本系统? y|n:")
if choose == 'y':
df = register()
if df == 'Error_Exist':
print "您的账户已存在数据库中,请直接登陆!"
break
else:
print "账户创建完毕."
break

elif choose == 'n':
bf = register()
if bf == 'Error_Exist':
print "系统登陆成功."
break
else:
print "您的账号或密码不符,请重新输入!"
break

else:
print "您的输入有误,请重新输入!"

注:本文仅供参,以上源代码仅仅是本人的开发思路,值得探讨的是,登录函数的调用,我暂时未能找到调用的方式现在使用的调用方式无疑是错误的,不知什么原因程序只走到for i in df处就直接跳转至check_acount(arg,pad)了下面的代码并未执行导致判断写入的语句失效,如您有更好的方法或建议,欢迎与我交流!






经过反反复复的修改,最后我还是post了一个未完成的作品,当中的逻辑真的乱得一塌糊涂


下面就来简单介绍下它的结构吧,当购物车程序启动后系统会询问用户是否为第一次使用,


如果为第一次使用则要求用户注册,否则将直接进入登录流程,用户的信息保存在login.ini


这个配置文件当中,登录时系统会通过分片截取方式捕获文件里的内容是否与用户输入的


相同,不同则要求重新输入,成功登录后系统会要求用户充值钱包,钱包充值函调用了非


数字判断,只要用户输入的内容不是数字就会要求重新输入,充值完毕后将进入商城,用


户可以选择性购买商品,购买完毕后选择Q进入购物车结算.....


好吧,购物车还未完成,当中的逻辑实在是太乱了,我需要重新整理思路再次重写,当然


我也很期待有大神可以给点建议,因为这个购物车全是凭自己所掌握的知识开发的,未曾


参阅过任何文档、源码,作为一个自学的菜鸡,我还有很多知识需要普及,如果您也喜欢


python,欢迎一起交流,本购物车程序将会不断完善下去,我也会不断地发布新的文章


与大家一起分享学习的心得,也希望能从中把自己的知识水平提升到更高的级别!



# ===============以下为源码===============#



#coding: utf-8
__author__ = 'By Naruto'
from prettytable import PrettyTable
import sys,os
import getpass,time
# ===============主要函数===============#
def register(us,ps): #register函数
while True:
new_pasd_again = raw_input("请再次输入您要创建的密码:")
if new_pasd_again <> ps:
print '您两次输入的密码不符,请重新输入!'
else:
break
account = "用户:%s 密码:%s"%(us,ps)
with open('login.ini','a+') as df:
if df == '':
df.write('===========这里是系统配置文件,请勿随意修改===========\n'+ account)
print "信息保存成功 ,请登录您的账户!"
print '请重新登录您的账户!'
else:
df.write('\n'+ account)
print "信息保存成功,请登录您的账户!"
print '请重新登录您的账户!'
def login(us,ps): #到文件判断用户输入的账号密码是否正确函数
num = 0
with open('login.ini','r')as f:
for i in f:
num+=1
if num ==2:
user, psd = i.strip('\n').split()
if us == user[9:] and ps ==psd[9:]:
return 'Y'
else:
return 'N'
def login2(usd,psb): #登录函数
user_name = raw_input("请输入您的用户名:")
user_pasd = raw_input("请输入您的密码:")
rs = login(user_name,user_pasd)
if rs =='Y':
return 'True'
else:
return 'Felse'
def bank_money(num): #钱包充值函数
if num.isdigit():
return True
else:
return False
def shop_stoye(**arg): #商品展示函数
nu = ['A.', 'B.', 'C.','Q']
shop = ['mp3===》300RMB','mp4===》500RMB','iphone===》3000RMB','到购物车结算']
for k,v in enumerate(shop):
print nu[k],v
def Choose_shop(arg): #选择商品或进入购物车
if arg == 'A':
return 300
elif arg == 'B':
return 500
elif arg == 'C':
return 3000
elif arg =='Q':
return 'go'
else:
return 'Error'
# ===============主函数启动===============#
if __name__ == "__main__":
us_up = ""
psd_up = ''
i = 2
flog = True
while i >= 0: #进入购物车只有3次机会,选择y执行注册函数,n则直接执行登录
ask_question = raw_input("您是第一次使用本购物车系统吗? y|n:")
if ask_question == 'y':
new_name = raw_input("请输入您要注册的用户名:")
new_pasd = raw_input("请输入您要注册的密码:")
register(new_name, new_pasd)
login2(us_up, psd_up)
bank_money()
elif ask_question == 'n':
while flog == True:
bs = login2(us_up, psd_up)
if bs == 'True': #登录完毕后系统会要求用户输入充值金额
print '首次使用请先充值钱包!'
while True:
bank_Money = raw_input("请输入您要充值的金额:")
temp = bank_money(bank_Money)
if temp == True: #充值完毕后方可展示商品
print '充值完毕,您当前余额为:%s RMB' % int(bank_Money)
print '欢迎光临幕尼贺锡城,我们目前有以下商品正在出售!'
shop_stoye()
bankmoney1 = {}
while True:
choose = raw_input('请选择您要购买的商品:')
chose = Choose_shop(choose)
if chose == 300:
bankmoney1['mp3'] = 300
print 'MP3已成功加入购物车.'
continue
elif chose == 500:
bankmoney1['mp4'] = 500
print 'MP4已成功加入购物车.'
continue
elif chose == 3000:
bankmoney1['ipone'] = 3000
print 'iphone已成功加入购物车.'
continue
elif chose == 'go':
break
elif chose == 'Error':
print '您的输入有误,请重新输入!'
print ("您目前在本购物车添加了以下商品:") #选择Q后会进入购物车,并打印显示商品总价与当前余额
abc = 0
for key in bankmoney1:
print "品名:%s 价格%s" % (key, bankmoney1[key])
abc += bankmoney1[key]
print "总计:%d元,您的钱包有%d元" % (int(abc), int(bank_Money))
sum = raw_input('您要现在结账吗? y|n:')
bank_sum = 0
if sum == 'y':
bank_sum = int(bank_Money) - int(abc)
print '结算完毕,您的账户还剩%s元。'%bank_sum

elif sum == 'n':
continue
else:
print '请输入正确的金额!'
flog = False
else:
print "登录失败,您输入的账号或密码错误!"
else:
print "抱歉,您的输入有误,请输入 (y|n)您还有%s次机会。"%i
i -= 1
sys.exit()

#coding: utf-8__author__ = 'By Naruto'from prettytable import PrettyTable
import sys,os
import getpass,time
#register函数def register(us,ps):
    while True:
        new_pasd_again = raw_input("请再次输入您要创建的密码:")
        if new_pasd_again <> ps:
            print '您两次输入的密码不符,请重新输入!'        else:
            break    account = "用户:%s 密码:%s"%(us,ps)
    with open('login.ini','a+') as df:
        if df == '':
            df.write('===========这里是系统配置文件,请勿随意修改===========\n'+ account)
            print "信息保存成功,请登录您的账户!"            print '请重新登录您的账户!'        else:
            df.write('\n'+ account)
            print "信息保存成功,请登录您的账户!"            print '请重新登录您的账户!'def login(us,ps):
    num = 0    with open('login.ini','r')as f:
        for i in f:
            num+=1            if num ==2:
                user, psd = i.strip('\n').split()
                if us == user[9:] and ps ==psd[9:]:
                    return 'Y'                else:
                    return 'N'def login2(usd,psb):
    user_name = raw_input("请输入您的用户名:")
    user_pasd = raw_input("请输入您的密码:")
    rs = login(user_name,user_pasd)
    if rs =='Y':
        return 'True'    else:
        return 'Felse'def bank_money(num):
    bank_Money_num = 0    while True:
        if num.isdigit():
            num=int(num)
            return num
            break        else:
            print '请输入正确的金额'def shop_stoye(**arg):
    nu = ['A.', 'B.', 'C.']
    shop = ['mp3===》300RMB','mp4===》500RMB','iphone===》3000RMB']
    for k,v in enumerate(shop):
        print  nu[k],v
def Choose_shop(arg):
    if arg == 'A':
        return 300    elif arg == 'B':
        return 500    elif arg == 'C':
        return 3000    elif arg =='Q':
        return 'go'    else:
        print '程序发生未知的错误,正在结束本程序,欢迎再次使用,谢谢!'
# ==================================主程序启动========================================#
if __name__ == "__main__":
    us_up = ""    psd_up = ''    ask_question = raw_input("您是第一次使用本购物车系统吗? y|n:")
    if ask_question == 'y':
        new_name = raw_input("请输入您要注册的用户名:")
        new_pasd = raw_input("请输入您要注册的密码:")
        register(new_name,new_pasd)
        login2(us_up,psd_up)
        bank_money()
    elif ask_question =='n':
        while True:
            bs = login2(us_up, psd_up)
            if bs == 'True':
                print '首次使用请先充值钱包!'                bank_Money = raw_input("请输入您要充值的金额:")
                temp = bank_money(bank_Money)
                print '充值完毕,您当前余额为:%d RMB' % temp
                print '欢迎光临幕尼贺锡城,我们目前有以下商品正在出售!'                shop_stoye()
                break            else:
                print '您输入的账号或与当前密码不符,请重新输入!'else:
    print "抱歉,系统已崩溃,请重新启动程序,为您带来的不便还望海涵。"while True:
    choose = raw_input('请选择您要购买的商品:')
    chose = Choose_shop(choose)
    bankmoney1 = []
    if chose == 300:
        bankmoney1.append('300')
        print 'MP3已成功加入购物车.'        continue    elif chose == 500:
        bankmoney1.append('500')
        print 'MP4已成功加入购物车.'        continue    elif chose==3000:
        bankmoney1.append('3000')
        print 'iphone已成功加入购物车.'        continue    elif chose == 'go':
        break

#coding: utf-8
'''''''''
#抽象编程之函数的使用,抽象的函数可以帮我们大大的增加工作效率。
def hello (name): #def用于定义函数的键值,本实例定义了一个名为hello的函数,只有一个name的参数,调用时只需使用:hello()即可
return 'Hello,%s str'%name
print hello('naruto').title()
#这是一个用于计算斐波那契数列的函数实例
def fibss(number):
abc=[0,1]
for i in range(number-2):
abc.append(abc[-2] + abc[-1])
return abc
temp = int(raw_input("请输入您要计算的数:"))
print fibss(temp)


#回味数学之圆的面积、周长、球的表面积与体积的计算,圆的面积公式为:S=πr²或S=π×(d/2)²,圆的周长公式为:L = 2×π×r,球的表面积公式为:4πr^2.球的体积公式为:V球=(4/3)πr^3.
import sys #导入系统sys模块库,用于调用退出函数
def Area(area): #定义计算面积的函数
print "根据您输入的半径推算出圆的面积约为:%s" % float(3.1416 * (area*area))

def Lunch(lunch):#定义计算周长的函数
print "根据您输入的半径推算出圆的周长约为:%s" % float(2*3.1416*lunch)
def Ball(ball):
print "根据您输入的半径推算出球的表面积约为:%s,球的体积约为:%s" % (float(4*3.1416*(ball*ball)),float(4*3.1416*(ball*ball*ball)/3))

while True:#外围循环用于控制choose的输入,等于Q、A则进入内嵌循环中,否则将报错或退出。
choose = raw_input("您是想要(Q:计算面积、A:计算周长、V:计算球的表面积与体积、E:退出):")
while choose == 'Q' or choose == 'A' or choose == 'V':
sum = raw_input("请输入您要计算圆体的半径:")
if choose == 'Q':
Area(int(sum))#调用面积的函数并将sum的值传给area,进行打印输出
break
elif choose == 'V':
Ball(float(sum))
break
else:
Lunch(float(sum))#调用周长的函数并将sum的值传给lunch,进行打印输出
break
if choose == 'E':
print "感谢您的使用,再见!"
sys.exit()
if choose <> 'Q' and choose <> 'A' and choose <> 'V': #如果用户输入的字符是choose以外的字符,将提示用户重新输入!
print "对不起,您的输入有误,请重新输入!"

#回味数学之圆的面积、周长、球的表面积与体积的计算的精简版
def Area(area): #定义计算的函数
print "根据您输入的半径推算出圆的面积约为:%s,圆的周长约为:%s" % (float(3.1416 * (area * area)),float(2 * 3.1416 * area))
print "根据您输入的半径推算出球的表面积约为:%s,球的体积约为:%s" % (float(4 * 3.1416 * (area * area)), float(4 * 3.1416 * (area * area * area) / 3))
sum = raw_input('请输入您要计算圆体的半径:')
Area(float(sum))
'''''''''''