5.21 - 一入Python深似海,从此节操是路人

5.21,Python第二节,伊始,我感觉我来到了蜀道的山脚下,抬头仰望,尽是巍峨,心底又不要脸的有一点儿小期待[*脸红*]

这节课,我回忆起来都是些零零碎碎,讲了字符串、列表、字典、切片、文件等等等等等等等等等等等等等等等等,等到了地老天荒,俯瞰不消化的大肚皮,依稀泛起一股有容乃大的苍凉。。

不过我觉得每节的作业都是精华,解题的过程就像探险一样有趣,嘻嘻嘻,所以我想分享出来,留待以后忘光的时候还有地方可以重温下当年的辉煌:

1、写一个可以添加商品、查询商品的程序:
    #1、首先需要登录,登录的用户名和密码是存在一个文件里面的,格式是niuhanyang,123456
    #账号密码是输入正确就登录,
    #登录之后,提示有3个选择,1、添加商品2、查询商品3、退出程序,exit()
    #添加商品,需要输入、商品名称、商品id、商品价格,都不能为空,价格和id只能是数字,商品名称不能重复
    #添加商品成功后,要把商品写入到product.txt这个文件里面

  #查询商品,输入商品名称,不能输入空,如果商品存在,打印商品的信息
    #商品名:xx,商品价格:xxx,商品id:xxxx
    #如果商品不存在,提示不存在,如果直接输入exit,那就直接退出程序

name_dict = {}
with open(‘file.txt‘,‘r‘) as fn:
    for line in fn:
        name,passwd = line.strip(‘\n‘).split(‘,‘) # 把line以逗号分隔,去掉换行符,并且分别定义为name、passwd
        name_dict[name] = passwd # 转换为有唯一索引的字典,这句的意思是name是key,passwd是value

id = 0
p_dict = {}
while True:
    name = input(‘请输入用户名:‘).strip()
    if name in name_dict:
        passwd = input(‘请输入密码:‘).strip()
        if passwd == name_dict[name]:
            print(‘欢迎%s来到小商品程序,请选择操作程序:‘ % name)
            print(‘1-添加商品‘.center(50, ‘*‘))
            print(‘2-查询商品‘.center(50, ‘*‘))
            print(‘3-退出程序‘.center(50, ‘*‘))
            while True:
                action = input(‘请输入操作程序序号:‘).strip()
                if action == ‘1‘:
                    pname = input(‘请输入商品名称:‘).strip()
                    id = id + 1
                    price = input(‘请输入商品价格:‘).strip()
                    if pname == ‘‘ or price == ‘‘:
                        print(‘商品名称或价格不能为空!‘)
                    else:
                        if pname in p_dict:
                            print(‘该商品已存在,不能重复添加!‘)
                        else:
                            if price.isdigit() != True:
                                print(‘商品价格必须为数字!‘)
                            else:
                                p_dict.setdefault(pname, {})[‘id‘] = id
                                p_dict.setdefault(pname, {})[‘price‘] = price
                                print(p_dict)
                                with open(‘product.txt‘, ‘w‘) as fp:
                                    product = str(p_dict)
                                    fp.write(product + ‘\n‘)
                                    print(‘添加商品%s成功!‘ % pname)
                elif action == ‘2‘:
                    with open(‘product.txt‘, ‘r‘) as fp:
                        p_list = fp.read()
                        print(p_list)
                    pname = input(‘请输入商品名称进行查询:‘).strip()
                    if pname == ‘‘:
                        print(‘商品名称不能为空!‘)
                    else:
                        if pname not in p_list:
                            print(‘该商品不存在!‘)
                        else:
                            p_dict = eval(p_list) # 这句的意思是把字符串转换为字典,注意:必须是符合字典格式的字符串才能转换,乱套的7788你是想干啥
                            print(‘商品名称:【%s】,商品价格:【%s】,商品ID:【%s】‘ % (pname, p_dict.get(pname).get(‘price‘), p_dict.get(pname).get(‘id‘)))
                elif action == ‘3‘ or action == ‘exit‘:
                    print(‘您已退出程序,谢谢使用。‘)
                    exit()
                    break
                else:
                    print(‘请输入正确的操作序号!‘)
        else:
            print(‘用户名或密码错误!‘)
    else:
        print(‘该用户不存在!‘)
    continue

另外还有修改文件的迷之逻辑:

# #下面这些是修改文件内容的
# import os
# f = open(‘a.txt‘,‘a+‘,encoding=‘utf-8‘)
# # f代表的是这个文件的对象,也叫句柄
# f.seek(0)#移动文件指针
# fw = open(‘a.txt.new‘,‘w‘,encoding=‘utf-8‘)
# for line in f:
#     new_res = line.replace(‘1‘,‘2‘)
#     fw.write(new_res)
# f.close()
# fw.close()
# os.remove(‘a.txt‘)
# os.rename(‘a.txt.new‘,‘a.txt‘)

我想知道opena.txt.new的时候,真的不会报错么。。

刚问了老师,老师说了,不会报错,因为a+文件不存在时,是不会报错的,同时,new出来的这个文件的命名也是可以很随意的

时间: 2024-10-06 16:57:29

5.21 - 一入Python深似海,从此节操是路人的相关文章

一入python深似海--变量和对象

一.基本原理 Python中一切都是对象,变量是对象的引用.这是一个普遍的法则.我们举个例子来说,Python是如何来处理的. x = 'blue' y = 'green' z = x 当python执行上面第一句的时候,会在heap中首先创建一个str对象,其文本内容为blue,同时还创建一个名为x的对象引用,x引用的就是这个str对象.第二句也是类似:第三条创建了一个名为z的新对象引用,并将其设置为对象引用x所指向的相同对象.如下图的变化. 所以看出在Python中赋值操作符号"="

一入python深似海--while-loop与for-loop

while loops 定义与实例 i = 0 numbers = [] while i < 6: print "At the top i is %d" % i numbers.append(i) i = i + 1 print "Numbers now: ", numbers print "At the bottom i is %d" % i print "The numbers: " for num in numbe

一入python深似海--list

几个实例展示python中数据结构list的魅力! list变量申明 the_count = [1, 2, 3, 4, 5] fruits = ['apples', 'oranges', 'pears', 'apricots'] change = [1, 'pennies', 2, 'dimes', 3, 'quarters'] 访问list元素 array= [1,2,5,3,6,8,4] #其实这里的顺序标识是 (0,1,2,3,4,5,6) (-7,-6,-5,-4,-3,-2,-1)#有

一入python深似海--对象的属性

Python中一切皆是对象,每个对象都可以有多个属性.Python是如何管理这些属性呢?我们来探讨一下. 属性的__dict__系统 对象的属性包含两部分:类属性和对象属性.对象的属性可能来自于其类的定义,叫做类属性.类属性可能来自于类的定义自身,也可能来自父类.一个对象的属性还可能是该对象实例定义的,叫做对象属性. 对象的属性存储在对象的__dict__属性中.__dict__为一个字典,键为属性名,对应的值为属性本身.下面是一个例子. class bird(object): feather

一入python深似海--浅拷贝与深拷贝

python中有一个模块copy,deepcopy函数用于深拷贝,copy函数用于浅拷贝.要理解浅拷贝,必须先弄清楚python中的引用. 引用 Python中一切都是对象,变量中存放的是对象的引用.这是一个普遍的法则.可以说 Python 没有赋值,只有引用.如,a=1,变量a只是整数对象1的引用. 可变对象与不可变对象及其引用 一.不可变对象 不可变对象包括:数字,字符串,元组. 由于Python中的变量存放的是对象引用,所以对于不可变对象而言,尽管对象本身不可变,但变量的对象引用是可变的.

一入python深似海--函数与文件

先上写干货,几个开源网站: github.com launchpad.net gitorious.org sourceforge.net freecode.com 今天介绍一下python函数和文件读写的知识. 函数 def print_two(*args):#That tells Python to take all the arguments to the function and then put them in args as a list arg1,arg2=args print "a

一入python深似海--split

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

一入python深似海--range()与for

range用法 使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节. 这里记录一下: range(1,5)#代表从1到5(不包含5) [1,2,3,4] range(1,5,2)#代表从1到5,间隔2(不包含5) [1,3] range(5)#代表从0到5(不包含5) [0,1,2,3,4] 再看看list的操作: array= [1,2,5,3,6,8,4] #其实这里的顺序标识是 [1,2,5,3,6,8,4] (0,1,2,3,4,5,

一入python深似海--class

python class 分为三个部分:class and object(类与对象),inheritance(继承),overload(重载)and override(覆写). class and object 类的定义,实例化,及成员访问,顺便提一下python中类均继承于一个叫object的类. class Song(object):#definition def __init__(self, lyrics): self.lyrics = lyrics#add attribution def