目前,这个项目已经获得了7.1k  Stars,4.1k Forks。

初级水平是指刚刚通过Python入门课程的人。他可以用1或2个Python类或函数来解决一些问题。通常,答案可以直接在教科书中找到。

中级水平是指刚刚学习了Python,但是已经有了较强的编程背景的人。他应该能够解决可能涉及3个或3个Python类或函数的问题。答案不能直接在教科书中找到。

先进水平是他应该使用Python来解决更复杂的问题,使用更丰富的库、函数、数据结构和算法。他应该使用几个Python标准包和高级技术来解决这个问题。

=========1、Question:问题  2、Hints:提示  3、Solution:解决方案===========

1、 编写一个程序,找出所有能被7整除但不是5的倍数的数,2000年到3200年(都包括在内)。  得到的数字应该以逗号分隔的顺序打印在一行上。

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

 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)) #2000,2002,2004,.........,2884,2886,2888

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

  如果向问题提供输入数据,则应该将其视为控制台输入。

 def fact(x):
if x == 0:
return 1
return x*fact(x-1) x = int(input())
print(fact(x))

3、 对于给定的整数n,编写一个程序来生成一个字典,其中包含(i, i*i)一个在1和n之间的整数(都包含在内)。然后程序应该打印字典。 假设向程序提供以下输入:8  则输出为:  {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}

   考虑使用dict类型()

 n = int(input())
d = dict()
for i in range(1, n+1):
d[i] = i*i
print(d)

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

   方法可以将列表转换为元组

 values = input()
l = values.split(",")
t = tuple(l)
print(l)
print(t)

5、 定义一个至少有两个方法的类:   getString:从控制台输入获取字符串   打印字符串:打印字符串的大写字母。还请包含简单的测试函数来测试类方法。

    使用_init__方法构造一些参数    (直接一个uppper不可以吗??)

 class InputOutString(object):
def __init__(self):
self.s = "" def getString(self):
self.s = input() def printString(self):
print(self.s.upper()) strObj = InputOutString()
strObj.getString()
strObj.printString()

6、 编写一个程序,计算和打印的价值根据给定的公式:  Q =√[(2 * C * D)/H]  以下是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 = []
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))

7、编写一个程序,以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]]

 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)

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

    假设向程序提供以下输入:  without,hello,bag,world    输出为: bag,hello,without,world

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

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

   Suppose the following input is supplied to the program: Hello world Practice makes perfect    Then, the output should be: HELLO WORLD PRACTICE MAKES PERFECT

 lines = []
while True:
s = input()
if s:
lines.append(s.upper())
else:
break; for sentence in lines:
print(sentence)

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

  假设向程序提供以下输入:  hello world and practice makes perfect and hello world again   输出为: again and hello makes perfect practice world

  我们使用set容器自动删除重复的数据,然后使用sort()对数据进行排序

 s = input()
words = [word for word in s.split(" ")]
print(' '.join(sorted(list(set(words)))))

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

  例如:0100,0011,1010,1001   输出为:1010

 value = []
items=[x for x in input().split(',')]
for p in items:
intp = int(p, 2)
if not intp%5:
value.append(p) print(','.join(value))

12、编写一个程序,它将找到所有这些数字在1000和3000之间(都包括在内),使数字的每一位都是偶数。  得到的数字应该以逗号分隔的顺序打印在一行上。

  输出结果为:2000,2002,2004,2006,2008,2020,2022,2024,......,2866,2868,2880,2882,2884,2886,2888

 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))

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

  例如  hello world! 123 输出为: LETTERS 10    DIGITS 3

 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"])

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

  例如:I love You till the end of the World   UPPER CASE 3     LOWER CASE 25

 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"])

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

  例如:2  2468

 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)

16、使用列表理解来对列表中的每个奇数求平方。该列表是由逗号分隔的数字序列输入的。

  例如:1,2,3,4,5,6,7,8,9    输出为:1,3,5,7,9

 # values = "1,2,3,4,5,6,7,8,9"
values = input()
numbers = [x for x in values.split(",") if int(x)%2!=0]
print(",".join(numbers))

17、编写一个程序,根据控制台输入的交易日志计算银行帐户的净金额。事务日志格式如下:  D 100   W 200    D表示存款,W表示取款。

假设向程序提供以下输入:   D 300 D 300 W 200 D 100   输出为:500  (越写越觉得无聊啊,继续坚持)

 netAmount = 0
while True:
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)

18、网站需要用户输入用户名和密码才能注册。编写程序检查用户输入密码的有效性。

以下是检查密码的准则:

1. [a-z]之间至少有一个字母

2. [0-9]之间至少1个数字

1. [A-Z]之间至少有一个字母

3.至少有一个字符来自[$#@]

4. 最小交易密码长度:6

5. 最大交易密码长度:12

您的程序应该接受一个逗号分隔的密码序列,并将根据上述标准检查它们。匹配条件的密码将被打印出来,每个密码之间用逗号分隔。

例子

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

ABd1234@1 F1 # 2 w3e * 2 we3345

则程序输出为:

ABd1234@1

 import re
value = []
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))

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

 import operator
l = []
while True:
s = input()
if not s:
break
l.append(tuple(s.split(","))) print(sorted(l, key=operator.itemgetter(0,1,2)))

20、使用生成器定义一个类,它可以迭代给定范围0到n之间的数字,这些数字可以被7整除。

  例如100内的:  0  7  14  21 28  35  42  49  56  63  70  77  84  91  98

 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)

==============暂停分隔符==================下班回去继续写=================下面拓展链接==================

Python入门、提高学习网站链接:https://github.com/jackfrued/Python-100-Days?utm_source=wechat_session&utm_medium=social&utm_oi=931473721877651456

刷Leetcode网站力扣:https://leetcode-cn.com/problemset/all/

Python进阶:https://docs.pythontab.com/interpy/

不抱怨,不埋怨,没有所谓的寒冬, 只有不努力的人。加油,为了更牛的技术更高的薪资,多学习多积累。2019.11.30

100+ Python挑战性编程练习(1)的更多相关文章

  1. 100+ Python挑战性编程练习(2)

    熟能生巧,多撸代码多读书 https://github.com/zhiwehu/Python-programming-exercises/blob/master/100+%20Python%20cha ...

  2. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  3. python web编程-CGI帮助web服务器处理客户端编程

    这几篇博客均来自python核心编程 如果你有任何疑问,欢迎联系我或者仔细查看这本书的地20章 另外推荐下这本书,希望对学习python的同学有所帮助 概念预热 eb客户端通过url请求web服务器里 ...

  4. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  5. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  6. 深入理解 Python 异步编程(上)

    http://python.jobbole.com/88291/ 前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它.而使用它的同学,则大多数都停留在知 ...

  7. Python猫荐书系列之五:Python高性能编程

    稍微关心编程语言的使用趋势的人都知道,最近几年,国内最火的两种语言非 Python 与 Go 莫属,于是,隔三差五就会有人问:这两种语言谁更厉害/好找工作/高工资…… 对于编程语言的争论,就是猿界的生 ...

  8. Python面向对象编程指南

    Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...

  9. python面向对象编程进阶

    python面向对象编程进阶 一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 ...

随机推荐

  1. 【NOIP2017提高A组模拟10.7】Adore

    题目 小w 偶然间见到了一个DAG. 这个DAG 有m 层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k 个节点. 现在小w 每次可以取反第i(1 < i < n - 1) ...

  2. 【Winform-ComboBox】实现ComboBox下拉框与数据库的绑定

    实现效果如下: 1.设计窗体 下拉框的名称cmbName 2.连接数据库 DBHelper类代码: class DBHelper { /// <summary> /// 创建静态连接字符串 ...

  3. Python CGI编程Ⅳ

    使用POST方法传递数据 使用POST方法向服务器传递数据是更安全可靠的,像一些敏感信息如用户密码等需要使用POST传输数据. 以下同样是hello_get.py ,它也可以处理浏览器提交的POST表 ...

  4. wx小程序知识点(三)

    三.封装小程序的数据请求 (1)在根目录创建utils目录,创建config.js.base.js (2)在config.js中创建config类,并将请求路径配置给config的属性restUrl, ...

  5. [转] SSH两种登录方式(公私钥)解析

    转自:https://www.cnblogs.com/hukey/p/6248468.html SSH登录方式主要分为两种: 1. 用户名密码验证方式 说明: (1) 当客户端发起ssh请求,服务器会 ...

  6. Open Cascade:计算体积

    TopoDS_Shape shape; ... GProp_GProps System; BRepGProp::LinearProperties(shape, System); BRepGProp:: ...

  7. luogu 3241 [HNOI2015]开店 动态点分治+二分+vector

    独立写出来+想出来的,1.5h就切了~ 建立点分树,然后用 $vector$ 暴力存所有子节点,然后二分一下子就可以了. #include <cstdio> #include <ve ...

  8. 静态库lib、动态库dll基础

    首先从hello world!开始 //main.cpp文件 void cpu(); int main() { put(); ; } 在main.cpp中定义了一个cpu():函数,但没有实现其功能, ...

  9. 11.Python变量及其使用

    无论使用什么语言编程,其最终目的都是对数据进行处理.程序在编程过程中,为了处理数据更加方便,通常会将其存储在变量中. 形象地看,变量就像一个个小容器,用于“盛装”程序中的数据.除了变量,还有常量,它也 ...

  10. [CSP-S模拟测试]:陶陶摘苹果(线段树维护单调栈)

    题目传送门(内部题116) 输入格式 第一行两个整数$n,m$,如题 第二行有$n$个整数表示$h_1-h_n(1\leqslant h_i\leqslant 10^9)$ 接下来有$m$行,每行两个 ...