佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1217|回复: 8

关于Python的一个小问题[解决]

[复制链接]
发表于 13-1-2008 07:29 PM | 显示全部楼层 |阅读模式
最近想自学一项程式语言,自己写了一个简单的程式,但遇到一个问题,请教各位一下。。

就是,我想让用户自己输入一个日子(Monday, Tuesday, Wednesday,...),然后让程式自己把文字转换成数字(Monday = 1, Tuesday = 2, Wednesday = 3,...)
但我不知道该怎么转换……
  1. day = int(raw_input('Enter the day(eg. Mon = 1, Tue = 2, Wed = 3, ...):'))
  2. Mon = 1
  3. Tue = 2
  4. Wed = 3
  5. Thu = 4
  6. Fri = 5
  7. Sat = 6
复制代码


[ 本帖最后由 新力爱力新 于 14-1-2008 02:47 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 13-1-2008 10:39 PM | 显示全部楼层
不太懂你的意思,你要转换为数字还是display =>(Mon = 1, etc) ?? 如果只是单纯转换为数字的话,可以用dict加regular expression或者string
. 看看以下例子:
  1. import re
  2. import sys

  3. if len(sys.argv) < 2:
  4.     print "Arguments??"
  5.     exit()
  6.    
  7. d_pattern = {1:"^(M|m)+on(day)?$",2:"^(T|t)+ue(sday)?$",3:"^(W|w)+ed(nesday)?$"} #后面省略

  8. for k,v in d_pattern.iteritems():
  9.     m = re.compile(v).match(sys.argv[1])
  10.     if m:
  11.         print k
  12.         break

  13. if not m:
  14.     print "No Match"
复制代码
回复

使用道具 举报

 楼主| 发表于 14-1-2008 12:36 AM | 显示全部楼层
原帖由 苦瓜汤 于 13-1-2008 10:39 PM 发表
不太懂你的意思,你要转换为数字还是display =>(Mon = 1, etc) ?? 如果只是单纯转换为数字的话,可以用dict加regular expression或者string
. 看看以下例子:
import re
import sys

if len(sys.argv) < 2:
    ...

我看不太懂这个例子
就是我想设定input为星期一的话,就是数字1;星期二为数字2……
因为我后来还要用if day == 1,就会怎样怎样;day == 2,就会怎样怎样……
回复

使用道具 举报

发表于 14-1-2008 10:23 AM | 显示全部楼层
之前的例子用了re module ==> http://docs.python.org/lib/module-re.html,对于匹配user的输入会比较灵活
当然你也可以用string:
  1. day = raw_input("Enter a day: ")

  2. d_pattern = {1:"monday",2:"tuesday",3:"wednesday",...} #后面省略



  3. for k,v in d_pattern.iteritems():

  4.     m = v == day.lower()

  5.     if m:

  6.         print k

  7.         break
复制代码
回复

使用道具 举报

 楼主| 发表于 14-1-2008 11:00 AM | 显示全部楼层
原帖由 苦瓜汤 于 14-1-2008 10:23 AM 发表
之前的例子用了re module ==> http://docs.python.org/lib/module-re.html,对于匹配user的输入会比较灵活
当然你也可以用string:
day = raw_input("Enter a day: "

d_pattern = {1:"monday",2:"tuesday",3: ...

re module我不会用,不过这个我弄到了,非常感激~

我想问一下关于以下这些keywords,是python预设、固定不能更改的还是我们自己可以用其他字母替代的?

d_pattern - 这个可以用x_pattern还是y_z来取代吗?
d_pattern.iteritems() - iteritems()这个是什么意思,做什么用的?
day.lower() - 这个呢?
k - 如果没说错,这个可以用其它字母取代的,例如是for xyz的对吗?
v,m - 这两个呢?
m = v == day.lower() - 这句是做什么的?
回复

使用道具 举报

发表于 14-1-2008 12:40 PM | 显示全部楼层
我想问一下关于以下这些keywords,是python预设、固定不能更改的还是我们自己可以用其他字母替代的?

d_pattern - 这个可以用x_pattern还是y_z来取代吗?
d_pattern.iteritems() - iteritems()这个是什么意思,做什么用的?
那些是variable (d_patter, k, v, m),所以你可以自己定义。
python内的key-value paired collection的实现是dictionary, 就好像 d_pattern所定义的这样, iteritems()返回该dictionary的iterator物件(作为looping),而k,v就分别代表key和value

  1. dict = {'mike':23,'fenny':19,'alan':25}

  2. for key, value in dict.iteritems():
  3.     print key+" is "+str(value)+" years old"
复制代码


day.lower() - 这个呢?
lower()是lowercase的意思。

m = v == day.lower() - 这句是做什么的
conditional statement, 写成 m = (v == day.lower()) 会比较容易明白
回复

使用道具 举报

Follow Us
 楼主| 发表于 14-1-2008 02:00 PM | 显示全部楼层

回复 6# 苦瓜汤 的帖子

iteritems()返回该dictionary的iterator物件(作为looping)
为什么需要做looping呢?

v == day.lower()
为什么需要lowercase呢?
回复

使用道具 举报

发表于 14-1-2008 02:32 PM | 显示全部楼层
1. Looping是为了检查dictionary内的每一个entry是否和user input的东西一样。
2. 你的user可能输入‘Tuesday', 'tUEsday', 'tuesDay',这些在case sensitive的system都是不一样的东西;若是全部换成lowercase => tuesday,那么就没有问题了。

我所列出的只是一个例子,你也可以用dictionary的has_key()方法来取代looping。可以多看看python的官方文档,对你会很有帮助。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 14-1-2008 02:45 PM | 显示全部楼层

回复 8# 苦瓜汤 的帖子

噢!终于全部了解了,谢谢你~

接下来想学GUI,不过完全没有头绪..

[ 本帖最后由 新力爱力新 于 14-1-2008 02:48 PM 编辑 ]
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 17-10-2025 03:03 PM , Processed in 0.124210 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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