免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2764 | 回复: 2
打印 上一主题 下一主题

字典运算的一个疑惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-19 10:44 |只看该作者 |倒序浏览

                最近正在加紧阅读2 editon.在第11章的时候,遇到这么一个操作:
#!/usr/bin/env python
from operator import add, sub,mul,div
from random import randint, choice
ops = {'+': add, '-': sub,'*': mul,'/':div}
MAXTRIES = 2
def doprob():
    op = choice('+-*/')
    nums = [ randint(1,10) for i in range(2) ]
    nums.sort(reverse=True)
    ans = ops[op](*nums)          #就是这句,总觉得别扭。
    pr = '%d %s %s = ' % (nums[0], op, nums[1])
    oops = 0
    while True:
        try:
            if int(raw_input(pr)) == ans:
                print 'correct'
                break
            if oops == MAXTRIES:
                print 'sorry... the answer is\n%s%d' % (pr, ans)
            else:
                print 'incorrect... try again'
                oops += 1
        except (KeyboardInterrupt,
                EOFError, ValueError):
            print 'invalid input... try again'
def main():
    while True:
        doprob()
        try:
            opt = raw_input('Again? [y] ').lower()
            if opt and opt[0] == 'n':
                break
        except (KeyboardInterrupt, EOFError):
            break
if __name__ == '__main__':
    main()
ops是定义的全局字典,op是从四个运算符中随机得到的一个,(*nums)这就无从解释了,怎么就可以代表两个数字了呢?即使代表了两个数字,那怎么 ops[op] (*nums)就成了一个运算表达式了呢?还真的能返回正确的结果。如果我的运算是三个数字时,表达式如何写?
着实让我丈二的和尚-摸不着头脑。
python,dictory,还是我真的没能理解。还望哪位达人告知!
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/6303/showart_1086136.html

论坛徽章:
0
2 [报告]
发表于 2008-07-23 02:14 |只看该作者
比如  op['+'] 就提取了函数 add。

add(*[1,2]) 表示以列表 [1,2] 为 add 的参数,写成 add([1,2]) 是不对的。

以前 add(*[1,2]) 是这样表示的 apply(add [1,2]).

论坛徽章:
0
3 [报告]
发表于 2008-07-23 02:19 |只看该作者
原帖由 适兕 ops是定义的全局字典,op是从四个运算符中随机得到的一个,(*nums)这就无从解释了,怎么就可以代表两个数字了呢?即使代表了两个数字,那怎么 ops[op] (*nums)就成了一个运算表达式了呢?还真的能返回正确的结果。如果我的运算是三个数字时,表达式如何写?


nums 是用 [ randint(1,10) for i in range(2) ] 生成的,是一个有两个元素的列表。

add, sub, mul 等都只接受两个参数,不能直接放进三个数字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP