鱼C论坛

 找回密码
 立即注册
查看: 1714|回复: 6

[技术交流] 零基础入门学Python 第26讲 字典 当索引不好用时

[复制链接]
发表于 2018-3-13 11:08:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
测试题:
0.
不支持
1.
把这个值自动加到字典中
2.
字典高效,因为序列是顺序索引,字典是精确索引
3.
貌似没有
4.
dict1 = {1:('one','two','three'),2:...}
dict1 = {1:'数字',3:'数字'}
5.
dict2 = dict1.copy()
or
dict2.update(dict1)

动动手:
0.
ef newuser(name):
    while name in user:
        name = input('此用户名已经被使用,请重新输入:')
    user[name] = input('请输入密码:')
    print('注册成功,赶紧试试登录吧0.0')

def login(name):
    while name not in user:
        name = input('南输入的用户名不存在,请重新输入:')
    psw = input('请输入密码:')
    while psw != user[name]:
        psw = input('密码不正确,请重新输入:')
    print('欢迎进入XXOO系统,请点右上角的X结束程序!')

user = dict()

while True:
    print('''
|--- 新建用户:N/n---|
|--- 登录账户:E/e---|
|--- 推出程序:Q/q---|
''')
   
    code = input('请输入指令代码:')
   
    if code == ('n' or 'N'):
        name = input('n请输入用户名:')
        newuser(name)
##        while name in user:
##            name = input('此用户名已经被使用,请重新输入:')
##        user[name] = input('请输入密码:')
##        print('注册成功,赶紧试试登录吧0.0')
        
    elif code == ('e' or 'E'):
        name = input('e请输入用户名:')
        login(name)
##        while name not in user:
##            name = input('南输入的用户名不存在,请重新输入:')
##        psw = input('请输入密码:')
##        while psw != user[name]:
##            psw = input('密码不正确,请重新输入:')
##        print('欢迎进入XXOO系统,请点右上角的X结束程序!')
        break

课堂笔记:
  1. dict字典有新建有几种方法:
      a. {}:
          i. d = {A:a,B:b}
      b. dict
          i. d = dict()
          ii. d = dict(a = 'a',b = 'b'),a不可以打引号,自己会打
          iii. d = dict(zip([list1],[list2]))
          iv. d = dict({A:a,B:b})
          v. d = dict(((cuple1),(cuple2)))
          vi. dict里面只有一个变量
  2. 注意,key必须是可计算对象,也就是可hash值,因为key通过散列函数必须找到存放value的地址,key必须是可计算的,不可以是变量,列表,字典和有变量元素的元祖.
  3. dict常用方法:
      a. d.fromkeys((1,2,3),'xixi'),key是1,2,3,value都是xixi,fromkeys会整个改变
      b. d.get(name),如果name在d里,返回value,否则返回None
      c. d.setdefault(name[,value]),如果d里有name,返回name的value,否则新建一个name,value如不设置为None
      d. d.copy(),内存新建一个d,和直接赋值不一样
      e. d.update(d1),把d1的值,加到d里面
      f. d.pop(key),把key里的值弹出,d.popitem(),随机弹出一个item值,实际操作发现,两个都是弹出的最后一个值.
      g. d[key] = value,给key赋值,如果没有key,则新建一个key再赋值
      h. d.keys(),d.values(),d.items(),用于遍历d的键,值,项目.
      i. d.clear(),清空d的列表,del d[key],清除某个项

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-12 19:08:52 | 显示全部楼层
  1. if code == ('n' or 'N'):   
  2.         name = input('n请输入用户名:')
  3.         newuser(name)
复制代码


楼主,你这样不会通过if判断吧。运行了一下,下面程序的没反应,直接跳 ”请输入指令代码“ 了

我感觉应该去掉括号
  1. if code == 'n' or 'N':
  2.         ssid = input('新建用户中,请输入用户名:')
  3.         newuser(ssid)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-12 22:46:17 | 显示全部楼层
高渐飞 发表于 2018-7-12 19:08
楼主,你这样不会通过if判断吧。运行了一下,下面程序的没反应,直接跳 ”请输入指令代码“ 了

我感 ...

==优先级大于or,所以code=='n'会先执行,显然是不正确的。
参考链接:
  1. http://www.runoob.com/python3/python3-basic-operators.html#ysf8
复制代码
--> Python运算符优先级
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-12 23:27:09 | 显示全部楼层
黄金猫 发表于 2018-7-12 22:46
==优先级大于or,所以code=='n'会先执行,显然是不正确的。
参考链接: --> Python运算符优先级

详细看了您po的链接,还是不太懂。

我们这里需要的是code等于n或者N,同时比较运算符==优先级高于逻辑运算符or,
即 if code=='n' or code =='N'

有两个疑问希望楼主可以解答一下:
(1) if code == 'n' or 'N'  按优先级是相当于 if (code == 'n' )or 'N' ,那N非0,再或运算,必然为1啊???
(2) if code == ('n' or 'N') 中,'n' 和 'N'都非0,或运算后必然为1,这时为code和1做判断了吧???

有点蒙,希望楼主可以解答下,感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-13 10:03:18 | 显示全部楼层
高渐飞 发表于 2018-7-12 23:27
详细看了您po的链接,还是不太懂。

我们这里需要的是code等于n或者N,同时比较运算符==优先级高于逻辑 ...

我仔细看了下,之前我写的代码确实有问题,其实是这样的,
  1. 'n' or 'N'的逻辑是:若n为真,返回n,否则返回N。
复制代码

所以我之前的代码
  1. if code == ('n' or 'N'):   
复制代码
等价于
  1. if code =='n'
复制代码
,因为我测试时只测n,所以没发现问题。

参考链接:http://www.runoob.com/python3/python3-basic-operators.html#ysf8
Python逻辑运算符一栏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-7-13 10:40:29 | 显示全部楼层
黄金猫 发表于 2018-7-13 10:03
我仔细看了下,之前我写的代码确实有问题,其实是这样的,

所以我之前的代码等价于,因为我测试时只测 ...

对的。我之前测试的时候输入N,直接跳“请输入指令了”。
所以,要想n和N都可以,除了
  1. if code=='n' or code =='N'
复制代码

还可以怎么写呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-13 14:26:35 | 显示全部楼层
高渐飞 发表于 2018-7-13 10:40
对的。我之前测试的时候输入N,直接跳“请输入指令了”。
所以,要想n和N都可以,除了

这个谷歌下试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 12:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表