题目1

1.有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。
现在给一串数字,给出有多少种可能的译码结果。

# -*- coding:utf-8 -*-
#python解法
'''
dp(n):n个字符可能的结果
1.s[i-2]和s[i-1] 两个字符是10----26之间但不包括10和20这两个数时:
eg:判断“567123”的编码方式可以转为判断“56712”+‘3“或者”5671“+”23“的问题。即dp(n)=dp(n-1)+dp(n-2)。
2.s[i-2]和s[i-1] 两个字符10或20这两个数时,只有一种编码方式,比如10------>[“J”], 所以dp[i] = dp[i-2]
3.s[i-2]和s[i-1] 两个字符不在上述两种范围时,比如27,所以dp[i] = dp[i-1]
4.数字”0“对应的编码只能是和其前一个数字组合对应的编码,如果和其前一个字符组合后不存在对应编码,则编码方式为0.
'''
dp = [1,1]
s = raw_input().strip()
if s=='' or s[0]=='0': dp = [0,0]     #此时下面的for不会运行,也不报错
for i in range(2, len(s) + 1):
    if 10 <= int(s[i - 2:i]) <= 26 and s[i - 1] != '0':  # 1
        dp.append(dp[i - 1] + dp[i - 2])
    elif int(s[i - 2:i]) == 10 or int(s[i - 2:i]) == 20:  # 2
        dp.append(dp[i - 2])
    elif s[i - 1] != '0':  # 3
        dp.append(dp[i - 1])
    else:
        dp.append(0)  # 4
print dp[len(s)]

2.电影推荐
代码采用基于用户的协同过滤算法,也就是根据用户喜好来确定与当前用户醉相思的用户,然后再根据醉相思用户的喜好为当前用户进行推荐。
代码采用字典来存放数据,格式为:{用户1:{电影名称1:打分1,电影名称2:打分2,…},用户2:{…}}。

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script fil
"""
from random import randrange

#历史电影打分数据
data={'user'+str(i):{'film'+str(randrange(1,15)):randrange(1,6)
                     for j in range(randrange(3,10))}
      for i in range(10)}

#当前用户打分数据
user= {'film'+str(randrange(1,15)):randrange(1,6) 
       for i in range(5)}

#最相似的用户及其对电影打分情况
#两个用户共同打分的电影最多
#并且所有电影打分差值的平方和最小

similarUser,films=min(data.items(),
                      key=lambda item:(-len(item[1].keys()&user),
                                       sum(((item[1].get(film)-user.get(film))**2
                                            for film in user.keys()&item[1].keys()
                                            ))))


print('known data'.center(50,'='))
for item in data.items():
    print(len(item[1].keys()&user.keys()),
          sum(((item[1].get(film)-user.get(film))**2
               for film in user.keys()&item[1].keys())),
               item,
               sep=':')
print('current user'.center(50,'='))
print(user)
print('most similar user and his films'.center(50,'='))
print(similarUser,films,sep=':')
print('recommended film'.center(50,'='))
#在当前用户没看过的电影中选择打分最高的进行推荐
print(max(films.keys()-user.keys(),key=lambda film:films[film]))

你可能感兴趣的:(python)