python练习代码(第八章函数)

ch8.1:将1~p之间奇数顺序累加存入n中,直到其和首次等于或大于q为止或1~p之间所有奇数参与累加为止。程序输入p,q的值,输出n的值、参与累加的奇数个数,以及参与运算的最大的那个奇数(分别占一行)。

p=int(input())
q=int(input())
n=[]
count=0
def fun(p,q,count):
    for i in range(1,p+1):
        if sum(n) >= q:
            return n,sum(n), count
        elif i%2==1:
            n.append(i)
            count=count+1
    return n, sum(n), count
nn,s,countt=fun(p,q,count)
print(s)
print(countt)
print(max(nn))```

ch8.2:在屏幕上显示杨辉三角形

num=int(input())
#杨辉三角计算有技巧:原理是本行相邻两个元素的和是下一行在这连个元素中间位置元素的值
#其实是本行元素的错位相加;可以利用zip函数将数组前后各错位组成元组。如:12345,变成012345和123450,下一行变为1,3,5,
def triangles():
    a = [1]
    while True:
        yield a
        a = [sum(i) for i in zip([0] + a, a + [0])]
n = 0
for t in triangles():
    for h in t:
        print("%4d"%h,end='')
    print('\n')
    n = n + 1
    if n == num+1:
        break

ch8、3:有一个定义在自然数上的函数 f(x) 定义如下:
若 x <5 , 则 f(x) = x;
若 5<=x<15, 则 f(x) = x+6;
若 x>=15, 则 f(x) = x-6。
试编写该函数,输入x值,返回相应的f(x)值。
【输入形式】输入的一行表示自然数x。
【输出形式】输出的一行表示计算结果f(x),若输入的数据不合法(如:负整数),输出“illegal input”。
【样例输入】4
【样例输出】4

import sys
x_str=input()
if ('.' in x_str) or (not x_str.isdigit()):
    print("illegal input")
    sys.exit()
x=int(x_str)
def f(x):
    if x<5:
        return x
    elif x>=15:
        return x-6
    else:
        return x+6
print(f(x))

ch8、4:编写函数sofd,该函数计算一个整数n的各位数字之和并返回,如sofd(252)返回9。
说明:sofd函数编写时只需考虑n大于等于0的情况,不用处理负整数的情况。
编写程序,输入一个整数n,调用函数sofd,输出它的各位数字之和。
【输入形式】 一个数字,比如234
【输出形式】数字各位和,比如 9
【样例输入】234
【样例输出】9

num_str=input()
n=len(num_str)
sum_num=[]
num=int(num_str)
def sofd(num):
    for s in range(0,n):
        sum_num.append((num//(10**s))%10)
    return sum(sum_num)
print(sofd(num))

ch8、5:编写与字符串对象的find方法功能相似的函数find(srcString, substring, start, end),作用是在srcString串的下标start到下标end之间的片段中寻找subString串的第一次出现的位置,返回该位置值;如果没找到,返回-1。
编写程序,输入源串和子串,检验find(someString, substring,start,end)是否正确。
【输入形式】按照somestrig,substring,start,end的顺序输入,各成分之间由空格隔开。Somestring和substring均由A/T/C/G四个字母组成。start和end由自然数构成。
【输出形式】当匹配成功时,输出子串在DNA字符串的位置,以子串第一个字母在DNA字符串中匹配位置的下标;当匹配失败时,输出-1。
【样例输入】ATCGGCGCGGCGT CGG 0 10
【样例输出】2
【样例说明】下标从0开始计数

somestr,substr,startstr,endstr=input().split()
startnum=int(startstr)
endnum=int(endstr)
findstr=[]
substrrarray=[]
for k in substr:
    substrrarray.append(k)
#print(substrrarray)
n=len(substr)
def fun(somestr,substr,startnum,endnum):
    for s in range(startnum,endnum-n):
        findstr=[somestr[i] for i in range (s,n+s)]
        #print(findstr)
        if findstr == substrrarray:
            return s
    return -1

print(fun(somestr,substr,startnum,endnum))

ch8、6:编写与字符串对象的find方法功能相似的函数find(srcString, substring, start, end),作用是在srcString串的下标start到下标end之间的片段中寻找subString串的所有出现。如果有多处出现,各下标位置用西文逗号’,'隔开。如果一次都没有出现,则输出"none"。
【输入形式】按照somestrig,substring,start,end的顺序输入,之间由空格隔开。somestring和substring均由A/T/C/G四个字母组成。start和end由自然数构成。
【输出形式】当匹配成功时,输出子串在DNA字符串的所有位置,以子串第一个字母在DNA字符串中匹配位置的下标(从0开始),中间用西文逗号",“隔开;当匹配失败时,输出"none”。
【样例输入】ATGGCTGATGGC TGG 0 11
【样例输出】1,8
【样例输入】ATGGCTGATGGC TTT 0 11
【样例输出】none

import sys
somestr,substr,startstr,endstr=input().split()
startnum=int(startstr)
endnum=int(endstr)
findstr=[]
substrrarray=[]
for k in substr:
    substrrarray.append(k)
num_n=[]
#print(substrrarray)
n=len(substr)
def fun(somestr,substr,startnum,endnum):
    for s in range(startnum,endnum-n+1):
        findstr=[somestr[i] for i in range(s,n+s)]
        if findstr == substrrarray:
            num_n.append(s)
    return num_n
fun(somestr,substr,startnum,endnum)
#print(num_n)
if len(num_n)==0:
    print("none")
    sys.exit()

for f in num_n:
    if f == num_n[len(num_n)-1]:
        print(f)
    else:
        print(f,end=',')

ch8.7:编写程序,输入十进制整数(例如99,172),把它转换为二进制整数。用字符串形式存储二进制整数。输出转换得到的二进制整数字符串。
所谓用字符串形式存储二进制整数,指的是把二进制整数的各个二进制位存作字符,合在一起构成一个字符串。例如,对于二进制整数1101,用字符串形式存储的话,就是"1101",共有四个字符,从左到右依次为字符’1’,‘1’,‘0’和’1’。又如,对于二进制整数100100100,用字符串形式存储的话,就是"100100100",共有9个字符,从左到右依次为字符’1’,‘0’,‘0’,‘1’,‘0’,‘0’,‘1’,‘0’和’0’。
【输入形式】输入一个十进制正整数
【输出形式】输出二进制整数。最高位非0。
【样例输入】140
【样例输出】10001100

num_str=input()
num=int(num_str)
def fun(num):
    ernum=bin(num).replace('0b','')#注意去掉0b
    return ernum
print(fun(num))

ch8.8:编写程序,输入十进制小数(只考虑正数),把它转换为以字符串形式存储的二进制小数,输出该二进制小数字符串。对于转换得到的二进制小数,小数点后最多保留10位。小数点后不足10位,则输出这些位,尾部不补0;小数点后超出10位,则直接舍弃超出部分。
【输入形式】十进制浮点小数
【输出形式】对应输入小数的二进制小数字符串。若整数部分或者小数部分为0,则输出0。比如输入0,则意味着输出0.0 。
【样例输入】1.2
【样例输出】1.0011001100
【样例说明】输入为10进制小数,将该小数转化成二进制后输出。推荐采用字符串来处理生成的二进制数,特别要注意0的处理

n_str,b_str=input().split()
n=int(n_str)
b=int(b_str)
num_str=[]
def itobfun(n,b):
    if n < 0:
        n = -n
        num_str.append('-')
    if b <= 10 and n > 0:
        num_str.append(n%b)
        return itobfun(n//b,b)
    elif b>10 and n > 0:
        s=n % b
        if s == 10:
            num_str.append('a')
        elif s == 11:
            num_str.append('b')
        elif s == 12:
            num_str.append('c')
        elif s == 13:
            num_str.append('d')
        elif s == 14:
            num_str.append('e')
        elif s == 15:
            num_str.append('f')
        elif s == 16:
            num_str.append('g')
        elif s == 17:
            num_str.append('h')
        else:
            num_str.append(s)
        return itobfun(n // b, b)
    elif b == 10:
        num_str.append(n)
    return num_str
num_str=itobfun(n,b)
num_str=num_str[::-1]
if num_str[-1]=='-':
    num_str.insert(0,'-')
    del(num_str[-1])
#print(num_str)
for s in num_str:
    print(s,end='')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值