澳门新葡萄京官网首页 4

HttpClient调用webApi时注意的小问题

写程序需要,匹配验证:

这段时间,在北京游荡了好几圈,黑了3层皮,做了好几家的笔试题,我将整理分享出来,以供大家求职找工作参考。

HttpClient client = new HttpClient();

xxxx-xx-xx xx:xx

写这篇文章前,发生了这样的一段对话,只是为了撸串的交易

client.BaseAddress = new Uri(thisUrl);

日期和时间的合理性.

澳门新葡萄京官网首页 1

client.GetAsync(“api/xx/xx)时

用正则表达式手工写了个:

撸串的故事

在new Uri的时候:

/^[0-9]{4}-([1-9]|(0[1-9])|(1[0-2]))-([澳门新葡萄京官网首页 ,1-9]|(0[1-9])|([1-2][0-9])|3[0-1])s([1-9]|(0[1-9])|(1[0-9])|(2[0-3])):([1-9]|(0[1-9])|([1-5][0-9]))$/

周末撸串吃什么味的好呢?要好好砍他一顿(阴笑脸)。好了,开始正文下面的内容。

  当thisUrl格式如
实际调用地址是:

省去pear、类或其它模板的麻烦.

第一题 两数的和

  当thisUrl格式如
调用地址就变成了:

Given an array of integers, find two numbers such that they add up to a
specific target number.The function twoSum should return indices of the
two numbers such that they addup to the target, where index1 must be
less than index2. Please note that your returned answers (both index1
and index2) are not zero-based.You may assume that each input would have
exactly one solution.Input: numbers={2, 7, 11, 15}, target=9 Output:
index1=1, index2=2

这个/的蛋疼可想而知。。。

题目解读:

同时一直有个习惯就是在写GetAsync(“api/xx/xx)时的时候习惯写成GetAsync(“/api/xx/xx)老是习惯多写个/但实际返回的结果还是

给定一个数组,找出两个数的和等于给定的目标值,返回两个数的下标
第一个数的下标比第二个数的小
方案唯一:只存在一个解满足和等于target
下标计数不是从0开始
思路一:暴力法
对所有的元素遍历,将满足条件的打印出来。这种方法的复杂度高,适合小数组。图解如下:

主要是无意调API的时候蛋疼的遇到了个这么个问题。。

澳门新葡萄京官网首页 2

实际拼接的方式就是:

这里写图片描述

Uri uri1=new Uri(thisUrl);

试着来用python实现下:

Uri uri2=new Uri(uri1,”xxx”);

# -*- coding: utf-8 -*-
def twoSum(value,target):
    if ((value == None) or (len(value) < 2)):
        return ("zeros or length is too small")
    else:
        lena = len(value)
        for i in range(lena):
            for j in range(i+1,lena):
                if value[i] + value[j] == target:
                    print ("the two number are %d and  %d ,the index are %d and %d " % (value[i],value[j],i,j))

if __name__ == "__main__":
    a = [2,7,6,1]
    target = 9
    print (twoSum(a,target))

具体内部实现下班回家在看看- –

还能不能调整下代码呢?优化代码,减少复杂度呢?我想了想,要是原数组是排好序的该多好啊,那就不容易多了。

思路二 :排序法

澳门新葡萄京官网首页 3

这里写图片描述

嘿嘿,说干就干,来把它实现下。代码如下:

# -*- coding: utf-8 -*-
res = []
def sum_two_1(a,target):
    if (len(a) < 2):
        return (0)
    a1 =sorted(a)
    i=0;j=len(a1)-1;k=0;
    while(i<j):
        if (a1[i]+a1[j] == target):
            k=k+1
            res.append([a1[i],a1[j],a.index(a1[i])+1,a.index(a1[j])+1])
            i = i + 1
            j = j -1
        elif(a1[i]+a1[j] > target):
            j = j -1
        else:
            i = i +1
    return(res)

if __name__ == "__main__":
    a = [1,8,3,5]
    print(sum_two_1(a,int(4)))

好了,就先这两种方案。你看到没?其实这两种方案可以解决多个解的问题哟。不信啊,你撸下代码试试看。

第二题 时间数据处理

澳门新葡萄京官网首页 4

这里写图片描述

题目:以上为百度新闻的⼏几个新闻检索结果,对应的新闻发布时间形式各不不相同,请编程对以上时间数据格式进⾏行行转换处理理,使其输出格式为标准的”yyyy-MM-dd
HH:mm:ss”格式

题目解读:

1、需要处理的数据

  • xx秒前、xx分钟前、xx小时前
  • 统一格式:转换为yyyy-MM-dd HH:mm:ss

2、不一致的数据处理

将xx秒前等数据与xx年xx月xx日 xx:xx数据处理成格式一致的
分析:
1、先判断是否有前字存在,再来判断是秒、分钟、时中哪一种情况,之后将获取的数字(字符格式)转为数值格式,最后使用datetime包,利用当前的时间来反向推出时间。代码如下:

if i[-1] == '前':
    a = i.split("前")[0]
    if a[-1] == '秒':
        b = now - timedelta(seconds=int(a[:-1]))
        data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
    if a[-2:] == '分钟':
        b = now - timedelta(minutes=int(a[:-2]))
        data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
    if a[-2:] == '小时':
        b = now - timedelta(minutes=int(a[:-2]))
        data.append(b.strftime("%Y-%m-%d %H:%M:%S"))

2、做格式转换,将当前的时间格式转为我们预定的格式即可,这里仍是用到datetime包。发现了没有,原数据是没有秒级时间的,所以需要加上去。代码如下:

time_str1 = i + ":00"
time = datetime.strptime(time_str1, '%Y年%m月%d日 %H:%M:%S')
data.append(time.strftime("%Y-%m-%d %H:%M:%S"))

你对两类情况都做了分析,还写了代码,是否可靠呢?要不拉出来跑一跑结果,怎么样?哼,谁怕谁呢?来上代码:

# -*- coding: utf-8 -*-
from datetime import datetime
from datetime import timedelta
def date_deal1(time_str):
    now = datetime.now()
    data = []
    for i in time_str:
        if i[-1] == '前':
            a = i.split("前")[0]
            if a[-1] == '秒':
                b = now - timedelta(seconds = int(a[:-1]))
                data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
            if a[-2:] == '分钟':
                b = now - timedelta(minutes = int(a[:-2]))
                data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
            if a[-2:] == '小时':
                b = now - timedelta(minutes = int(a[:-2]))
                data.append(b.strftime("%Y-%m-%d %H:%M:%S"))
        else:
            time_str1 = i + ":00"
            time = datetime.strptime(time_str1, '%Y年%m月%d日 %H:%M:%S')
            data.append(time.strftime("%Y-%m-%d %H:%M:%S"))
    return data

if __name__ == "__main__":
    time_str = ['2017年07月16日 21:00','6分钟前','20小时前','6秒前']
    print (date_deal1(time_str))

测试结果

[‘2017-07-16 21:00:00’, ‘2017-07-24 17:08:05’, ‘2017-07-24 16:54:05’,
‘2017-07-24 17:13:59’]
你看,是不是很符合要求啊。欢迎指正不足点,谢谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注