未解决问题:
2004用字典做
已解决.3.16
今天快被这系统搞疯了,到现在才弄好,真的是有好多要学的啊,出了一点问题就没撤,在网上找了一堆方法,都试个遍,结果把系统搞崩溃了,真是要命,虽然应该把崩溃和解决的步骤重新回味一下写出来,但是……我都不知道怎么弄的。唉……
暂停廖的教程学习,开始实践,将acmcoder里的练习题用python实现
习题来源:http://acm.acmcoder.com/listChineseproblem.php
2001 计算两点间距离
#encoding:utf8
##计算两点间距离
import math
def distance((x1,y1),(x2,y2)):
return math.sqrt((x1-x2)**2+(y1-y2)**2)
print distance((2,3),(5,7))
2002 计算球体积
#encoding:utf8
##计算球体积
import math
def ballvolum(r):
while r>=0:
return 4.0/3*math.pi*r**3
print ballvolum(1)
print ballvolum(1.5)
2003求绝对值
#encoding:utf8
##求绝对值
#1
abs()
#2
def func(x):
if x>=0:
return x
return -x
print func(-10)
print func(10)
2004 成绩转换
#encoding:utf8
##成绩转换
##1
#我是想通过字典,输入值与字典值做比较,输入值在哪个值里面,相应的输出其对应的键值, 但是还没能理解透字典的用法,不成功,后续再弄3.15下午
#字典倒是弄明白了,但是结果还是有问题3.15晚
def scorechange(x):
dic={'A':range(90,101),'B':range(80,90),'C':range(70,80),'D':range(60,70),'E':range(0,60)}
for i in dic.keys():
if x in dic[i]:
return i
# else: #如果不加这句结果正确,但是题目要求做错误判断,一加上结果就不对了。
# return 'Score is error!'
print scorechange(56)
print scorechange(67)
print scorechange(100)
print scorechange(123)
#以下是为了验证上部分代码哪里出了问题
# x=80
# dic={'A':range(90,101),'B':range(80,90),'C':range(70,80),'D':range(60,70),'E':range(0,60)}
# for i in dic.keys():
# # print i
# # print dic[i]
# if x in dic[i]:
# print i
#1更正3.16
def scorechange(x):
dic={'A':range(90,101),'B':range(80,90),'C':range(70,80),'D':range(60,70),'E':range(0,60)}
for i in dic.keys():
if x in dic[i]:
return i
return 'Score is error!'#原来此处是在if里的,本来想表达的意思是要遍历字典,找到x返回键,没找到返回error,但是如果在if语句里,相当于字典并没有完全遍历,而是只看第一个有没有,没有就返回error,将error提到循环外,循环遍历没有后再输出error
print scorechange(56)
print scorechange(67)
print scorechange(100)
print scorechange(123)
##2
def scorechange(x):
if x in range(90,101):
return 'A'
elif x in range(80,90):
return 'B'
elif x in range(70,80):
return 'C'
elif x in range(60,70):
return 'D'
elif x in range(0,60):
return 'E'
else:
return 'Score is error'
print scorechange(56)
print scorechange(67)
print scorechange(100)
print scorechange(123)
2005第几天
#encoding:utf8
##第几天
def is_leap(x):
if (x%400==0) or ((x%4==0) and (x%100!=0)):
return True
return False
def days(date):
l_str=date.split('/')
l_num=[int(i) for i in l_str] #将输入字符串变为整型
#print l_num
month_day={1:31,2:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
if is_leap(l_num[0]):
month_day[2]=29
#print month_day
if l_num[1]==1:
return l_num[2]
else:
sum=0 #初始化不要放在循环里,要不结果会出现错误
for i in range(1,l_num[1]):
sum=sum+month_day[i]
#print sum
return sum+l_num[2]
print days('1985/1/20')
print days('2006/3/12')
print days('2000/3/12')
print days('2016/3/12')
print days('2100/3/12')
##以下代码是写代码时验证split是否能正确工作
# date='1985/1/20'
# l_str=date.split('/')
# l_num=[int(i) for i in l_str]
# print l_num
2006求奇数乘积
#encoding:utf8
##求奇数的乘积
def odd(x):
if x%2!=0:
return True
else:
return False
def odd_mult(L):
lst=filter(odd,L)
if len(lst)==0: #判断列表是否有奇数
return 'There is no odd in the list.'
else:
lst1=set(lst) #去重
num=1
for i in lst1:
num=num*i
return num
print odd_mult([3,1,2,3])
print odd_mult([4,2,3,4,5])
print odd_mult([2,4,4,6,8])