免费注册 查看新帖 |

Chinaunix

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

新人请教个程序错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-16 20:37 |只看该作者 |倒序浏览
本帖最后由 good_luck_68 于 2013-05-16 20:39 编辑

题目需求:输入一个数字,返回对应的英文。例如输入87,返回eight-seven

大牛看了肯定能想到更好的方法,但我发这帖子主要希望大家帮忙看下到底语法哪错了,暂时先不考虑更好的算法了,谢了


def test(num):
    alist = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    num_int = int(num)
    new = []
    if num_int>100 or num_int<0:
        print 'Out of range'
    else:
        for i in range(len(num)):
            new.append(alist[num])        这句总是错误,我的想法是先通过num获得某一位的值x,然后再通过alist[x]获取对应的英文,最后通过append加入到新列表中,但总是错误,求解答    print new


>>> test('87')

Traceback (most recent call last):
  File "<pyshell#119>", line 1, in <module>
    test('87')
  File "C:/Python27/test/6-8.py", line 9, in test
    new.append(alist[num])
TypeError: list indices must be integers, not str

论坛徽章:
3
水瓶座
日期:2014-03-25 17:08:042015亚冠之塔什干棉农
日期:2015-08-10 10:45:122015亚冠之萨济拖拉机
日期:2015-08-13 16:05:24
2 [报告]
发表于 2013-05-16 20:46 |只看该作者
本帖最后由 su8610 于 2013-05-16 20:48 编辑

回复 1# good_luck_68


    for这一段肯定不对,因为len(num)最多也就返回2 ,也就是1 能取到的值也就是0 或者1,这样就算往list里面添加数据,也就是添加了zero或者one
  而且list的下标貌似不能用str格式的,这个也不对,要不就append的时候用alist[int(num)]

论坛徽章:
0
3 [报告]
发表于 2013-05-16 21:08 |只看该作者
def test(num):
    alist = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    num_int = int(num)
    new = []
    if num_int>=100 or num_int<0:
        print 'Out of range'
        return -1    else:
        print str(alist[int(num_int/10)]) + '-' + str(alist[int(num_int%10)])
        return 0

论坛徽章:
0
4 [报告]
发表于 2013-05-16 21:38 |只看该作者
本帖最后由 GhostFromHeaven 于 2013-05-16 21:45 编辑

new.append(alist[num])
这句有问题,num是字符串,你的例子里面是'87',列表的下标(索引)必须是整数integer,不能是字符串string
  1. def test(num):
  2.     engList = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
  3.     num_int = int(num)
  4.     num_str = "%d" % num_int
  5.     eng_str_list = []
  6.     #if num_int > 100 or num_int < 0:
  7.     #    print "Out of range."
  8.     #    return
  9.     for dig in num_str:
  10.         eng_str_list.append(engList[int(dig)])
  11.     print "-".join(eng_str_list)
  12. test(100)
复制代码

论坛徽章:
3
水瓶座
日期:2014-03-25 17:08:042015亚冠之塔什干棉农
日期:2015-08-10 10:45:122015亚冠之萨济拖拉机
日期:2015-08-13 16:05:24
5 [报告]
发表于 2013-05-16 21:51 |只看该作者
本帖最后由 su8610 于 2013-05-16 21:53 编辑
  1. number_dict = {0:"zero",1:"one",2:"two",3:"three",4:"four",5:"five",6:"six",7:"seven",8:"eight",9:"nine"}
  2. print (number_dict.items())

  3. num = input("Please type in your number:")
  4. eng = []

  5. for i in str(num):
  6.         eng.append(number_dict[int(i)])
  7. print (" ".join(eng))
复制代码
回复 1# good_luck_68


   

论坛徽章:
0
6 [报告]
发表于 2013-05-16 22:48 |只看该作者
  1. def test(num):
  2.     eng_dict = {'0':'zero', '1':'one', '2':'two', '3':'three', '4':'four', '5':'five',
  3.     '6':'six', '7':'seven', '8':'eight', '9':'nine'}
  4.     num_int = int(num)
  5.     if num_int < 0:
  6.         print "Out of range."
  7.         return
  8.         
  9.     num_str = "%d" % num_int
  10.     eng_str_list = []
  11.     for dig in num_str:
  12.         eng_str_list.append(eng_dict[dig])
  13.     print "-".join(eng_str_list)

  14. test(100)
复制代码

论坛徽章:
0
7 [报告]
发表于 2013-05-17 11:32 |只看该作者
  1. def test(num):
  2.     alist = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
  3.     new = []
  4.     if num > 100 or num < 0:
  5.         print 'Out of range'
  6.     else:
  7.         for i in list(str(num)):
  8.             new.append(alist[int(i)])
  9.     return new

  10. print test(87)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP