第二周编程作业
2.题目内容:
接收用户输入的一个秒数(非负整数),折合成小时、分钟和秒输出。
输入格式:
一个非负整数
输出格式:
将小时、分钟、秒输出到一行,中间使用空格分隔。
输入样例:
70000
输出样例:
19 26 40
number=int(input('please input a number:'))
if number>0:
hour=int(number/3600)
minute=int((number-hour*3600)/60)
second=int(number-hour*3600-minute*60)
print(hour,minute,second)
else:
print('please input positive number')
第三周编程作业
1.题目内容:
如果列出10 以内自然数中3 或5 的倍数,则包括3,5,6,9。那么这些数字的和为23。要求
计算得出任意正整数n 以内中3 或5 的倍数的自然数之和。
输入格式:
一个正整数n。
输出格式:
n 以内中3 或5 的倍数的自然数之和。
输入样例:
10
输出样例:
23
n=int(input('please enter an number:'))
i=1
s=0
for i in range(1,n):
if i%3==0 or i%5==0:
s+=i
i+=1
else:
s+=0
i+=1
print(s)
2.题目内容:
10 以内的素数2,3,5,7 的和为17。要求计算得出任意正整数n 以内的所有素数的和。
输入格式:
一个正整数n。
输出格式:
n 以内的所有素数的和。
输入样例:
10
输出样例:
17
n=int(input('please enter an number:'))
i=2
s=0
x=2
while x <n:
for i in range(2,x):
if x%i==0:
break
else:
s+=x
x+=1
print(s)
3.题目内容:
根据下列信息计算在1901 年1 月1 日至2000 年12 月31 日间共有多少个星期天落在每月
的第一天上?
a) 1900.1.1 是星期一
b) 1 月,3 月,5 月,7 月,8 月,10 月和12 月是31 天
c) 4 月,6 月,9 月和11 月是30 天
d) 2 月是28 天,在闰年是29 天
e) 公元年数能被4 整除且又不能被100 整除是闰年
f) 能直接被400 整除也是闰年
输出格式:
一个正整数
daySum=1
count=0
for year in range(1900,2001):
for month in range(1,13):
if month==1 or month==3 or month==5 or month==7 or month==8 or month==10 or month==12:
day=31
elif month==4 or month==6 or month==9 or month==11:
day=30
elif month==2:
if(year%400==0)or(year%4==0 and year%100==0):
day=29
else:
day=28
daySum+=day
if daySum%7==0 and year>1900:
count+=1
print (count)
4.题目内容:
数字197 可以被称为循环素数,因为197 的三个数位循环移位后的数字:197,971,719 均
为素数。100 以内这样的数字包括13 个,2,3,5,7,11,13,17,31,37,71,73,79,97。要求任意
正整数n 以内一共有多少个这样的循环素数。
输入格式:
一个正整数n。
输出格式:
n 以内循环素数的数目。
输入样例:
100
输出样例:
13
def shift(x,k): #循环数模块
lst=list(str(x))
return int(''.join(lst[k:]+lst[:k]))
def f(n):
x=4
count=2
while x<n:
num=0
for j in range(len(str(x))):
a=shift(x,j)
for i in range(2,a):
if a%i==0:
break
else:
num+=1
if num==len(str(x)):
count+=1
#print(x)
x+=1
print(count)
f(100)
第四周编程作业
1.题目内容:
一个斐波那契数列的前10 项为:1, 2, 3, 5, 8, 13, 21, 34, 55, 89,对于一个最大项的值不超
过n 的斐波那契数列,求值为偶数的项的和。
输入格式:
一个正整数n,如100。
输出格式:
值为偶数的项的和,如2 + 8 + 34 = 44。
输入样例:
100
输出样例:
44
a=1
b=1
c=1
sum=0
while c<=100:
if c%2==0:
sum=sum+c
c=a+b
a=b
b=c
print(sum)
2.题目内容:
若已知1800 年1 月1 日为星期3,则对于一个给定的年份和月份,输出这个月的最后一天
是星期几。
输入格式:
两行整数,分别代表年份和月份
输出格式:
星期数,0 代表星期日
输入样例:
2033
12
输出样例:
6
def judg_year(year):
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return True
else:
return False
def is_month(year,month):
if month in (1, 3, 5, 7, 8, 10, 12):
return 31
elif month in (4,6,9,11):
return 30
elif judg_year(year):
return 29
else:
return 28
def year_days(year):
if judg_year(year):
return 366
else:
return 365
def weekday(year,month):
weekday=2
for i in range(1800,year):
weekday=(weekday+year_days(i))%7
for j in range(1,month+1):
weekday=(weekday+is_month(year,j))%7
print(weekday)
weekday(2033,12)
3.题目内容:
如在汉诺塔游戏中,我们希望将塔A 上的n 个盘子,通过塔B 移动到塔C,则对于任意输
入的n,给出移动的步骤。
输入格式:
一个正整数n
输出格式:
移动的步骤
输入样例:
2
输出样例:
Move 1 from A to B
Move 2 from A to C
Move 1 from B to C
def hanoi(n,A,B,C):
if n==1:
print("move disk",n,"from",A,"to",C)
else:
hanoi(n-1,A,C,B)
print("move disk",n,"from",A,"to",C)
hanoi(n-1,B,A,C)
n=int(input('enter:'))
hanoi(n,'A','B','C')
第五周编程作业
1.题目内容:
“Pig Latin”是一个英语儿童文字改写游戏,整个游戏遵从下述规则:
(1). 元音字母是‘a’、‘e’、‘i’、‘o’、‘u’。字母‘y’在不是第一个字母的情况下,也被视作元音字
母。其他字母均为辅音字母。例如,单词“yearly”有三个元音字母(分别为‘e’、‘a’和最后一
个‘y’)和三个辅音字母(第一个‘y’、‘r’和‘l’)。
(2). 如果英文单词以元音字母开始,则在单词末尾加入“hay”后得到“Pig Latin”对应单词。例
如,“ask”变为“askhay”,“use”变为“usehay”。
(3). 如果英文单词以‘q’字母开始,并且后面有个字母‘u’,将“qu”移动到单词末尾加入“ay”后
得到“Pig Latin”对应单词。例如,“quiet”变为“ietquay”,“quay”变为“ayquay”。
(4). 如果英文单词以辅音字母开始,所有连续的辅音字母一起移动到单词末尾加入“ay”后得
到“Pig Latin”对应单词。例如,“tomato”变为“omatotay”, “school” 变为“oolschay”,“you” 变
为“ouyay”,“my” 变为“ymay ”,“ssssh” 变为“sssshay”。
(5). 如果英文单词中有大写字母,必须所有字母均转换为小写。
输入格式:
一系列单词,单词之间使用空格分隔。
输出格式:
按照以上规则转化每个单词,单词之间使用空格分隔。
输入样例:
Welcome to the Python world Are you ready
输出样例:
elcomeway otay ethay ythonpay orldway arehay ouyay eadyray
def Pig_Latin(text):
l = text.lower().split() #转成一个一个单词和小写
p = []
for s in l:
if s[0] in 'aeiou':
s = s + 'hay'
elif s[0:2] == 'qu' :
s = s[2:] + 'quay'
else:
for n in range(1,len(s)): #对于剩下的数,如果这一位是元音的话,从这一位开始之前的数往后面移
if s[n] in 'aeiouy':
s = s[n:] + s[0:n]
break
s = s + 'ay'
p.append(s) #把分开的单词合在一起,合成n个字符串组
print(' '.join(p)) #合成一个字符串组,中间用空格隔开
Pig_Latin('Welcome to the Python World Are you ready')
2.题目内容:
依次判断一系列给定的字符串是否为合法的Python 标识符。
输入格式:
一系列字符串,每个字符串占一行。
输出格式:
判断每行字符串是否为合法的Python 标示符,如果合法则输出True,否则输出False。
输入样例:
abc
_def
21gh
输出样例:
True
True
False
import string
import keyword
def isIdentifier(text):
l = text.split()
for s in l:
if s not in keyword.kwlist: #字符串不能是关键字
if s[0] in (letter+'_'):#首字符必须是字母或者下划线
for i in s[1:]:
if i not in (letter+digits+'_'):
print(False)
else:
print(True)
else:
print(False)
else:
print(False)
#生成所有数字和字母的组合
letter = string.ascii_letters
digits = string.digits
isIdentifier('abc _edf 21gh')
3.题目内容:
依次计算一系列给定字符串的字母值,字母值为字符串中每个字母对应的编号值(A 对应1,
B 对应2,以此类推,不区分大小写字母,非字母字符对应的值为0)的总和。例如,Colin
的字母值为3 + 15 + 12 + 9 + 14 = 53
输入格式:
一系列字符串,每个字符串占一行。
输出格式:
计算并输出每行字符串的字母值。
输入样例:
Colin
ABC
输出样例:
53
6
import string
def getnumber(text):
l = text.lower().split()
for s in l:
n=0
for i in s[:]:
a=ord(i)
a=(a-96)
n+=a
print(n)
letter = string.ascii_letters
getnumber('Colin ABC')
第六周编程作业
1.题目内容:
定义一个prime() 函数求整数n 以内(不包括n)的所有素数(1 不是素数),并返回一
个按照升序排列的素数列表。使用递归来实现一个二分查找算法函数bi_search(),该函数
实现检索任意一个整数在prime() 函数生成的素数列表中位置(索引)的功能,并返回该
位置的索引值,若该数不存在则返回-1。
输入格式:
第一行为正整数n
接下来若干行为待查找的数字,每行输入一个数字
输出格式:
每行输出相应的待查找数字的索引值
输入样例:
10
2
4
6
7
输出样例:
0
-1
-1
3
def prime(x):
n=2
b=[]
while n<x:
for i in range(2,n):
if n%i==0:
break
else:
b.append(n)
n+=1
return b
def bi_search(primes,low,high,n): #递归算法实现
#low = 0
#high = len(primes)-1
mid = int((low + high)/2)
if low <= high:
if n == primes[mid]:
return mid
elif n > primes[mid]:
return bi_search(primes,mid+1,high,n)
else:
return bi_search(primes,low,mid-1,n)
else:
return -1
search = [2,4,6,7]
for n in search:
print( bi_search(prime(10),0,len(prime(10))-1,n))
2.题目内容:
帕斯卡三角形,又称杨辉三角形是二项式系数在三角形中的一种几何排列。帕斯卡三角形通
常从第0 行开始枚举,并且每一行的数字是上一行相邻两个数字的和。在第0 行只写一个
数字1,然后构造下一行的元素。将上一行中数字左侧上方和右侧上方的数值相加。如果左
侧上方或者右侧上方的数字不存在,用0 替代。下面给出6 行的帕斯卡三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
编写程序,输入帕斯卡三角形的高度n,然后生成和上面例子一样风格的三角形。
输入格式:
一个正整数n
输出格式:
相应高度的帕斯卡三角形,两个数字之间有一个空格
输入样例:
6
输出样例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
b=[]
for i in range(10):
if i == 0 :
print([1])
else:
b=[1]+[b[i]+b[i+1] for i in range(len(b)-1)]+[1]
print(b)