python核心编程第二版第六章答案

6.1-string模块中是否有一种字符串方法或者函数可以帮我鉴定下一个字符串是否是另一个大字符串的一部分?
string模块的find内建函数,string.find(str,beg=0,end=len(str)),在beg和end之间查找str字符串。

string模块中index内建函数,string.index(str,beg=0,end=len(str)),类似于find()函数,不过查找不存在会返回一个异常。

index和find函数的相同之处在于,包含要寻找的字符串时,均返回索引,区别在于,找不到要寻找的字符串时,index函数返回一个异常,find函数返回-1.
6.2字符串标识符。修改例6.1的idcheck.py脚本,使之可以检测长度为一的标识符,并且可以识别python关键字。对后一个要求,可以使用keyword模块(特别是keyword.kelist)来辅助。

```bash
import string
import keyword
alphas = string.ascii_letters + '_'
nums = string.digits
alphasnums = alphas + nums
words = keyword.kwlist
#alphas包含所有的26字母大小写和下划线,nums包含0-9的数字,alphasnums包含标识符合法的内容

print('Welcome to the Identifier Checker v1.0')
print('Testees must be at least 2 chars long.')
myInput = input('Identifier to tese')
#用户输入一个标识符

if len(myInput) == 1:
    #当标识符长度为1时,判断其是否是字母或者下划线
    if myInput in alphas:
        print('okay as an identifier')
    else:
        print('''invalid: first symbol must be alphabetic''')
elif len(myInput) > 1:
    # 当标识符长度大于1时,先判断标识符是否属于关键字,然后再判断首字符是否正确,再判断剩余的字符是否正确。
    if myInput in words:
        print('It is a keyword!')
    else:
        if myInput[0] not in alphas:
            print('''invalid: first symbol must be alphabetic''')
        else:
            for otherChar in myInput[1:]:
                if otherChar not in alphasnums:
                    print('''invalid: remaining symbols must be alphanumeric''')
                    break
        print('okay as an identifier')
        #以上条件都不满足,那就打印这是一个标识符

6.3排序(a)输入一串数字,并从大到小排序。
(b)跟a一样,不过要用字典序从大到小排列
```

num = input('your number')
num1 = []
num2 = []
for i in num:
    num1.append(int(i))
    #num1内存储的是数字大小
    num2.append(i)
    #num2内存储的是字符
num1.sort()
num1.reverse()
num2.sort()
num2.reverse()
print(num1)
print(num2)

6.4

number = input('your number list')
numbers = []
numbers.append(number)
sum = 0
for i in numbers:
    sum += int(i)
punjun = sum / len(numbers)
print(punjun)
``

6.5字符串。
(a)更新2.7方案,使得可以每次都正序反序显示一个字符串的字符。

wode = input('please input something')
l = len(wode)
x = 0
while x <= l-1:
    print(wode[x])
    x += 1
for i in wode:
    print(i)
for i in wode[::-1]:
    print(i)

(b)通过扫描来判断2个字符串是否匹配。

num1 = input('please input your number1')
num2 = input('please input your number2')
for i in range(len(num1)):
    if num1[i] == num2[i]:
        print('pipei')
    else:
        print('bupipei')

(c)判断一个字符串是否重现(后面跟前面的一致).附加题:在处理除了严格的回文之外,加入对例如控制符号和空格的支持。

list = [1,1,2,3,6,74]
for i in list:
    if list.count(i) > 1:
        print(str(i)+'出现多次')
    else:
        print(str(i)+'没有重复出现')

6.6字符串。创建一个string.strip()的替代函数:接受一个字符串,去掉它前后的空格

def stringqu():
    x = 0
    num1 = input('''please input a number\n''')
    y = int(len(num1))
    z = y
    for i in range(y):
        #从头开始历遍字符串并且计数,遇到第一个不是空格的字符后返回
        if num1[i] == " ":
            x += 1
        else:
            break
    for j in range(y):
        # 从尾开始历遍字符串并且计数,遇到第一个不是空格的字符后返回
        if num1[-j] == " ":
            z -= 1
        else:
            break
    right_str = num1[x:z]
    print(right_str)
stringqu()

6.7调试。(c)修正b中的问题

num_str = input('Enter a number:')
num_num = int(num_str)
#把输入的数转换成整形数
fac_list = list(range(1,num_num+1))
#创建一个从1到num_num的列表
print('BEFORE: '+'fac_list')
fac_list1 = []
i=0
while i < len(fac_list):
    if num_num % fac_list[i] == 0:
        #当数能够整除i时,将i存储到另一个列表中
        fac_list1.append(fac_list[i])
    i += 1
for j in fac_list1:
    fac_list.remove(j)
    #历遍可以整除数的列表,将这些数从初始列表中一一删除

print(fac_list)

6.8列表。给出一个整型数,返回代表该值的英文,比如输入‘89’返回“eight-nine“附加题:返回”eighty—nine“限定范围在0~1000.
思路:创建4个列表,分别对应1-9的个十百千位的英文写法,然后根据整型数的长度来取值。

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

def time():
    time1 = int(input('please input time number'))
    if time1 < 60:
        #当输入的时间小于60时,返回原值,否则返回相应的小时+分钟数
        print('0'+str(time1))
    else:
        (i,j) = divmod(time1,60)
        print(str(i)+":"+str(j))
time()

6.10字符串。写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转。比如,输入”As“,返回”aS“。

def fanzhuan():
    xiaoxie = 'qwertyuiopasdfghjklzxcvbnm'
    daxie = 'QWERTYUIOPASDFGHJKLZXCVBNM'
    str1 = input('please input your string')
    x = len(str1)
    str2 = []
    str3 = ""
    for i in range(x):
        #对输入字符串中的字符进行反转小大写操作,并且把转换完成的字符存储到另一个列表中
        if str1[i] in xiaoxie:
            str2.append(str1[i].upper())
        elif str1[i] in daxie:
            str2.append(str1[i].lower())
        else:
            str2.append(str1[i])
            #如果输入的不是字母,那就直接存储
    for j in str2:
        #将转换完的字符进行相加整合成一个新的字符串
        str3 += str(j)
    print(str3)

fanzhuan()

6.11转换。
(a)创建一个从整型数到IP地址的转换程序。如下格式:WWW.XXX.YYY.ZZZ
(b)更新你的程序,使之可以逆转换。

暂时没懂什么意思,以后来解答

6.12字符串。


```bash
def findchr(string,char):
    x = 0
    for i in range(len(string)):
        #历遍字符串,如果字符等于所寻字符,那边把索引打印出来
        if string[i] == char:
            print(i)
            x += 1
    if x == 0:
        print('-1')
string = 'dasdsdf'
char = 's'
findchr(string,char)


def rfindchr(string,char):
    x = 0
    for i in range(len(string)):
        # 反向历遍字符串,如果字符等于所寻字符,那边把第一个索引打印出来
        if string[-i] == char:
            print(len(string)-i)
            x = 1
            break
    if x == 0:
        print('-1')

string = 'dasdsdf'
char = 's'
rfindchr(string,char)

def subchr(string,origchar,newchar):
    x = 0
    list = []
    str = string
    for i in range(len(string)):
        #先把字符串中需要寻找的字符的索引添加到一个列表中
        if string[i] == origchar:
            list.append(i)
            x += 1
    if x == 0:
        print('-1')
    for j in list:
        #再将这个列表历遍,把新字符替换进去,由于字符串是不可更改类型,因此需要切片操作
        str = str[:j] + newchar + str[j+1:]
    print(str)
string = 'dasdsdf'
origchar = 's'
newchar = 'a'
subchr(string,origchar,newchar)

6.13字符串string模块包含三个函数,atoi()、atol()、和atof(),他们分别负责把字符串转换成整形、长整形和浮点型数字。从Python1.5起,Python的内建函数int()、long()、float()也可以做同样的事情了,complex()函数可以把字符串转换成复数(然而1.5之前这些函数只能工作于数字之上)。string模块并没有实现一个atoc()函数,那么你来实现一个atoc(),接受单个字符串做参数输入,一个表示复数的字符串,例如‘-1.23+4-5.6j’,返回相应的复数对象。你不能用eval()函数,但可以用complex()函数,而且你只能在如下的限制下使用:complex():complex(real,imag)的real和imag都必须是浮点值。
有点没看懂,以后有时间来解答

6.14
6.15
6.16
复习完线性代数来看
6.17
6.18
6.19

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值