[Python]章节习题汇总

1.通过代码实现如下转换:

 二进制转换成十进制:v = “0b1111011”

 print(int('0b1111011',2))

        十进制转换成二进制:v = 18

 print(bin(18))

        八进制转换成十进制:v = “011”

 print(int('011',8))

        十进制转换成八进制:v = 30

 print(oct(30))

        十六进制转换成十进制:v = “0x12”

 print(int('0x12',16))

        十进制转换成十六进制:v = 87

 print(hex(87))

2.请编写一个函数实现将IP地址转换成一个整数。

如 10.3.9.12 转换规则为:

10 00001010

3 00000011

9 00001001

12 00001100

再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?

解:

def func(x):

    lis = x.strip().split('.')

    li = [bin(int(i)) for i in lis]

    li2 = [i.replace('0b',(10-len(i))*'0') for i in li]

 return int(''.join(li2),2)

ret = func('10.3.9.12')

print(ret)

3.问题:编写一个程序,它将找到所有这些数字,可被7整除,但不是5的倍数,2000年至3200年(包括在内)。得到的数字应按逗号分隔的顺序打印在一行上。

提示:考虑使用range(#begin, #end)方法 

解: 

l=[]

for i in range(2000, 3201):

    if (i%7==0) and (i%5!=0):

        l.append(str(i))

print (','.join(l)) 

4.问题:编写一个可以计算给定数的阶乘的程序。结果应该以逗号分隔的顺序打印在一行上。假设向程序提供以下输入:8 则输出为:40320 提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。

解: 

def fact(x):

    if x == 0:

        return 1

    return x * fact(x - 1)

print('请输入一个数字:')

x=int(input())

print (fact(x)) 

5.问题:使用给定的整数n,编写一个程序生成一个包含(i, i*i)的字典,该字典包含1到n之间的整数(两者都包含)。然后程序应该打印字典。 假设向程序提供以下输入:8 则输出为: {1:1,2:4,3:9,4:16,5:25,6:36,,7:49,8:64} 提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。考虑使用dict类型()

解:

print('请输入一个数字:')

n=int(input())

d=dict()

for i in range(1,n+1):

    d[i]=i*i

print(d) 

6.问题:编写一个程序,该程序接受控制台以逗号分隔的数字序列,并生成包含每个数字的列表和元组。假设向程序提供以下输入: 34岁,67年,55岁,33岁,12日,98年 则输出为:['34', '67', '55', '33', '12', '98']                ('34', '67', '55', '33', '12', '98')

提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。方法可以将列表转换为元组

解: 

import re

print('请输入一组数字:')

values=input()

l=values.split(",")

k=re.findall(r'[0-9]+',values)

t=tuple(k)

print (k)

print (t) 

7.问题:定义一个至少有两个方法的类:        getString:从控制台输入获取字符串        printString::打印大写母的字符串。 还请包含简单的测试函数来测试类方法。 提示:使用_init__方法构造一些参数 解决方案: 

class InputOutString(object):

    def __init__(self):

        self.s = ""

    def getString(self):

        print('请输入字符串:')

        self.s = input()

    def printString(self):

        print (self.s.upper())

strObj = InputOutString()

strObj.getString()

strObj.printString() 

8.问题: 编写一个程序,根据给定的公式计算并打印值:。以下是C和H的固定值:C是50。H是30。D是一个变量,它的值应该以逗号分隔的序列输入到程序中。 例子假设程序的输入序列是逗号分隔的:100,150,180, 程序输出为:18,22,24 提示:如果接收到的输出是小数,则应四舍五入到其最近的值(例如,如果接收到的输出是26.0,则应打印为26)。在为问题提供输入数据的情况下,应该假设它是控制台输入。

解决方案: 

#!/usr/bin/env python

import math

c=50

h=30

value = []

print('请输入一组数字:')

items=[x for x in input().split(',')]

for d in items:

    value.append(str(int(round(math.sqrt(2*c*float(d)/h)))))

print (','.join(value)) 

9.问题:编写一个程序,以2位数字,X,Y作为输入,生成一个二维数组。数组的第i行和第j列中的元素值应该是i*j。 注意:i= 0,1 . .,X - 1;    j = 0, 1,­Y-1。 例子假设程序有以下输入:3、5 则程序输出为:[[0,0,0,0,0],[0,1,2,3,4],[0,2,4,6,8]] 提示:注意:如果要为问题提供输入数据,应该假设它是一个控制台输入,以逗号分隔。

解: 

print('请输入两个数字:')

input_str = input()

dimensions=[int(x) for x in input_str.split(',')]

rowNum=dimensions[0]

colNum=dimensions[1]

multilist = [[0 for col in range(colNum)] for row in range(rowNum)]

for row in range(rowNum):

    for col in range(colNum):

        multilist[row][col]= row*col

print (multilist) 

10.问题:编写一个程序,接受逗号分隔的单词序列作为输入,按字母顺序排序后按逗号分隔的序列打印单词。假设向程序提供以下输入: without,hello,bag,world 则输出为: bag,hello,without,world

提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。

解: 

items=[x for x in input().split(',')]

items.sort()

print (','.join(items))

11.问题:编写一个程序,接受一行序列作为输入,并在将句子中的所有字符大写后打印行。 假设向程序提供以下输入: Hello world Practice makes perfect 则输出为: HELLO WORLD PRACTICE MAKES PERFECT

提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。

解: 

lines = []

while True:

    s = input()

    if s:

        lines.append(s.upper())

    else:

        break;

for sentence in lines:

    print(sentence) 

12.问题:编写一个程序,接受一系列空格分隔的单词作为输入,并在删除所有重复的单词并按字母数字排序后打印这些单词。 假设向程序提供以下输入: hello world and practice makes perfect and hello world again 则输出为: again and hello makes perfect practice world

提示:在为问题提供输入数据的情况下,应该假设它是控制台输入。 我们使用set容器自动删除重复的数据,然后使用sort()对数据进行排序。

解: 

print('请输入一组字符串:')

s = input()

words = [word for word in s.split(" ")]

print (" ".join(sorted(list(set(words))))) 

13.问题:编写一个程序,接受一系列逗号分隔的4位二进制数作为输入,然后检查它们是否可被5整除。 可被5整除的数字将以逗号分隔的顺序打印。 例: 0100,0011,1010,1001 那么输出应该是: 1010 注意:假设数据由控制台输入。 

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。 

解: 

value = []

print('请输入逗号分隔的4位二进制数:')

items=[x for x in input().split(',')]

for p in items:

    intp = int(p, 2)

    # print(intp)

    if not intp%5:

        value.append(p)

print (','.join(value)) 

 14.题:编写一个程序,它将找到1000到3000之间的所有这些数字(均包括在内),这样数字的每个数字都是偶数。 获得的数字应以逗号分隔的顺序打印在一行上。 

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

解: 

values = []

for i in range(1000, 3001):

    s = str(i)

    if (int(s[0])%2==0) and (int(s[1])%2==0) and (int(s[2])%2==0) and (int(s[3])%2==0):

        values.append(s)

print (",".join(values)) 

 15.题:编写一个接受句子并计算字母和数字的程序。假设为程序提供了以下输入: Hello world! 123 然后,输出应该是: 字母10 数字3 

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。 

解: 

print('请输入:')

s = input()

d={"DIGITS":0, "LETTERS":0}

for c in s:

    if c.isdigit():

        d["DIGITS"]+=1

    elif c.isalpha():

        d["LETTERS"]+=1

    else:

        pass

print ("LETTERS", d["LETTERS"])

print ("DIGITS", d["DIGITS"]) 

16.题:编写一个接受句子的程序,并计算大写字母和小写字母的数量。 假设为程序提供了以下输入: Hello world! 然后,输出应该是: 大写实例 1 小写实例 9 

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。 

解: 

print('请输入:')

s = input()

d={"UPPER CASE":0, "LOWER CASE":0}

for c in s:

    if c.isupper():

        d["UPPER CASE"]+=1

    elif c.islower():

        d["LOWER CASE"]+=1

    else:

        pass

print ("UPPER CASE", d["UPPER CASE"])

print ("LOWER CASE", d["LOWER CASE"]) 

17.题:编写一个程序,计算a + aa + aaa + aaaa的值,给定的数字作为a的值。假设为程序提供了以下输入: 9     然后,输出应该是: 11106 

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。 

解: 

print('请输入一个数字:')

a = input()

n1 = int( "%s" % a )

n2 = int( "%s%s" % (a,a) )

n3 = int( "%s%s%s" % (a,a,a) )

n4 = int( "%s%s%s%s" % (a,a,a,a) )

print (n1+n2+n3+n4) 

18.题:使用列表推导来对列表中的每个奇数。 该列表由一系列逗号分隔的数字输入。 假设为程序提供了以下输入: 1,2,3,4,5,6,7,8,9 然后,输出应该是: 1,3,5,7,9 

解: 

print("输入:")

values = input()

numbers = [x for x in values.split(",") if int(x)%2!=0]

print (",".join(numbers)) 

19.题:编写一个程序,根据控制台输入的事务日志计算银行帐户的净金额。 事务日志格式如下所示: D 100 W 200 

D表示存款,而W表示提款。 假设为程序提供了以下输入: D 300 D 300 W 200 D 100 然后,输出应该是: 500 

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。 

解: 

netAmount = 0

while True:

    print("请输入:")

    s = input()

    if not s:

        break

    values = s.split(" ")

    operation = values[0]

    amount = int(values[1])

    if operation=="D":

        netAmount+=amount

    elif operation=="W":

        netAmount-=amount

    else:

        pass

print (netAmount) 

20.题:网站要求用户输入用户名和密码进行注册。编写程序以检查用户输入的密码的有效性。 以下是检查密码的标准: 1. [a-z]之间至少有1个字母 2. [0-9]之间至少有1个数字 1. [A-Z]之间至少有一个字母 3. [$#@]中至少有1个字符 4.最短交易密码长度:6 5.交易密码的最大长度:12 您的程序应接受一系列逗号分隔的密码,并将根据上述标准进行检查。将打印符合条件的密码,每个密码用逗号分隔。 例:如果以下密码作为程序的输入: 

ABd1234@1,a F1#,2w3E*,2We3345 然后,程序的输出应该是: 

ABd1234 @ 1 

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。 

解: 

import re

value = []

print("请输入:")

items=[x for x in input().split(',')]

for p in items:

    if len(p)<6 or len(p)>12:

        continue

    else:

        pass

    if not re.search("[a-z]",p):

        continue

    elif not re.search("[0-9]",p):

        continue

    elif not re.search("[A-Z]",p):

        continue

    elif not re.search("[$#@]",p):

        continue

    elif re.search("\s",p):

        continue

    else:

        pass

    value.append(p)

print (",".join(value)) 

21.题:您需要编写一个程序,按升序对(名称,年龄,高度)元组进行排序,其中name是字符串,age和height是数字。 元组由控制台输入。 排序标准是: 1:根据名称排序; 2:然后根据年龄排序; 3:然后按分数排序。 优先级是name> age>得分。 如果给出以下元组作为程序的输入: Tom,19,80 John,20,90 Jony,17,91 Jony,17,93 Json,21,85 然后,程序的输出应该是: [('John','20','90'),('Jony','17','91'),('Jony','17','93'),('Json','21 ','85'),('Tom','19','80')] 

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。我们使用itemgetter来启用多个排序键。 

解: 

from operator import itemgetter, attrgetter

l = []

print("请输入:")

while True:

    s = input()

    if not s:

        break

    l.append(tuple(s.split(",")))

print (sorted(l, key=itemgetter(0,1,2))) 

22.题:使用生成器定义一个类,该生成器可以在给定范围0和n之间迭代可被7整除的数字。 

提示:考虑使用yield。 

解: 

def putNumbers(n):

    i = 0

    while i<n:

        j=i

        i=i+1

        if j%7==0:

            yield j

for i in putNumbers(100):

    print (i) 

23.机器人从原点(0,0)开始在平面中移动。 机器人可以通过给定的步骤向上,向下,向左和向右移动。 机器人运动的痕迹如下所示: UP 5 DOWN 3 LETF 3 RIGHT 2 方向之后的数字是步骤。 请编写一个程序来计算一系列运动和原点之后距当前位置的距离。如果距离是浮点数,则只打印最接近的整数。 例:如果给出以下元组作为程序的输入: UP 5 DOWN 3 LETF 3 RIGHT 2 然后,程序的输出应该是:2 提示:如果输入数据被提供给问题,则应该假定它是控制台输入。 

解:

import math

pos = [0,0]

print("请输入:")

while True:

    s = input()

    if not s:

        break

    movement = s.split(" ")

    direction = movement[0]

    steps = int(movement[1])

    if direction=="UP":

        pos[0]+=steps

    elif direction=="DOWN":

        pos[0]-=steps

    elif direction=="LEFT":

        pos[1]-=steps

    elif direction=="RIGHT":

        pos[1]+=steps

    else:

        pass

print (int(round(math.sqrt(pos[1]**2+pos[0]**2)))) 

24.编写一个程序来计算输入中单词的频率。 按字母顺序对键进行排序后输出。 假设为程序提供了以下输入: 

New to Python or choosing between Python 2 and Python 3? Read Python 2 or Python 3. 

然后,输出应该是: 

2:2 3.:1 3?:1 New:1 Python:5 Read:1 and:1 between:1 choosing:1 or:2 to:1 

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。 

解:

freq = {}   # frequency of words in text

print("请输入:")

line = input()

for word in line.split():

    freq[word] = freq.get(word,0)+1

words = sorted(freq.keys())  #按key值对字典排序

for w in words:

    print ("%s:%d" % (w,freq[w])) 

25.题:写一个可以计算数字平方值的方法 

提示: 使用**运算符 

解:

def square(num):

    return num ** 2

print (square(2))

print (square(3)) 

26.题:Python有许多内置函数,如果您不知道如何使用它,您可以在线阅读文档或查找一些书籍。 但是Python为每个内置函数都有一个内置的文档函数。      请编写一个程序来打印一些Python内置函数文档,例如abs(),int(),raw_input()      并为您自己的功能添加文档      提示:内置文档方法是__doc__ 

解:

print(abs.__doc__)

print(int.__doc__)

print(input.__doc__)

def square(num):

    '''Return the square value of the input number.

    The input number must be integer.

    '''

    return num ** 2

print(square(2))

print(square.__doc__) 

27.题:定义一个类,它具有类参数并具有相同的实例参数。 

提示:定义一个实例参数,需要在__init__方法中添加它。您可以使用构造参数初始化对象,也可以稍后设置该值 

解:

class Person:

    # Define the class parameter "name"

    name = "Person"

    def __init__(self, name=None):

        # self.name is the instance parameter

        self.name = name

jeffrey = Person("Jeffrey")

print("%s name is %s" % (Person.name, jeffrey.name))

nico = Person()

nico.name = "Nico"

print("%s name is %s" % (Person.name, nico.name)) 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值