python核心编程习题5-9章

5-3 标准类型运算符. 写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分成绩(A-F)。 A: 90–100 B: 80–89 C: 70–79 D: 60–69 F: <60 

def fun1(num):

	if num<60:
		print('F')
	elif num>=60 and num <70:
		print('D')
	elif num>=70 and num<80:
		print('C')
	elif num>=80 and num<90:
		print('B')
	elif num>=90 and num<=100:
		print('A')
5-6 算术。写一个计算器程序 你的代码可以接受这样的表达式,两个操作数加一个运算符:N1 运算符 N2. 其中 N1 和 N2 为整数或浮点数,运算符可以是+, -, *, /, %, ** 分别表示加法,减法, 乘法, 整数除,取余和幂运算。计算这个表达式的结果,然后显示出来。提示: 可以使用字符串方法 split(),但不可以使用内建函数 eval().

def fun1(strs):

        strs.strip()
        if strs.find('+')>0:
                num1,num2 = strs.split('+')
                return float(num1)+float(num2)
        
        elif strs.find('-')>0:
                num1,num2 = strs.split('-')
                return float(num1)-float(num2)
        elif strs.find('**')>0:
                num1,num2 = strs.split('**')
                return pow(float(num1),int(num2))
        elif strs.find('*')>0:
                num1,num2 = strs.split('*')
                return float(num1)*float(num2)        
        elif strs.find('/')>0:
                num1,num2 = strs.split('/')
                return float(num1)/float(num2)
        elif strs.find('%')>0:
                return int(num1) % int(num2)
        else:
                return 'No Result!'
5-16

def fun1(n1,n2):
        cnt=0
        print(cnt,'     ','$','%.2f' % (cnt),' ',"$%.2f" % n1)
        while(n1-n2>0):
            print(cnt+1,'     ','$%.2f' % n2,' ','$',"%.2f" % (n1-n2))
            n1=n1-n2
            cnt +=1

        print(cnt+1,'     ','$','%.2f' % n1,' ','$',"%.2f" % 0)  
              


if  __name__ == '__main__':
    print('This is a Test script:\n')
    n1=input('Enter opening balance: ')
    n2=input('Enter monthly payment: ')
    print('Pymt#',' ','Paid','   ','Balance')
    print('-'*5,' ','-'*6,''*6,'-'*9)      
    fun1(float(n1),float(n2))
    print('-'*5,'The End','-'*5)

6–8.   列表.给出一个整数值,返回代表该值的英文,比如输入 89 返回"eight-nine"。附加题:能够返回符合英文语法规则的形式

def fun1(nums):
    str1=''
    lis1=[str(i) for i in range(1,10)]
    lisA=['one','two','three','four','five','six','seven','eight','nine']
    lis=list(str(nums))
    for i in lis:
        str1 +=lisA[lis1.index(i)]+'-'


    print('The Result is:\n',str1[:-1])   

6–9.   转换.为练习 5-13 写一个姊妹函数, 接受分钟数, 返回小时数和分钟数. 总时间不变,并且要求小时数尽可能大.  

def fun1(num):
    tmp=num%60
    hh=num//60
    mm=tmp//60
    ss=tmp%60
    print("HH:%d MM:%d SS:%d" %(hh,mm,ss))

6–10.字符串.写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转.比如,输入"Mr.Ed",应该返回"mR.eD"作为输出.
 def fun1(num):
    lis=[]
    lis=list(num)
    print(num)
    for i in range(len(lis)):
        if lis[i].isupper():
            lis[i]=lis[i].lower()
        elif lis[i].islower():
            lis[i]=lis[i].upper()
                
    print(lis)
    num=''.join(lis)
    print(num)

 
6–12.字符串 
(a)创建一个名字为 findchr()的函数,函数声明如下: def findchr(string, char)  findchr()要在字符串 string 中查找字符char,找 到就返回该值的索引,否则返回-1.不能用string.*find()或者 string.*index()函数和方法 

(b)创建另一个叫 rfindchr()的函数,查找字符 char 最后一次出现的位置.它跟 findchr()工作类似,不过它是从字符串的最后开始向前查找的. 

def findchr(string,char):
   for i in zip(string,char.zfill(len(string))):
       print(list(i))

   lis=[]     
   i1=string.count(char) 
   print(i1)
   if i1>0:
       lis=[i for i in string.split(char)]
       print(lis)
       print(lis.index(''))

def rfindchr(string,char):
   for i in zip(string,char.zfill(len(string))):
       print(list(i))

   lis=[]     
   i1=string.count(char) 
   print(i1)
   if i1>0:
       lis=[i for i in string.replace(char,'*')]
       print(lis)

6–13.字符串.string 模块包含三个函数,atoi(),atol(),和 atof(),它们分别负责把字符串转换成整数,长整型,和浮点型数字.从 Python1.5 起,Python 的内建函数 int(),long(),float()也可以做相同的事了, complex()函数可以把字符串转换成复数.(然而 1,5 之前,这些转换函数只能工作于数字之上) 
 def atoc(strs):
   if strs.rindex('-')>0:
      real = ''.join(list(strs)[:strs.rindex('-')] )
      img = ''.join(list(strs)[strs.rindex('-')+1:])
   else:
       real = ''.join(list(strs)[:strs.rindex('+')] )
       img = ''.join(list(strs)[strs.rindex('+')+1:])
       
   
   print(real)
   print(img)
   print(complex(float(real),float(img.strip('j'))))
         
if __name__ == '__main__':
          print('-'*5,'The Start','-'*5)
          atoc('-1.23e+4-5.67j')         

6–17.方法.实现一个叫 myPop()的函数,功能类似于列表的 pop()方法,用一个列表作为输入,移除列表的最新一个元素,并返回它. 
def myPop(lis):
   print(lis) 
   lis=lis[:-1]
   print(lis)
   return lis 
7–3.   字典和列表的方法。 (a) 创建一个字典,并把这个字典中的键按照字母顺序显示出来。 (b) 现在根据已按照字母顺序排序好的键,显示出这个字典中的键和值。
#7-3-(a)
  d3={'b':5,'g':5,'z':66}
    for k in sorted(d3.keys()):
        print(k,':',d3[k]) 

#7-3-(b)
 def fun1():
    lis1=['a','b','c']
    lis2=[1,2,3]
    fdict=dict(zip(lis1,lis2))
    lis1=['a','b','c']
    lis2=[1,2,3]
    fdict=dict(zip(lis1,lis2))
    print(fdict)

#8-3
>>>[i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [i for i in range(20) if i%3==0]
[0, 3, 6, 9, 12, 15, 18]
>>> [i for i in range(1,20) if i%3==0]
[3, 6, 9, 12, 15, 18]
>>> [i for i in range(-20,870,220)]
[-20, 200, 420, 640, 860]

#8-5
  def getfactors(num):
   lis=[]
   for i in range(1,num+1):
       if (num%i)==0:
           lis.append(i)

   print(lis)

8–7.   全数. 完全数被定义为这样的数字: 它的约数(不包括它自己)之和为它本身. 例如: 6 

的约数是 1, 2, 3, 因为 1 + 2 + 3 = 6 , 所以 6 被认为是一个完全数. 编写一个名为 isperfect() 的函数, 它接受一个整数作为参数, 如果这个数字是完全数, 返回1 ; 否则返回 0 .

def isperfect(num):
    lis2=[]
    for i in range(1,num+1):
        if num%i==0:
            lis2.append(i)
        else:
            continue
    print('the result','-'*5) 
    print(lis2[:-1])
    if sum(lis2[:-1])==num:
        return 1

    return 0

#8-11
 def fun1():
    icnt=0
    iready=0
    dict1={}
    print('Enter total number of names: 5')
    while iready<5:       
        strs=input('Please neter name '+str(iready)+':')
        if strs.count(',')==0:
            print('Wrong format... should be Last, First.')
            if icnt>=3:
                break
            else:
                icnt += 1
                print('You have done this %d time(s)' % icnt)
            continue
        dict1.update(dict([strs.strip().split(',')]))
        iready +=1
       
    dict1.update(dict([strs.strip().split(',')]))
    print('The sorted list (by last name) is:')
    for k in sorted(dict1.keys()):
        print(k+',',dict1[k])

9–1.   文件过滤. 显示一个文件的所有行, 忽略以井号( # )开头的行. 这个字符被用做 
Python , Perl, Tcl, 等大多脚本文件的注释符号. 
附加题: 处理不是第一个字符开头的注释.

#9-1
def fun1(path):
    fi=open(path,'r')
    for line in fi.readlines():
        line=line.strip('\n')
        if line[0].startswith('#'):
            continue       
        if line.find('#')>0:
            line=line[:line.find('#')]          
        print(line)
        
    fi.close()

9–2.   文件访问. 提示输入数字 N 和文件 F, 然后显示文件 F 的前 N 行.

#9-2
def fun1(num,path):
    fi=open(path,'r')
    lis=[]
    lis=fi.readlines()
    for i in range(num):
        line=lis[i].strip('\n')
        print('%d: ' % (i+1),line)
       
    fi.close()

9–3.   文件信息. 提示输入一个文件名, 然后显示这个文本文件的总行数. 

def fun1(path):
    fi=open(path,'r')
    lis=[]
    lis=fi.readlines()
    print('Total lines %d: ' % len(lis))
    fi.close()

9–4.   文件访问. 写一个逐页显示文本文件的 程序. 提示输入一个文件名, 每次显示文本
文件的 25 行, 暂停并向用户提示"按任意键继续.", 按键后继续执行. 

#9-4
import os
def fun1(path):
     
    fi=open(path,'r')
    lis=[]
    cnt=0
    lis=fi.readlines()
    for i in range(len(lis)):
        line=lis[i].strip('\n')
        print('%d: ' % (i),line)
        if i>23 and i%25==0:
            os.system('pause')
            continue
        else:
            pass
    fi.close()




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值