「学习笔记」3.15代码学习

未解决问题:
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])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值