Calculation constellation

原创 2012年03月27日 14:03:32
# -*- coding: cp936 -*-


import os, time, string


def isContainLetters(birthday):
    notrans = string.maketrans('', '')
    letterset = string.letters
    return len(letterset) != len(letterset.translate(notrans, birthday))


def chinese_zodiac(year):
    sets = ['猴', '鸡', '狗', '猪', '鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊']
    return sets[year%12]
    
def constellation(month, day):
    sets = ('摩羯座','水瓶座','双鱼座','白羊座','金牛座','双子座','巨蟹座','狮子座','处女座','天秤座','天蝎座','射手座')
    dates = ((1,20),(2,19),(3,21),(4,21),(5,21),(6,22),(7,23),(8,23),(9,23),(10,23),(11,23),(12,23))
    s = filter(lambda y: y <= (month, day), dates)
    return sets[len(list(s)) % 12]
    
def constellation2(month, day):
    zodiac_map = {  
        '白羊座':[(3, 21), (4, 20)],  
        '金牛座':[(4, 21), (5, 20)],  
        '双子座':[(5, 21), (6, 21)],  
        '巨蟹座':[(6, 22), (7, 22)],  
        '狮子座':[(7, 23), (8, 22)],  
        '处女座':[(8, 23), (9, 22)],  
        '天秤座':[(9, 23), (10, 22)],  
        '天蝎座':[(10, 23), (11, 21)],  
        '射手座':[(11, 23), (12, 22)],  
        '水瓶座':[(1, 20), (2, 18)],  
        '双鱼座':[(2, 19), (3, 20)]  
    }
    
    for c, d in zodiac_map.items():
        if d[0] <= (month, day) <= d[1]:
            return c
        
    if (month, day) >= (12, 23) or (month, day) <= (1, 19):
        return '摩羯座'


    
if __name__ == '__main__':
    mark = 'go'
    while 'exit' != mark:
        while True:
            Birthday = raw_input("Please input your birthday in the form. Year/Month/Day: ")
            if '' == Birthday:
                print('The input value is empty, please resume input! \n')
                continue
            if isContainLetters(Birthday):
                print('The input value is letters, please resume input! \n')
                continue
            if 2 > Birthday.count('/'):
                print('The value of the input of format is wrong, please resume input! \n')
                continue
            
            year = int(Birthday.split('/')[0])
            month = int(Birthday.split('/')[1])
            day = int(Birthday.split('/')[2])
            
            currentTime = time.strftime('%Y-%m-%d', time.localtime(time.time()))
            currentTime2 = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(time.time()))
            currentYear = int(currentTime.split('-')[0])
            currentMonth = int(currentTime.split('-')[1])
            currentDay = int(currentTime.split('-')[2])
            
            if year > currentYear:
                print('The specified year has not yet born, please resume input! \n')
                continue
            if month > 12:
                print('The specified month has not yet born, please resume input! \n')
                continue
            if month > currentMonth and year == currentYear:
                print('The specified month has not yet born, please resume input! \n')
                continue
            if day > currentDay and month == currentMonth and year == currentYear:
                print('The specified day has not yet born, please resume input! \n')
                continue
            
            break
        
        person_zodiac = chinese_zodiac(year)
        person_constellation = constellation2(month, day)
        print('The current time is: %s. \n' % currentTime2)
        print("Your chinese zodiac is: %s, \n and your constellation is: %s ." %(person_zodiac, person_constellation))
        
        mark = raw_input('is exit?')
        

黑马程序员-----------------常用类

常用类 常用类  Object类 它是Java所有类的根类.所以Java的所有对象都拥有Object类的成员.  1.一般方法  boolean equals(Object ...
  • u011021652
  • u011021652
  • 2014年09月19日 21:17
  • 259

3月25日,Calculation,每日20行。

import java.awt.*; import java.awt.event.*; public class Calc1 implements ActionListener { Frame...
  • sinat_37705093
  • sinat_37705093
  • 2017年03月25日 09:06
  • 52

WOJ 1608 Calculation (暴力搜索/动态规划)

题意: n个整数(n 输入: 第一行是T,代表测试数量。 接下来有T组数据,每组的第一行是n,第二行是n个数(0 输出: 对于每一组数据,输出最多可以分成多少个可以计算出S的部分。 样例:...
  • u012891242
  • u012891242
  • 2016年04月13日 19:43
  • 317

G - Ternary Calculation(运算符优先级问题)

考虑优先级问题,才两个运算符,可以的 #include #include int main(){ int a,b,c,T,i,j,k,sum; char ss1[10],ss2[10...
  • haha294182852
  • haha294182852
  • 2017年08月09日 15:37
  • 63

TOJ 3774. Calculation (栈操作计算表达式)

就是给你一个表达式,有(+——*
  • u013652219
  • u013652219
  • 2014年07月30日 20:38
  • 608

Calculation 2-欧拉函数的运用

Calculation 2 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I6...
  • qq_18661257
  • qq_18661257
  • 2015年07月28日 08:43
  • 840

Linux内核配置(17)

[] NSA SELinux Support NSA SELinux支持 美国国家安全局(NSA)开发的安全增强Linux(SELinux) 需要一个规则选项和一个已标识的文件系统。 可以获取规...
  • Syshlang
  • Syshlang
  • 2014年10月08日 15:39
  • 747

【Matlab】1. Matlab效率提升——调用C语言编写的函数 (mex,matlab C API)

我在计算VIX的时候,使用的是 TS 的分钟线,我的基本思路是把数据保存到本地,然后用C#计算出数据,生成mat文件,供以后使用。 由于TS使用Cell作为数据保存的载体,所以,我需要把cell写入为...
  • huiwuhuiwu
  • huiwuhuiwu
  • 2015年11月05日 13:46
  • 1547

HDU2837 Calculation 指数循环节 欧拉函数+快速幂

快期末了要复习,但是做数论需要时间来累积,所以保持每天做做题目 依旧是这个公式的应用,关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明】【指数循环节】...
  • u010682557
  • u010682557
  • 2013年12月10日 13:22
  • 956

第五届华中区程序设计邀请赛 网络赛 Calculation A 【前缀和】

链接:http://acm.whu.edu.cn/land/problem/detail?problem_id=1603 题意:给你n个数,要你取其中m个数求出两两相减绝对值的和,求这些和的最小值。 ...
  • u012483216
  • u012483216
  • 2016年04月10日 16:08
  • 200
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Calculation constellation
举报原因:
原因补充:

(最多只允许输入30个字)