100道Python练习题,学完掌握Python!

花了一周的时间,整理了100道Python的练习题,如果你是一位初学者,那么这一份练习题将会给你带来极大的帮助,如果你能够完全独立的完成这份练习题,你已经入门的Python了,练习题涵盖Python基础的大部分内容,将分为五篇文章发出来,pdf版本可以在下方链接领取到。第一天1-20题

https://github.com/hellgoddess/PythonGuide/blob/main/python100%E9%A2%98/%E8%8E%B7%E5%8F%96python100%E9%A2%98pdf.md

就不多bb了,直接上干货!

问题1

问题:

编写一个程序,查找所有此类数字,它们可以被7整除,但不能是5的倍数(在2000和3200之间(均包括在内))。获得的数字应以逗号分隔的顺序打印在一行上。

提示:

考虑使用范围(#begin,#end)方法。

我的解决方案:Python 3

  • 使用for循环
l=[]
for i in range(2000, 3201):
    if (i%7==0) and (i%5!=0):
        l.append(str(i))

print ','.join(l)
  • 使用生成器和列表理解
print(*(i for i in range(2000, 3201) if i%7 == 0 and i%5 != 0), sep=",")

问题2

问题:

编写一个程序,可以计算给定数字的阶乘,结果应以逗号分隔的顺序打印在一行上,假设向程序提供了以下输入:8然后,输出应为:40320

提示:

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

我的解决方案:Python 3

  • 使用While循环

    n = int(input()) #input() function takes input as string type
                     #int() converts it to integer type
    fact = 1
    i = 1
    while i <= n:
        fact = fact * i;
        i = i + 1
    print(fact)
    
  • 使用For循环

    n = int(input()) #input() function takes input as string type
                    #int() converts it to integer type
    fact = 1
    for i in range(1,n+1):
        fact = fact * i
    print(fact)
    
  • 使用Lambda函数

    n = int(input())
    def shortFact(x): return 1 if x <= 1 else x*shortFact(x-1)
    print(shortFact(n))
    
while True:
try:
    num = int(input("Enter a number: "))
    break
except ValueError as err:
    print(err)

org = num
fact = 1
while num:
    fact = num * fact
    num = num - 1
print(f'the factorial of {org} is {fact}')

from functools import reduce

def fun(acc, item):
	return acc*item

num = int(input())
print(reduce(fun,range(1, num+1), 1))

问题3

问题:

使用给定的整数n,编写程序以生成包含(i,ixi)的字典,该字典为1到n之间的整数(都包括在内)。然后程序应打印字典。假设向程序提供了以下输入:8\

然后,输出应为:

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}

提示:

如果将输入数据提供给问题,则应假定它是控制台输入。考虑使用dict()

我的解决方案:Python 3:

  • 使用for循环
n = int(input())
ans = {}
for i in range (1,n+1):
    ans[i] = i * i
print(ans)
  • 使用字典理解
n = int(input())
ans={i : i*i for i in range(1,n+1)}
print(ans)
# 演进
try:
    num = int(input("Enter a number: "))
except ValueError as err:
    print(err)

dictio = dict()
for item in range(num+1):
    if item == 0:
        continue
    else:
	dictio[item] = item * item
print(dictio)

num = int(input("Number: "))
print(dict(enumerate([i*i for i in range(1, num+1)], 1)))

这些是第一天解决的问题。对于基本的初学者学习者来说,上述问题非常容易。我在解决方案中展示了一些简单的编码方法。让我们看看第二天如何面对和应对新问题。

问题4

问题:

编写一个程序,该程序从控制台接受一个逗号分隔的数字序列,并生成一个列表和一个包含每个数字的元组。假设向该程序提供了以下输入:

34,67,55,33,12,98

然后,输出应为:

['34', '67', '55', '33', '12', '98']
('34', '67', '55', '33', '12', '98')
lst = input().split(',')  #输入被当作字符串,因为它是字符串,所以它具有内 in
                          # 方法名称split。','内部split函数会在找到任何','的地方进行拆分, 并将输入保存为列表到lst变量中
                       
tpl = tuple(lst)          # tuple方法将列表转换为tuple

print(lst)
print(tpl)
# 一行解决
print(tuple(input("Enter a series of numbers separated by a comma :").split(',')))

问题5

问题:

定义一个至少具有两个方法的类:

  • getString:从控制台输入获取字符串
  • printString:以大写字母打印字符串

还请包括简单的测试功能来测试类方法。

提示:

***使用**init**方法构造一些参数

class IOstring():
    def get_string(self):
        self.s = input()

    def print_string(self):
        print(self.s.upper())

xx = IOstring()
xx.get_string()
xx.print_string()

问题6

问题:

编写一个程序,根据给定的公式计算并打印该值:

Q = [(2 _ C _ D)/ H]的平方根

以下是C和H的固定值:

C为50。H为30。

D是变量,其值应以逗号分隔的顺序输入到您的程序中,例如,让我们假设以下逗号分隔的输入顺序被赋予了程序:

100,150,180

该程序的输出应为:

18,22,24

提示:

如果接收到的输出为十进制形式,则应四舍五入至最接近的值(例如,如果接收到的输出为26.0,则应将其打印为26)。被假定为控制台输入。

from math import sqrt  #导入特定功能,因为使用*导入所有功能
                      #是不好的做法

C,H = 50,30

def calc(D):
    return sqrt((2*C*D)/H)

D = [int(i) for i in input().split(',')]# 在逗号位置#分裂和在列表中设置
D = [int(i) for i in D]    #转换字符串整数
D = [calc(i) for i in D]  # 返回浮点值通过在d每个项目计算方法
D = [round(i) for i in D]# 所有的浮动值是圆形的
D = [str(i) for i in D]   # 所有整数被转换成字符串,以便能够应用加入操作

print(",".join(D))

或者

from math import sqrt

C,H = 50,30

def calc(D):
    return sqrt((2*C*D)/H)

D = input().split(',')                    # 在逗号位置#分裂和设置在列表中
D = [str(round(calc(int(i)))) for i in D]  # 使用理解方法#。它按先前的代码
print(",".join(D))

或者

从 数学 进口 SQRT 
Ç,ħ  =  50,30

def  calc(D):
    返回 sqrt((2 * C * D)/ H)

打印(“” 。加入([ STR(INT(计算值(INT(我))))为 我 在 输入()。分裂('')]))

或者

from math import *  #所有导入的数学函数
Ç,ħ  =  50,30

C,H = 50,30

def calc(D):
    D = int(D)
    return str(int(sqrt((2*C*D)/H)))

D = input().split(',')
D = list(map(calc,D))    #在D上应用calc函数并存储为列表
print(",".join(D))
from math import sqrt
C, H = 50, 30
mylist = input().split(',')
print(*(round(sqrt(2*C*int(D)/H)) for D in mylist), sep=",")
my_list = [int(x) for x in input('').split(',')]
C, H, x = 50, 30, []

for D in my_list:
    Q = ((2*C*D)/H)**(1/2)
    x.append(round(Q))

print(','.join(map(str, x)))

问题7

问题:

_编写一个程序,该程序将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]]

提示:

注意:如果将输入数据提供给问题,则应假定它是以逗号分隔形式的控制台输入。

Python 3

x,y = map(int,input().split(','))
lst = []

for i in range(x):
    tmp = []
    for j in range(y):
        tmp.append(i*j)
    lst.append(tmp)

print(lst)

或者

x,y = map(int,input().split(','))
lst = [[i*j for j in range(y)] for i in range(x)]
print(lst)

问题8

问题:

编写一个程序,该程序接受以逗号分隔的单词序列作为输入,并在按字母顺序对单词进行排序后以逗号分隔的顺序打印这些单词。

假设将以下输入提供给程序:

without,hello,bag,world

然后,输出应为:

bag,hello,without,world

提示:

*如果将输入数据提供给问题,则应假定它是控制台输入。*

我的解决方案:Python 3

items = [x for x in raw_input().split(',')]
items.sort()
print ','.join(items)
def my_func(e):
    return e[0]

my_list = input('Enter a comma separated string: ').split(",")
my_list.sort(key=my_func)
print(",".join(my_list))

问题9

问题:

编写一个接受行序列作为输入的程序,并在使句子中的所有字符都大写之后打印行。

假设将以下输入提供给程序:

Hello world
Practice makes perfect

然后,输出应为:

HELLO WORLD
PRACTICE MAKES PERFECT

提示:

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

我的解决方案:Python 3

lst = []

while True:
    x = input()
    if len(x)==0:
        break
    lst.append(x.upper())

for line in lst:
    print(line)

或者

def user_input():
    while True:
        s = input()
        if not s:
            return
        yield s

for line in map(str.upper, user_input()):
    print(line)

问题10

问题

编写一个程序,该程序接受一系列由空格分隔的单词作为输入,并在删除所有重复的单词并将其按字母数字顺序排序后打印这些单词。

假设将以下输入提供给程序:

hello world and practice makes perfect and hello world again

然后,输出应为:

again and hello makes perfect practice world

提示:

如果将输入数据提供给问题,则应假定它是控制台输入。我们使用set容器自动删除重复的数据,然后使用sorted()对数据进行排序。

我的解决方案:Python 3

word = input().split()

for i in word:
    if word.count(i) > 1:     #count函数返回作为参数
        word.remove(i)       #每次调用仅删除一个元素


word.sort()
print(" ".join(word))

或者

inp_string = input("Enter string: ").split()
out_string = []
for words in inp_string:
    if words not in out_string:
        out_string.append(words)
print(" ".join(sorted(out_string)))

问题11

问题

编写一个程序,该程序接受以逗号分隔的4位二进制数字序列作为输入,然后检查它们是否可被5整除。被5整除的数字将以逗号分隔的顺序打印。

例子:

0100,0011,1010,1001

然后输出应为:

1010

注意:假设数据是通过控制台输入的。

提示:

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

def check(x):                       #转换二进制整数&返回由5零中频整除
    total, pw = 0, 1
    reversed(x)

    for i in x:
        total+=pw * (ord(i) - 48)    #ORD()函数返回ASCII值
        pw*=2
    return total % 5

data = input().split(",")           #输入此处,并在','位置分割
lst = []



for i in data:
    if check(i) == 0:              #如果零发现它是指由零整除并添加到列		lst.append(i)

print(",".join(lst))

或者

def  check(x):                    #如果被5整除,则check函数返回true 
    return  int(x,2)%5  ==  0       #int(x,b)将x作为字符串,将b作为基数,
                                #将其转换为十进制
数据 = 输入()。分割(',')

data  =  list(filter(check(data)))#在filter(func,object)函数中,如果通过'check'函数
print(“,”。join(data)找到True,则从'data'中选取元素。

或者

data = input().split(',')
data = [num for num in data if int(num, 2) % 5 == 0]
print(','.join(data))

问题12

问题:

编写一个程序,查找所有介于1000和3000之间的数字(都包括在内),以使数字的每个数字均为偶数。获得的数字应以逗号分隔的顺序打印在一行上。

提示:

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

我的解决方案:Python 3

lst = []

for i in range(1000,3001):
    flag = 1
    for j in str(i):         #每个整数编号i被转换成字符串
    
        if ord(j)%2 != 0:     #ORD返回ASCII值并且j是i
            flag = 0          
    if flag == 1:
        lst.append(str(i))   #i作为字符串存储在列表中

print(",".join(lst))

或者

def check(element):
    return all(ord(i)%2 == 0 for i in element)  #所有返回true如果所有的数字,i是即使在元件

lst = [str(i) for i in range(1000,3001)]        #创建所有给定数字的列表,其字符串数据类型为
lst = list(filter(check,lst))                   #如果检查条件失败,则过滤器从列表中删除元素
print(",".join(lst))
lst = [str(i) for i in range(1000,3001)]
lst = list(filter(lambda i:all(ord(j)%2 == 0 for j in i), lst))   #使用lambda来在过滤器功能内部定义函数
print(",".join(lst))

问题13

问题:

编写一个接受句子并计算字母和数字数量的程序。

假设将以下输入提供给程序:

hello world! 123

然后,输出应为:

LETTERS 10
DIGITS 3

提示:

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

word = input()
letter,digit = 0,0

for i in word:
    if ('a'<=i and i<='z') or ('A'<=i and i<='Z'):
        letter+=1
    if '0'<=i and i<='9':
        digit+=1

print("LETTERS {0}\nDIGITS {1}".format(letter,digit))

或者

word = input()
letter, digit = 0,0

for i in word:
    if i.isalpha(): #返回true如果字母表
        letter += 1
    elif i.isnumeric(): #返回true如果数字
        digit += 1
print(f"LETTERS {letter}\n{digits}") #两种解决方案均显示两种不同类型的格式化方法

10-13以上所有问题大多是与字符串有关的问题。解决方案的主要部分包括字符串替换函数和理解方法,以更短的形式写下代码。

问题14

问题:

编写一个接受句子的程序,并计算大写字母和小写字母的数量。

假设将以下输入提供给程序:

Hello world!

然后,输出应为:

UPPER CASE 1
LOWER CASE 9

提示:

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

我的解决方案:Python 3

word = input()
upper,lower = 0,0

for i in word:
    if 'a'<=i and i<='z' :
        lower+=1
    if 'A'<=i and i<='Z':
        upper+=1

print("UPPER CASE {0}\nLOWER CASE {1}".format(upper,lower))

或者

word = input()
upper,lower = 0,0

for i in word:
        lower+=i.islower()
        upper+=i.isupper()

print("UPPER CASE {0}\nLOWER CASE {1}".format(upper,lower))

或者

string = input("Enter the sentense")
upper = 0
lower = 0
for x in string:
    if x.isupper() == True:
        upper += 1
    if x.islower() == True:
        lower += 1

print("UPPER CASE: ", upper)
print("LOWER CASE: ", lower)

问题15

问题:

编写一个程序,以给定的数字作为a的值来计算a + aa + aaa + aaaa的值。

假设将以下输入提供给程序:

9

然后,输出应为:

11106

提示:

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

我的解决方案:Python 3

a = input()
total,tmp = 0,str()        # 初始化一个整数和空字符串

for i in range(4):
    tmp+=a               # 串接'a'到'TMP'
    total+=int(tmp)      # 将字符串类型转换为整数类型

print(total)

或者

a = input()
total = int(a) + int(2*a) + int(3*a) + int(4*a)  # N*a=Na, for example  a="23", 2*a="2323",3*a="232323"
print(total)
from functools import reduce
x = input('please enter a digit:')
reduce(lambda x, y: int(x) + int(y), [x*i for i in range(1,5)])

问题16

问题:

使用列表推导对列表中的每个奇数取平方。该列表由逗号分隔的数字序列输入。>假设将以下输入提供给程序:

1,2,3,4,5,6,7,8,9

然后,输出应为:

1,9,25,49,81

提示:

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

lst = [str(int(i)**2) for i in input().split(',') if int(i) % 2]
print(",".join(lst))
seq = input().split(',') 
lst = [int(i) for i in seq]
def flt(i):                                           #定义一个函数
    return i % 2 != 0
result_l = [str(i * i) for i in filter(flt,lst)]      
print(",".join(result_l))

测试用例中有一个错误,并在@dwedigital的帮助下通知并修复了解决方案的问题。我对他表示感谢。

问题17

问题:

编写一个程序,该程序根据来自控制台输入的交易日志来计算银行帐户的净额。事务日志格式如下所示:

D 100
W 200
  • D表示存款,W表示提款。

假设将以下输入提供给程序:

D 300
D 300
W 200
D 100

然后,输出应为:

500

提示:

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

total = 0
while True:
    s = input().split()
    if not s:            # 如果字符串为空则退出
        break
    cm,num = map(str,s)    # 两个输入以cm和num的形式分布在字符串数据类型中

    if cm=='D':
        total+=int(num)
    if cm=='W':
        total-=int(num)

print(total)
lst = []
while True:
  x = input()
  if len(x)==0:
    break
  lst.append(x)

balance = 0
for item in lst:
  if 'D' in item:
    balance += int(item.strip('D '))
  if 'W' in item:
    balance -= int(item.strip('W '))
print(balance)

问题18

网站要求用户输入用户名和密码进行注册。编写程序以检查用户输入的密码是否有效。

以下是检查密码的标准:

  • [az]之间至少1个字母
  • [0-9]之间至少1个数字
  • [AZ]之间至少1个字母
  • [$#@]中的至少1个字符
  • 交易密码的最小长度:6
  • 交易密码的最大长度:12

您的程序应接受逗号分隔的密码序列,并将根据上述条件进行检查。符合条件的密码将被打印,每个密码之间用逗号分隔。

例子

如果输入以下密码作为程序输入:

ABd1234@1,a F1#,2w3E*,2We3345

然后,程序的输出应为:

ABd1234@1

提示:

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

def is_low(x):                  # 如果字符串中有小写字母则返回true
    for i in x:
        if 'a'<=i and i<='z':
            return True
    return  False

def is_up(x):                   
    for i in x:
        if 'A'<= i and i<='Z':
            return True
    return  False

def is_num(x):                  
    for i in x:
        if '0'<=i and i<='9':
            return True
    return  False

def is_other(x):               
    for i in x:
        if i=='$' or i=='#' or i=='@':
            return True
    return False

s = input().split(',')
lst = []

for i in s:
    length = len(i)
    if 6 <= length and length <= 12 and is_low(i) and is_up(i) and is_num(i) and is_other(i):   
        lst.append(i)

print(",".join(lst))

或者

def check(x):
    cnt = (6<=len(x) and len(x)<=12)
    for i in x:
        if i.isupper():
            cnt+=1
            break
    for i in x:
        if i.islower():
            cnt+=1
            break
    for i in x:
        if i.isnumeric():
            cnt+=1
            break
    for i in x:
        if i=='@' or i=='#'or i=='$':
            cnt+=1
            break
    return cnt == 5               

s = input().split(',')
lst = filter(check,s)             
print(",".join(lst))

或者

import  re

s = input().split(',')
lst = []

for i in s:
    cnt = 0
    cnt+=(6<=len(i) and len(i)<=12)
    cnt+=bool(re.search("[a-z]",i))      
    cnt+=bool(re.search("[A-Z]",i))       
    cnt+=bool(re.search("[0-9]",i))      
    cnt+=bool(re.search("[@#$]",i))      
        lst.append(i)

print(",".join(lst))

问题19

问题:

您需要编写一个程序来按升序对(名称,年龄,分数)元组进行排序,其中名称是字符串,年龄和分数是数字。元组由控制台输入。排序标准是:

  • 1:根据名称排序
  • 2:然后根据年龄排序
  • 3:然后按分数排序

优先级是名称>年龄>得分。

如果给出以下元组作为程序的输入:

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启用多个排序键。

lst = []
while True:
    s = input().split(',')
    if not s[0]:                          
        break
    lst.append(tuple(s))

lst.sort(key= lambda x:(x[0],int(x[1]),int(x[2])))
print(lst)

在出现上述问题之前,我什至不知道re(正则表达式)模块及其使用。我什至不知道如何按多个键进行排序。为了以不同的方式解决这些问题,我不得不探索和学习那些语法。re模块中有很多有趣的内容,尽管我很难理解其中的许多内容。

问题20

问题:

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

假设将以下输入提供给程序:

7

然后,输出应为:

0
7
14

提示:

考虑使用类,功能和理解力。

class MyGen():
    def by_seven(self, n):
        for i in range(0, int(n/7) + 1):
            yield i * 7

for i in MyGen().by_seven( int(input('Please enter a number... ')) ):
    print(i)
class Divisible:

    def by_seven(self, n):
        for number in range(1,n + 1):
            if number % 7 == 0: yield number


divisible = Divisible()
generator = divisible.by_seven(int(input("Please insert a number. --> ")))
for number in generator:
    print(number)

近百本作者精选挑选的计算机书籍pdf收集在仓库:https://github.com/hellgoddess/PythonGuide

100道Python练习题,学完掌握Python!_第1张图片

你可能感兴趣的:(python练习,python,列表,字符串)