查看: 1218|回复: 8
|
关于Python的一个小问题[解决]
[复制链接]
|
|
最近想自学一项程式语言,自己写了一个简单的程式,但遇到一个问题,请教各位一下。。
就是,我想让用户自己输入一个日子(Monday, Tuesday, Wednesday,...),然后让程式自己把文字转换成数字(Monday = 1, Tuesday = 2, Wednesday = 3,...)
但我不知道该怎么转换……- day = int(raw_input('Enter the day(eg. Mon = 1, Tue = 2, Wed = 3, ...):'))
- Mon = 1
- Tue = 2
- Wed = 3
- Thu = 4
- Fri = 5
- Sat = 6
复制代码
[ 本帖最后由 新力爱力新 于 14-1-2008 02:47 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 13-1-2008 10:39 PM
|
显示全部楼层
不太懂你的意思,你要转换为数字还是display =>(Mon = 1, etc) ?? 如果只是单纯转换为数字的话,可以用dict加regular expression或者string
. 看看以下例子:
- import re
- import sys
- if len(sys.argv) < 2:
- print "Arguments??"
- exit()
-
- d_pattern = {1:"^(M|m)+on(day)?$",2:"^(T|t)+ue(sday)?$",3:"^(W|w)+ed(nesday)?$"} #后面省略
- for k,v in d_pattern.iteritems():
- m = re.compile(v).match(sys.argv[1])
- if m:
- print k
- break
- if not m:
- 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:
- day = raw_input("Enter a day: ")
- d_pattern = {1:"monday",2:"tuesday",3:"wednesday",...} #后面省略
- for k,v in d_pattern.iteritems():
- m = v == day.lower()
- if m:
- print k
- break
复制代码 |
|
|
|
|
|
|
|

楼主 |
发表于 14-1-2008 11:00 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 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
- dict = {'mike':23,'fenny':19,'alan':25}
- for key, value in dict.iteritems():
- print key+" is "+str(value)+" years old"
复制代码
day.lower() - 这个呢?
lower()是lowercase的意思。
m = v == day.lower() - 这句是做什么的
conditional statement, 写成 m = (v == day.lower()) 会比较容易明白 |
|
|
|
|
|
|
|

楼主 |
发表于 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的官方文档,对你会很有帮助。 |
|
|
|
|
|
|
|

楼主 |
发表于 14-1-2008 02:45 PM
|
显示全部楼层
回复 8# 苦瓜汤 的帖子
噢!终于全部了解了,谢谢你~
接下来想学GUI,不过完全没有头绪..
[ 本帖最后由 新力爱力新 于 14-1-2008 02:48 PM 编辑 ] |
|
|
|
|
|
|
| |
本周最热论坛帖子
|