源代码:
'This is a module of idcheck for keyword'
import keyword
import string
kw = keyword.kwlist
num = string.digits
letters = string.letters
alpha = letters + '_'
alphalist = alpha + num
myInput = raw_input('请输入标识符:')
if len(myInput) == 1: #首先判断输入是否是长度为1的字符串
if (myInput[0] not in alpha):
print 'invalid:first char must be letter or _'
else:
print 'this is a id len 1'
if len(myInput) > 1: #当输入字符串长度大于1时
if myInput[0] not in alpha: #判断首字母是否是满足要求
print 'invalid:first char must be letter or _'
else:
if myInput in kw: #判断是否是关键字
print 'invalid:this is keyword'
else: #判断之后的字符是否满足要求
for otherchar in myInput[1:]:
if otherchar not in alphalist:
print 'invalid:input must be in alphalist'
break
else: #else一定要是和for循环处于同一级别,是要在循环结束之后判断是否是合法字符
print'id is identifier'
3. 排序
(a) 输入一串数字,并从大到小排列之.
(b)跟a一样,不过要用字典顺序从大到小排列
源代码:
'This is a module for paixu'
string = raw_input("input num(end with '!')").split() #加入split()函数是为了去除空格
#以自然数的形式从大到小输出
List = []
for each in string:
List.append(int(each))
test = sorted(List)[::-1] #从小到大输出
print test
#以字典的形式(按字典中每个元素的首字母)从大到小输出
Dict = []
for each in string:
Dict.append(each)
test2 = sorted(Dict)[::-1] #从小到大输出
print test2
5. 字符串
(a)更新你在练习2-7里面的方案, 使之可以每次向前向后都显示一个字符串的一个字符.
(b)通过扫描来判断两个字符串是否匹配(不能使用比较操作符cmp()內建函数). 附加题: 在你的方案中加入大小写区分.
(c)判断一个字符串是否重现(后面跟前面一致), 附加题: 在处理了严格的回文之外,加入对例如控制符号和空格的支持.
(d) 接受一个字符在其后面加一个反向拷贝,构成一个回文字符串.
源代码:
(b):
#coding:utf-8
str1 = raw_input("Enter a string1 -->")
str2 = raw_input("Enter a string2 -->")
if len(str1) != len(str2):
print'str1 not match str2'
else:
for char in range(0,len(str1)):
if str1[char] != str2[char]:
print 'str1 not match str2'
break
else:
print'str1 match str2'
源代码:
#coding=utf-8
'此函数可用来取代string.strip()函数'
string = raw_input('Enter the string:')
first, last = 0, 0
if string[0] == ' ' and string[len(string) - 1] == ' ': #前后都有空格
print 'first and last all owm space'
for char in string: #判断第一个字符是否是空格以及空格的个数
if char == ' ':
first += 1
else:
#print string[first:]
break
for char in string[::-1]: #判断最后一个字符是否是空格以及空格的个数
if char == ' ':
last += 1
else:
print string[first:len(string) - last]
print last
break
elif string[0] == ' ': #前面有空格后面没空格
print 'least first one space'
for char in string:
if char == ' ':
first += 1
else:
print string[first:]
break
elif string[len(string) - 1] == ' ': #后面有空格前面没空格
print 'least last one space'
for char in string[::-1]:
if char == ' ':
last += 1
else:
print string[:len(string)-last]
print last
break
else: #前后都没有空格
print 'no space'
print string
8. 列表, 给出一个整型值,返回代表该值的英文, 比如输入89返回"eight-nine". 附件题: 能够返回符合英文语法规则的形式, 比如输入"89" 返回"eighty-nine". 本练习中的值限定在0~1000.
源代码:
#coding=utf-8
units = [
'zero','one','two','three','four','five','six','seven','eight','nine','ten',
'eleven','twelve','thirteen','forteen','fifteen','sixteen','seventeen',
'eighteen','nineteen'
]
tens = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety']
hundreds = ['hundreds']
while True:
myInput = raw_input("Enter the num -->(input 'quit' to quit):") #字符串输入
if myInput == 'quit':
break
myInput_num = int(myInput) #将字符串输入转整型
Input_num = [] #列表
for i in myInput: #将输入的字符串转化为列表
Input_num.append(int(i))
if myInput_num < 20: #20以下的英文输出
print units[myInput_num]
elif myInput_num < 100: #100以下的输出
if Input_num[1] == 0:
print tens[Input_num[0] - 2]
else:
print (tens[Input_num[0] - 2] + '-' + units[Input_num[1]])
elif myInput_num < 1000:
if (Input_num[2] == 0 and Input_num[1] == 0): #第二、三位等于0(注:此语句需要放在最前,如果后两句先执行的话,会包含这种情况,最后一位会输出zero)
print units[Input_num[0]] + ' ' + 'hundreds'
elif Input_num[1] == 0: #第二位等于0
print units[Input_num[0]] + ' ' + 'hundreds' + ' '+ 'and' + ' ' + units[Input_num[2]]
elif Input_num[2] == 0: #第三位等于0
print units[Input_num[0]] + ' ' + 'hundreds' + ' '+ 'and' + ' ' + tens[Input_num[1] - 2]
else: #每一位都不等于0
print units[Input_num[0]] + ' ' + 'hundreds' + ' '+ 'and' + ' ' + tens[Input_num[1] - 2] + '-' + units[Input_num[2]]
9. 转换, 为练习5-13 写一个姊妹函数,接受分钟数,返回小时数和分钟数.总时间不变,并且要求小时数尽可能大.
源代码:
#coding=utf-8
'this is a module of translate minute to hour and minute'
while True:
temp = raw_input("Enter the minute(input 'quit' to quit):")
if temp == 'quit':
break
time = int(temp)
hour = time // 60
minute = time % 60
if minute == 0:
print 'After trans -->: %d hour' % hour
else:
print 'After trans -->: %d hour %d minute' % (hour, minute)
10. 字符串, 写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转.比如,输入"Mr.Ed", 应该返回"mR.eD"作为输出.
源代码:
#coding=utf-8
"this is a module of change 'A' to 'a' or change 'a' to 'A'"
string = raw_input('Input the string you want to change:')
print string.swapcase() #大小写转化函数
11. 转换.
(a) 创建一个从整形到IP地址的转换程序, 如下格式: WWW.XXX.YYY.ZZZ
(b) 更新你的程序, 使之可以逆转换.
源代码:
#coding=utf-8
"""this is a module of tranfer 'int' to ip address"""
def int_transfer(): #将ip地址转化为整型
"""
raw_input 返回类型是str,而split()函数是可以将字符串通过
指定分隔符和次数将对象分割为列表的函数,所以返回类型是列表
"""
int_num = raw_input("input 12 nums with space split:").split()
"""
join()函数是可以将字符串、元组、列表中的元素以指定的分隔符连接生成
一个新的字符串,返回类型是字符串
"""
ip_address = '.'.join(int_num)
print ip_address
def ip_transfer(): #将整型数据转化为ip地址
ip_address = raw_input("input ip address:").split('.')
int_num = ' '.join(ip_address)
print int_num
if __name__ == '__main__':
int_transfer()
ip_transfer()
12. 字符串.
(a)创建一个名为findchr()的函数,函数声明如下.
def findchr(string,char)
findchr()要在字符串string中查找字符char,找到就返回该值的索引,否则返回-1.不能用string.*find()或者string.*index函数和方法
(b) 创建另一个叫rfindchr()的函数,查找字符char最后一次出现的位置.它跟findchr()工作类似,不过它是从字符串的最后开始向前查找的.
(c) 创建第三个函数,名字叫subchr(),声明如下.
def subchr(string,origchar,newchar)
subchr()跟findchr()类似,不同的是如果找到匹配的字符就用新的字符替换原先的字符.返回修改后的字符串.
源代码:#coding=utf-8
"this is a Module of replace find()"
def findchar(string, char): #顺序查找字符串
#设置循环从0到两组字符串长度之差
for i in range(0,(len(string) - len(char) + 1)):
#判断切片后的string内容是否与char相同,相同返回索引值
if string[i:(i + len(char))] == char :
return i
#for循环结束之后,所有的字符都遍历之后没有找到返回-1
else:
return -1
def rfindchar(string, char): #逆序查找字符串
#当findchar()函数不等于-1有结果返回时,在此基础上加上char的长度即最后一次出现的位置
if findchar(string, char) != -1:
return findchar(string, char) + len(char) - 1
#当findchar()函数等于-1没有结果返回时,输出-1
else:
return -1
def subchar(string, char, newchar): #替换查找的字符串
if findchar(string, char) != -1:
return string.replace(char,newchar)
if __name__ == '__main__': #主函数
string = raw_input('input the string:')
char = raw_input('input the char you want find:')
print '顺序查找的结果为:'
print findchar(string, char)
print '逆序查找的结果为:'
print rfindchar(string, char)
newchar = raw_input('input the new char:')
print subchar(string, char, newchar)
14.随机数。设计一个“石头、剪刀、布”游戏。在计算机中,用户输入选项,计算机产生一个随机选项,然后用程序决定最后的结果,尽量少用if语句
源代码:
#coding=utf-8
import random
"this is a finger-guessing game"
guess ='''a:Stone
b:Scissor
c:Paper
'''
result = [['a','b'],['b','c'],['c','a']]
while True:
print guess,
your_Choice = raw_input('Enter your choice(input "quit" to quit):\n')
print 'your choice is:%s' % your_Choice
if your_Choice == 'quit':
break
if your_Choice != 'a' and your_Choice != 'b' and your_Choice != 'c':
print 'only can choose a or b or c!(只能选择a, b, c)'
print
continue
temp = ['a','b','c']
Computer_choice = random.choice(temp)
print 'Computer choice is: %s' % Computer_choice
if Computer_choice == your_Choice:
print 'draw'
elif [Computer_choice,your_Choice] in result:
print 'computer wins !'
print
else:
print 'You wins !'
print
15.给出两个可识别的日期,比如MM/DD/YY或者DD/MM/YY格式,计算两个日期之间的天数
源代码:
#coding=utf-8
"This is a module of using function to count time"
import datetime
import math
def string_transfer_time(string): #将字符串转化为指定的时间格式
#strptime(string,'指定格式')函数可以将字符串转化为指定的时间格式,
#但是需要在datetime.datetime类型下,同时返回的是datetime.datetime类型
#实际输出看到的效果与字符串相同
date_time = datetime.datetime.strptime(string, '%Y-%m-%d').date()
#datetime.datetime.strptime()返回的是时间加日期的格式,所以在后面需要加上
#日常函数的限制,另外,中间必须要是datetime ,否则其他类型中没有strptime
#这个类型
return date_time
def count_days(date_time1,date_time2): #计算两个日期之间的天数
delta = abs(date_time1 - date_time2) #利用abs计算绝对值
return delta.days #delta.days可以用来计算两个日期之间的差值
if __name__ == '__main__':
date_time1 = raw_input('请输入格式为YY-MM-DD格式的日期:')
date_time2 = raw_input('请输入格式为YY-MM-DD格式的日期:')
temp1 = string_transfer_time(date_time1)
temp2 = string_transfer_time(date_time2)
result = count_days(temp1,temp2)
print result