二千多年前希腊的天文学家希巴克斯命名十二星座,它们是水瓶座、双鱼座、白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、魔蜗座。给出一个 CSV文件(PY301-SunSign.csv),内容示例如下:
序号,星座,开始月日,结束月日, Unicode
1,水瓶座,120,218,9810
2,双鱼座,219,320,9811
3,白羊座,321,419,9800
4,金牛座,420,520,9801
5,双子座,521,621,9802
…(略)
以第1行为例,120 表示 1月20日,218 表示 2月18日, 9810是 Unicode 码。
问题 1
( 5 分):在PY301-1.py文件中修改代码,读入CSV文件中数据,获得用户输入。根据用户输入的星座名称,输出此星座的出生日期范围。
参考输入和输出示例格式如下:
请输入星座中文名称(例如,双子座):双子座双子座的生日位于521-621 之间
f=open("py301-sunsign.csv","r")
x=input("请输入星座中文名称(例如,双子座)")
ls = []
for line in f:
ls.append(line.strip('\n').split(','))
for row in ls:
if row[1].count(x)>0:
print("{}的生日位于{}-{}之间".format(x,row[2],row[3]))
f.close()
问题 2
( 10 分):在PY301-2.py文件中修改代码,读入 CSV 文件中数据,获得用户输入。用户键盘输入一组范围是 1-12的整数作为序号,序号间采用空格分隔,以回车结束。屏幕输出这些序号对应的星座的名称、字符编码以及出生日期范围,每个星座的信息、一行。本次屏幕显示完成后,重新回到输入序号的状态。
参考输入和输出示例格式如下:
请输入星座序号(例如,5):5 10
双子座(9802)的生日是5月21日至6月21日之间
天蝎座(9807)的生日是10月24日至 11月22日之间
请输入星座序号(例如,5 ) :
f=open("py301-sunsign.csv","r")
x=input("请输入星座序号(例如,5):")
ls = []
for line in f:
ls.append(line.strip('\n').split(','))
num=x.split()
for i in num:
for row in ls:
if row[0]==i:
if len(row[2])==3:
m1=row[2][0]
d1=row[2][1:3]
else:
m1=row[2][0:2]
d1=row[2][2:4]
if len(row[3])==3:
m2=row[3][0]
d2=row[3][1:3]
else:
m2=row[3][0:2]
d2=row[3][2:4]
print("{}({})的生日是{}月{}日至{}月{}日之间".format(row[1],row[4],m1,d1,m2,d2))
f.close()
问题 3
( 5 分):在问题2的基础上,在 PY301-3.py文件中修改代码,对键盘输入的每个序号做合法性处理。如果输入的数字不不合法,请输出”输入星座编号有误!”,继续输出后续信息,然后重新回到输入序号的状态。
参考输入和输出示例格式如下:
请输入星座序号(例如,5): 5 14 11
双子座(9802)的生日是5月21日至6月21日之间
输入星座序号有误!
射手座(9808)的生日是11月23日至12月21日之间
请输入星座序号(例如,5):
f=open("py301-sunsign.csv",'r')
ls = []
for line in f:
ls.append(line.strip(' \n').split(','))
f.close()
x=input("请输入星座序号(例如,5):")
num=x.strip(' \n').split()
for i in num:
if 0<int(i)<len(ls):#文件中有标题行,所以ls中多一行
for row in ls:
if row[0]==i:
m1=row[2][0] if len(row[2])==3 else row[2][0:2]
d1=row[2][1:3] if len(row[2])==3 else row[2][2:4]
m2=row[3][0] if len(row[2])==3 else row[3][0:2]
d2=row[3][1:3] if len(row[2])==3 else row[3][2:4]
print("{}({})的生日是{}月{}日至{}月{}日之间".format(row[1],row[4],m1,d1,m2,d2))
else:
print("输入星座序号有误!")