python学习--小练习题(二)

阶段性总结2

20180223
1.求0—7所能组成的奇数个数。
程序分析:
组成1位数是4个。
组成2位数是7*4个。
组成3位数是7*8*4个。
组成4位数是7*8*8*4个。
......
try:
number = int(raw_input("please input a number 1~7:"))
except:
print "error occur"
if number ==1:
print "4"
else:
print eval((str(4)+"*"+str(7)+"*"+"*".join([str(8)]*(number-2))).strip("*"))

2.某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
try:
number = raw_input("please input 4 numbers :")
except:
print "error occur"
newnum=[]
for i in number:
j = (int(i)+5)%10
newnum.append(j)
print newnum
newnum[0],newnum[3]=newnum[3],newnum[0]
newnum[1],newnum[2]=newnum[2],newnum[1]
print newnum

3.计算一个四乘四矩阵的所有元素的和,以及对角线之和
a =[
[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16],
]
sum=0
sum2=0
for i in a:
for j in i:
sum=sum+j
print "sum",sum

for i in range(0,len(a)):
sum2+=a[i][i]
print "sum2",sum2

20180224
1.输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
listnum=[]
while 1:
try:
num = raw_input("please input a num:")
if num.strip() =='stop':
break
else:
listnum.append(num)
except:
print "input error occur"
print listnum
maxnum = max(listnum)
minnum = min(listnum)
maxindex = listnum.index(maxnum)
minindex = listnum.index(minnum)
listnum[0],listnum[maxindex]=listnum[maxindex],listnum[0]
listnum[-1],listnum[minindex]=listnum[minindex],listnum[-1]
print listnum
2.有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
listnum =[1,2,3,4,5,6]
m =2
lastnum=listnum[-m:]
print lastnum
frontnum = listnum[0:-m]
print frontnum
print lastnum+frontnum

3:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
程序分析:学会分解出每一位数。
num=raw_input("please input a number")
if len(num)>5:
print "len num is too long"
else:
print len(num)
print num[::-1]

4.请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
weekday={"m":"monday","tu":"tuesday","w":"wensday","th":"thursday","f":"friday","sa":"saturday","su":"sunday"}
input_letter=raw_input("please input a day")
if weekday.has_key(input_letter):
print weekday[input_letter]
else:
input_second=raw_input("please input a day second letter")
inputall =input_letter+input_second
if weekday.has_key(input_letter):
print weekday[inputall]
else:
print "you input wrong"


5.输入一行字符,判断有多少数字,多少字母,多少空格,多少其他字符
inputstr=raw_input("please input a sentence")
letter_num=0
digit_num=0
space_num=0
other_num=0
for i in inputstr:
if i.isalpha():
letter_num+=1
elif i.isdigit():
digit_num+=1
elif i.isspace():
space_num+=1
else:
other_num+=1
print u"共有字母:",letter_num
print u"共有数字:",digit_num
print u"共有空格:",space_num
print u"共有其他字符:",other_num

print u"共有字母:",letter_num
print u"共有数字:",digit_num
print u"共有空格:",space_num
print u"共有其他字符:",other_num


6.输入a, n result = a+aa+aaa
a = raw_input("please input a")
n= int(raw_input("please input n"))
print "+".join([a*i for i in range(1,n+1)])

方法2:
a=int(raw_input("input a value:"))
times=int(raw_input("input count times:"))
sum=a
b=a
for i in range(times-1):
    sum=a*10+a%10+sum
    a=a*10+a

20180225
1.有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
num=[1,2,3,4]
result=[]
for i in num:
for j in num:
for z in num:
if i!=j and i!=z and j!=z:
newnum=str(i)+str(j)+str(z)
result.append(newnum)

print result

2.题目:输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
x,y,z = raw_input("please input 3 nums:a,b,c").split(",")
if x>y:
x,y=y,x
if x>z:
x,z=z,x
if y>z:
y,z=z,y
print x,y,z

3.做个抽奖程序,可以输入一个人的名字和抽奖号,然后随机抽取存在的抽奖号,程序可以指定抽取次数,抽取后显示抽奖号和名字,全部抽取完成后输出抽奖的总结果
import random
#输入一个抽奖池~~~~
peopledict={}
while 1:
try:
name,num = raw_input("please input name and num,split,").split(",")
peopledict[num]=name
except:
break
print peopledict

#抽奖结果
resultdict={}
#请输入抽奖次数
try:
num = int(raw_input("please input num:"))
except:
print "input error"

#进行抽奖啦啦啦
while num>0:
result = random.choice(peopledict.keys())
resultdict[result]=peopledict[result]
#防止一个恶心的人被连续中奖两次!!!
del peopledict[result]
num-=1

print resultdict.values()
4.将一个句子中的所有数字和标点符号删除掉
s="i am a gitl 123,@#$"
result=''
for i in s:
if i in [1,2,3,4,5,6,7,8,9,",","!","."]:
continue
else:
result+=i

print result

2018.2.26
1.有一个长度是101的数组,存在1~100的数字,有一个是重复的,拿重复的找出来
import random
a=range(100)
random_num = random.randint(0,99)
a.insert(random_num,random_num)
print random_num
number = [i for i in a if a.count(i)==2]
print number[0]
---------------------------------------------------------------------------------------------------------------------------
2.2个长度相同的list,一个里面的做字典的key,另一个做value,请写个函数实现
a=[1,"2",[3,4],(5,6),{7:8}]
b=[0,1,2,3]
d={}
for i in range(len(a)):
if not isinstance(a[i],(int,float,complex,long,str,unicode,tuple)):
continue
else:
d[a[i]]=b[i]

print d
---------------------------------------------------------------------------------------------------------------------------
a=[1,"2",[3,4],(5,6),{7:8}]
b=[0,1,2,3]
d={}
for i in range(len(a)):
    if not isinstance(a[i],(int,float,complex,long,str,unicode,tuple)):
        continue
    else:
        d[a[i]]=b[0]
        del b[0]

print d

3.统计一个字符串中每个字母累积出现的字母个数
统计一个字符串中每一个字母一共累计出现的次数。
思路:
"aabbaabbccddee"  a4  b4 c2
遍历:没有记过数,则值为1,记过数+1
k,v
d.has_key
----------------------------------------------------------------------------------------------
#coding=utf-8
a="aabbaabbccddee"
dict={}
for i in a:
if dict.has_key(i):
dict[i]+=1
else:
dict[i]=1
print dict

20180227
1.有一个长度为101的数组,存在1-100的数字,有一个是重复的,把重复的找出来
import random
listnum=[]
for i in range(0,101):
listnum.append(i)
#print listnum
a =random.randint(1,100)
listnum.append(a)
result =[i for i in listnum if listnum.count(i)==2]
print result[0]

2.2个长度相同的list,一个里面的作字典的key,另一个做value,请写个函数实现
a=["a","b","c",1,(3,4)]
b=[1,2,3,4,5]
dictnum={}
for i in range(len(a)):
if not isinstance(a[i],(int,float,complex,long,str,unicode,tuple)):
continue
else:
dictnum[a[i]]=b[i]
print dictnum

3.将一个多重嵌套的列表的元素进行互换,存到另一个同等维度的嵌套列表中,例如:[[1,2,3],[4,5,6]]互换后变成[[1,4],[2,5],[3,6]]

a=[[1,2,3],[4,5,6]]
print [[j[i] for j in a] for i in range(3)]

猜你喜欢

转载自blog.csdn.net/qq_30758629/article/details/79399086