答案若有问题,欢迎评论指出
1.string.find 检测 str是否包含在string中;2.3版本过后,in 操作符也可作此用途。
2.
import string
import keyword
# identifier check
def test():
alphas = string.letters+'_'
nums = string.digits
while True:
myInput = raw_input('test\n')
# len > 0
if len(myInput)>1:
if myInput[0] not in alphas:
print "invaild"
else:
for otherchar in myInput[1:]:
if otherchar not in alphas+nums:
print "invaild"
break
else:
print "ok"
#len = 0
elif len(myInput) == 1:
if myInput[0] not in alphas:
print "invaild"
# check if it's a keyword
if myInput in keyword.kwlist:
print "it's a keyword"
if __name__ == '__main__':
#python key word
print keyword.kwlist
test()
3.
1).
num = 7
i = 0
list = []
while i<num :
number = int(raw_input('input a number\n'))
list.append(number)
i = i+1
print list
list.sort(reverse=True)
print list
2)字典序:字符串排序使用
number = raw_input('input a number\n')
4.
#coding=utf-8
from __future__ import division #floor除法
def grade(number1) :
grd = ''
if 90<=number1<=100 :
grd = 'A'
elif 80<=number1<=89 :
grd = 'B'
elif 70<=number1<=79 :
grd = 'C'
elif 60<=number1<=69 :
grd = 'D'
elif number1<=60 :
grd = 'F'
else:
print "not vaild"
return grd
if __name__ == '__main__' :
num = 3
sum = 0
j = 0
list = []
while j<num:
gra = int(raw_input('input a number') )
print grade(gra)
list.append(gra)
j = j+1
print list
i = 0
while i < len(list):
sum = sum + list[i]
i = i + 1
print sum / len(list)
5.
1)
print "input a string"
x = raw_input()
i = 0
print x[-1],x[i+1]
i = 1
while i<len(x)-1:
print x[i-1],x[i+1]
i = i+1
print x[i-1],x[0]
结果
input a string
tobe
e o
t b
o e
b t
2)
while True:
string1 = raw_input('1\n')
string2 = raw_input('2')
s1 = string1.upper()
s2 = string2.upper()
for i,j in zip(s1,s2):
if i is not j:
print 'wrong'
break
else:
print 'same'
附加:直接zip(string1,string2)即可
3)
while True:
string = raw_input('input a string')
if cmp(string,string[::-1]) == 0 :
print 'a palindrome'
else:
print 'not palindrome'
附加:支持字符串中出现空格
string = string.replace(' ','')
4)
string = raw_input('input a string')
string = string + string[::-1]
print string
6.
def strip2 (string):
#删除字符串开头的空格
i = 0
while i< len(string):
if string[i] == ' ':
string = string [i+1:]
i = i + 1
else:
break
#删除字符串结尾的空格,由于空格不好显示,这个地方用$代替
i = -1
while i>-len(string)-1:
if string[i] == '$':
string = string[:i]
else:
break
return string
if __name__ == '__main__':
while True:
string = raw_input('input a string\n')
print strip2(string)
7.源代码在输入一个数后,列出一个list,中间是不能整除该数的数。
错误在del删除后,i实际已经指向下一个数了。源程序输入偶数是不会死机的,只是结果应该不是本来想要的结果。
# recipt user input
num_str = raw_input('enter a number:\n')
num_num = int(num_str)
#creat list
fac_list = range(1,num_num+1)
print 'before:',fac_list
#find the divisor and delete
i = 0
while i<len(fac_list):
if num_num%fac_list[i] == 0:
del fac_list[i]
else:
i = i+1
print 'after:',fac_list
8.附加题,原题只需按位读取判断即可,只处理了比较麻烦的0,1,2
def deal(list):
i = 0
list2 = []
while i<len(list):
#index1
if i == 0:
if list[i] == '0':
list2.append('zero')
elif list[i] == '1':
list2.append('one')
elif list[i] == '2':
list2.append('two')
#index2
elif i == 1:
if list[i] == '0':
list2.append('and')
elif list[i] == '1':
if list[i-1] == '0':
list2[i-1] = 'ten'
if list[i-1] == '1':
list2[i-1] = 'elevent'
if list[i-1] == '2':
list2[i-1] = 'twelve'
elif list[i] == '2':
list2.append('tweenty')
#index3
elif i == 2 :
if list[i] == '0':
list2.append('and')
elif list[i] == '1':
list2.append('one hundred ')
elif list[i] == '2':
list2.append('two hundred ')
#index4
elif i == 3 :
if list[i] == '1':
list2.append('one thousand ')
elif list[i] == '2':
list2.append('two thousand ')
i = i+1
list2.reverse()
return list2
#just deal 0,1,2
if __name__ == '__main__':
while True:
list1 = list(raw_input('input a number'))
list1.reverse()
list2 = deal(list1)
print '-'.join(list2)
结果
input a number121
one hundred -tweenty-one
input a number110
one hundred -ten
input a number102
one hundred -and-two
input a number222
two hundred -tweenty-two
9.
while True:
time = int(raw_input('input minite :\n'))
h = time/60
t = time%60
print 'time is %d hour %d minite' %(h,t)
10.
while True:
string = raw_input('input a string:\n')
string = string.swapcase()
print string
11.
1)
index = 123232423434
index = str(index)
list = []
list.append(index[0:3])
list.append(index[3:6])
list.append(index[6:9])
list.append(index[9:12])
string = '.'.join(list)
print string
2)
string = '123.231.224.232'
string = string.replace('.','')
string = int(string)
print string
12.
1)
def findchr(string ,char):
i = 0
while i < len(string):
if string[i] == char:
return i
break
i = i + 1
else:
return -1
if __name__ == '__main__':
string = 'asd'
char = 'c'
index = findchr(string,char)
print index
2)
def rfindchr(string,char):
i = -1
while i>-len(string)-1:
if string[i] == char:
return i
break
i = i - 1
else:
return 1
if __name__ == '__main__':
string = 'asd'
char = 'x'
index = rfindchr(string,char)
print index
3)
def subchr(string,origchar,newchar):
i = 0
while i < len(string):
if string[i] == origchar:
#string类型不能直接对元素赋值
string = string[:i]+newchar+string[i+1:]
i = i + 1
return string
if __name__ == '__main__':
string = 'asdsadwaffefas'
char = 's'
newchar = 'x'
string = subchr(string,char,newchar)
print string
13.
只处理了简单的浮点数,指数型浮点数未处理
def atoc(string):
i = 0
while i<len(string):
if string[i] == '+' or string[i] == '-':
real = float(string[:i])
image = float(string [i+1:len(string)-1])
i = i+1
return complex(real=real,imag=image)
if __name__ == '__main__':
string = '23.2+2.5J'
print atoc(string)
14.
import random
def Rochambeau(t,list2,list3):
if t in list2:
return 'user win'
elif t in list3:
return 'squaring'
else:
return 'computer win'
if __name__ == '__main__':
while True:
list = ['s','j','b']
user = raw_input('select from s,j,b')
computer = random.choice(list)
print 'computer choose %s' % computer
t = (user,computer)
#预存胜利与平局情况,避免多次用if比较
list2 = [('s','j'),('j','b'),('b','s')]
list3 = [('s','s'),('j','j'),('b','b')]
print Rochambeau(t,list2,list3)
15.
1)
未考虑闰年
day1 = '16/10/20'
day2 = '16/9/20'
list1 = day1.split('/')
list2 = day2.split('/')
for i in range(len(list1)):
list1[i] = int(list1[i])
for i in range(len(list2)):
list2[i] = int(list2[i])
daylist=[31,28,31,30,31,30,31,31,30,31,30,31]
#year = 365,day1>day2
if list1[0]>list2[0]:
y = (list1[0]-list2[0]-1)*365
m= 0
for i in range(1,list1[1]):
m = m +daylist[i]
sum1 = m+ list1[2]
m2 = 0
for j in range(1,list2[1]):
m2 = m2 +daylist[j]
sum2 = m2 +list2[2]
sum = y +sum1 +365-sum2
elif list1[0]==list2[0]:
m = 0
for i in range(1, list1[1]):
m = m + daylist[i]
sum1 = m + list1[2]
m2 = 0
for j in range(1, list2[1]):
m2 = m2 + daylist[j]
sum2 = m2 + list2[2]
sum = sum1 - sum2
print sum
可以参考
http://www.cnblogs.com/hello–the-world/archive/2012/07/27/2612180.html
两个日期对另一日期求差的天数,再对两个差求差。且考虑了闰年,只需中间的闰月及结束那年的闰月情况。对结束那年的闰月情况考虑不周全
2)
# -*- coding: utf-8 -*-
import time
daylist=[31,28,31,30,31,30,31,31,30,31,30,31]
year = time.localtime().tm_year
mouth = time .localtime().tm_mon
day = time.localtime().tm_mday
birth = '2000/1/1'
list = birth.split('/')
for i in range(len(list)):
list[i] = int (list[i])
y = (year-list[0]-1)*365
#leap year
for j in (list[0],year):
if (j %4==0 and j%100!=0) or j%400==0:
y = y +1
#出生那年是闰年,但是生在2月以后,这一年的应该不算
if (list[0] %4==0 and list[0]%100!=0) or list[0]%400==0:
if list[1] > 2 :
y = y -1
#2017年非闰年,不需要考虑结束这年的闰月情况,否则也应作处理
m= 0
for i in range(1,mouth):
m = m +daylist[i]
sum1 = m+ day
m2 = 0
for j in range(1,list[1]):
m2 = m2 +daylist[j]
sum2 = m2 +list[2]
sum = y +sum1 +365-sum2
print sum
3)
# -*- coding: utf-8 -*-
import time
daylist=[31,28,31,30,31,30,31,31,30,31,30,31]
birth = '1994/9/23'
list1 = birth.split('/')
for i in range(len(list1)):
list1[i] = int (list1[i])
list2 = []
list2.append(time.localtime().tm_year)
list2.append(time .localtime().tm_mon)
list2.append(time.localtime().tm_mday)
# list1>list2,返回两个年份间差的天数,考虑了闰年情况,补全了上题未考虑完整部分
def compare(list1, list2):
y = 0
sum = 0
if list1[0] > list2[0]:
# 下一年是闰年,且度过了2月
if leapyear(list1[0]):
if list1[1] > 2:
y = y + 1
# 今年是闰年,且没过2月
if leapyear(list2[0]):
if list2[1] <= 2:
y = y + 1
m = 0
for i in range(1, list1[1]):
m = m + daylist[i]
sum1 = m + list1[2]
m2 = 0
for j in range(1, list2[1]):
m2 = m2 + daylist[j]
sum2 = m2 + list2[2]
sum = y + sum1 + 365 - sum2
return sum
if list1[0] == list2[0]:
m = 0
for i in range(1, list1[1]):
m = m + daylist[i]
sum1 = m + list1[2]
m2 = 0
for j in range(1, list2[1]):
m2 = m2 + daylist[j]
sum2 = m2 + list2[2]
sum = sum1 - sum2
# 今年是闰年
if leapyear(list1[0]) and list2[1] <= 2:
sum = sum + 1
return sum
#判断闰年
def leapyear(year):
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
return True
else:
return False
#生日在9月,现在已经>9月了
if list2[1]>list1[1]:
list1[0] = list2[0]+1
print compare(list1,list2)
#现在是9月
elif list2[1]==list1[1]:
#现在过了23日了,得等明年生日
if list2[2]>=list1[2]:
list1[0] = list2[0]+1
print compare(list1,list2)
#还未过今年生日
else:
list1[0]=list2[0]
print compare(list1,list2)
#未到该月,可以过今年的生日
else:
list1[0]=list2[0]
print compare(list1,list2)
16.
引入numpy包,扩充矩阵处理
https://sourceforge.net/projects/numpy/files/NumPy/1.9.2/
from numpy import *
N = mat([1,2,3])
M = mat([4,5,6])
print N+M
print N*M.T
17.
def mypop(list):
list = list[:-1]
return list
if __name__ == '__main__':
list = [1,2,3,4,5]
print mypop(list)
18.
list1 = [1,2,3]
list2 = [4,5,6]
print zip(list1,list2)
结果返回配对元素的元组的list
[(1, 4), (2, 5), (3, 6)]
19.
处理行和列最后剩下的数的打印的时候函数不一样。
def makehang(number,x):
sum = len(number)
y = sum/x
# print x,y
de = sum - x*y
# print de
for i in range(x):
for j in range(y):
print number[j+i*y],
print ' ',
if i < x-1:
print '\n'
#如果是最后一行了,则打印剩下的数
else:
k = 1
while k <= de:
print number[j + i * y + k]
k = k + 1
def makelie(number,y):
sum = len(number)
x = sum/y
de = sum - x*y
# print de
for i in range(x):
for j in range(y):
print number[j+i*y],
print ' ',
print '\n'
#打印剩余的数
k = 1
while k <= de :
for z in range(y):
print ' ',
print number[j+i*y+k]
k = k+1
if __name__ == '__main__':
index = raw_input('c or s\n')
number = list(raw_input('input number :\n'))
print number
#需要按行输出
if index == 'c':
x = int(raw_input('hang:\n'))
makehang(number,x)
#按列输出
else:
y = int(raw_input('lie:\n'))
makelie(number,y)