慕课 哈尔滨工业大学 python入门作业题

第二周编程作业

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)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值