目录
前言
今天开始打卡的第一天,希望能够一直坚持下去。
因为python这东西,只看不练是没什么效果的。所以我就先稍微复习了一些川川的教程,然后开始今天的案例。
python练习实例1
题目:
有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
分析:
直接三重循环暴力遍历,计数并输出,比较简单。
源代码:
n = 0
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and j != k and i != k:
n += 1
print(i, j, k)
print(n)
python练习实例2
题目:
企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
分析:
最直接的方法是多重if条件语句直接计算,但是我觉得这样没有意义,所以想了以下方法。
思路是用列表的索引来循环计算每部分利润并求和。
具体实现:
将节点临界值(10w、20w等)赋值一个列表rim,提成作为权值赋值给另一个列表p。比较输入I与rim列表的值大小,以此分割计算区域。索引rim[i-1]及以前临界值差与权值乘积求和,I-索引rim[i]的值与对应权值乘积并求和。实现利润计算。
第一次写,思路还是有些写不明白,见谅。
源代码:
I = int(input("请输入利润I(万元):"))
rim = [0, 10, 20, 40, 60, 100]
p = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01]
s = 0
for i in range(5, -1, -1):
if I > rim[i]:
for j in range(i):
s += p[j] * (rim[j + 1] - rim[j])
s += p[i] * (I - rim[i])
break
print('%.2f万元' % s)
注意:
这个代码中比较重要的一点是 j循环下的break语句。
因为是从大到小比较,所以I大于大的值,肯定也大于更小的值,如果不加break语句,就会继续循环导致计算出错。
就好像你需要算1+2+3的值,但不加break的话算的就是1+(1+2)+(1+2+3)的值。
python练习实例3
题目:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
分析:
这道题需要用数学知识把题目的已知条件做些转化,以便能够用python编程实现求解。
因为我也没想出来什么方法,所以在此借用菜鸟的分析:
假设该数为 x。
1、则:x + 100 = n2, x + 100 + 168 = m2
2、计算等式:m2 - n2 = (m + n)(m - n) = 168
3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数
4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
7、接下来将 i 的所有数字循环计算即可。
源代码:
for i in range(1, 85):
if 168 % i == 0:
j = 168 / i
if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0:
m = (i + j) / 2
n = (i - j) / 2
x = n * n - 100
print(x)
收获:
编程往往需要运用数学知识对问题已知条件做合适的转化,来达到简单编程的目标。需要加强这方面的学习和应用。
python练习实例4
题目:
输入某年某月某日,判断这一天是这一年的第几天?
分析:
首先要知道闰年这个概念:
普通闰年:能被4整除但不能被100整除
世纪闰年:能被400整除
当判断是闰年的时候,月份为3以上时天数要+1
源代码:
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
day = int(input('请输入日:'))
s = 0
days = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
if ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0) and month > 2:
s = days[month - 1] + day + 1
else:
s = days[month - 1] + day
print('这是一年的第%d天' % s)
python练习实例5
题目:
输入三个整数x,y,z,请把这三个数由小到大输出。
分析:
三个数,算是一个小型冒泡排序。
源代码:
x = int(input('first number:'))
y = int(input('second number:'))
z = int(input('third number:'))
if x > y:
x, y = y, x
if y > z:
y, z = z, y
if x > y:
x, y = y, x
print(x, y, z)
python练习实例6
题目:
斐波那契数列
分析:
用一个python特有的多元赋值语句解决,比较简单。
源代码:
a, b = 0, 1
list1 = [0, 1]
n = int(input('请输入n(n>2):'))
for i in range(n-2):
a, b = b, a+b
list1.append(b)
print(list1)
python练习实例7
题目:
将一个列表的数据复制到另一个列表中。
源代码:
a = [1, 23, 45, 265, 7]
b = a.copy()
print(b)
python练习实例8
题目:
输出 9*9 乘法口诀表。
分析:
用python的格式化输出print完成。
‘-’表示左对齐,‘.’前面的数字表示占位数,后面表示小数点保留位数。
源代码:
for i in range(1, 10):
for j in range(1, i+1):
print('%dx%d=%-4d' % (i, j, i * j), end='')
print('')
python练习实例9
题目:
暂停一秒输出。
分析:
利用time包的sleep暂停。
源代码:
import time
num = [1, 2, 3, 4, 5, 6]
for i in range(len(num)):
print(num[i])
time.sleep(1)
python练习实例10
题目:
暂停一秒输出,并格式化当前时间。
分析:
用time包的格式化时间。
time.strftime(format, t)
- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(000-9999)
- %m 月份(01-12)
- %d 月内中的一天(0-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(01-12)
- %M 分钟数(00-59)
- %S 秒(00-59)
- %a 本地简化星期名称
- %A 本地完整星期名称
- %b 本地简化的月份名称
- %B 本地完整的月份名称
- %c 本地相应的日期表示和时间表示
- %j 年内的一天(001-366)
- %p 本地A.M.或P.M.的等价符
- %U 一年中的星期数(00-53)星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始
- %W 一年中的星期数(00-53)星期一为星期的开始
- %x 本地相应的日期表示
- %X 本地相应的时间表示
- %Z 当前时区的名称
- %% %号本身
源代码:
import time
print(time.strftime('%Y-%m-%d %H:%M:%S'))
time.sleep(1)
print(time.strftime('%Y-%m-%d %H:%M:%S'))
python练习实例11
题目:
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:
1,1,2,3,5,8……
可见,这是斐波那契数列。我记得最早了解斐波那契数列的引例就是这个。
因此,让我们拿出python练习实例6来稍作修改,去掉第一个0。
源代码:
a, b = 1, 1
list1 = [1, 1]
n = int(input('请输入月份n(n>2):'))
for i in range(n-2):
a, b = b, a+b
list1.append(b)
print(list1)
python练习实例12
题目:
判断101-200之间有多少个素数,并输出所有素数。
分析:
用这个数分别除以2到它本身-1,都不能整除则为素数。
为了减少计算量,可以排除偶数,只遍历奇数。
源代码:
n = 0
for i in range(101, 201, 2):
k = 0
for j in range(2, i):
if i % j != 0:
k += 1
if k == i-2:
n += 1
print(i)
print(f'101-200内素数的个数为{n}个')
python练习实例13
题目:
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
分析:
重点是如何取出每一位数。我的方法是:
百位通过整除100取出,
十位先取余100再整除10,
个位取余10.。
但是我做的时候竟然把三次方输成了二次方,我说怎么一个结果也没有。
看清题目很重要。。。
源代码:
for i in range(100, 1000):
x = i // 100
y = (i % 100) // 10
z = i % 10
if i == x ** 3 + y ** 3 + z ** 3:
print(i)
python练习实例14
题目:
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
分析:
这道题做了很久,说明基础还是不太扎实。
这道题有几个重要的点:
一是要让每次判断n能被整除时更新n的值
n = n / i
二是要更新n值后让for i循环重新开始(为了能让重复的质因数出现)
参考示例,将for循环置于while n not in [1]循环下,每次n更新并输出i后break一下,否则continue
三是最后的输出问题,需要一个停止(不能一直输出2*2*这样的,没有结尾)
判断最后的n==1则不输出*
源代码:
n = int(input('请输入需要分解的正整数:'))
print(f'{n}=', end='')
while n not in [1]:
for i in range(2, int(n)+1):
n /= i
if n == 1:
print(f'{i}', end='')
break
elif n % 1 == 0:
print(f'{i}', end='*')
break
else:
n = int(n*i)
continue
收获:
break和continue语句应该熟练掌握,考虑问题时要知道循环应该从哪里结束或者继续。
python练习实例15
题目:
利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
分析:
很简单,很基础。
注意python里是elif,不是else if。
源代码:
while 1:
score = int(input('请输入学习成绩(百分制):'))
if score >= 90:
print('A')
elif score >= 60:
print('B')
else:
print('C')
python练习实例16
题目:
输出指定格式的日期。
分析:
datetime包与time用法基本一样。采用strftime方法格式化输出时间。
源代码:
import datetime
x = datetime.datetime.now()
print(x.strftime("%Y-%m-%d"))
print(x.strftime("%Y-%m-%d %A %H:%M:%S"))
python练习实例17
题目:
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
分析:
通过比较计数。其中英文字母的大小写要分开用or连接。
源代码:
x = input('请输入一行字符:')
empty = 0
english = 0
number = 0
other = 0
for i in x:
if 'a' <= i <= 'z' or 'A' <= i <= 'Z':
english += 1
elif i == ' ':
empty += 1
elif '0' <= i <= '9':
number += 1
else:
other += 1
print(f'empty={empty}\nenglish={english}\nnumber={number}\nother={other}')
python练习实例18
题目:
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
分析:
需要有一个b在每次循环中自乘10加a,作为a,aa,aaa,aaaa等,然后s求和。
源代码:
a = int(input('请输入a值:'))
n = int(input('请输入n值:'))
s = a
b = a
for i in range(n-1):
b = b * 10 + a
s += b
print(s)
python练习实例19
题目:
一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
分析:
这次是找因子,并非质因数。
所以找到一个就加进去。
Tip:为了避免重复因子的影响,我们选择用集合。后面可以强制转换列表来索引。
源代码:
for i in range(4, 1001):
x = {1}
for j in range(2, i):
a = i / j
if a % 1 == 0:
x.add(int(a))
x.add(j)
s = 0
x = list(x)
for k in x:
s += k
if i == s:
print(i, end="=")
print(x[0], end='')
for m in range(1, len(x)):
print(f'+{x[m]}', end='')
print('')
python练习实例20
题目:
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
分析:
只要理清节点就很简单。
源代码:
h = 100
s = 100
for i in range(10):
s += h
h /= 2
print(f's={s}')
print(f'h={h}')
python练习实例21
题目:
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
分析:
简单的逆向思维问题。
源代码:
x = 1
for i in range(9):
x = (x+1)*2
print(x)
python练习实例22
题目:
两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
源代码:
team = ['x', 'y', 'z']
for i in team:
for j in team:
if i != j:
for k in team:
if i != k and j != k:
if i != 'x' and k != 'x' and k != 'z':
print(f'a--{i}\nb--{j}\nc--{k}')
python练习实例23
题目:
打印出如下图案(菱形):
* *** ***** ******* ***** *** *
分析:
找出i与空格、‘*’的对应数学关系,循环输出。
源代码:
empty = ' '
for i in range(7):
if i < 4:
print(empty*(3-i)+'*'*(2*i+1))
else:
print(empty*(i-3)+'*'*(2*(7-i)-1))
python练习实例24
题目:
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
分析:
我们又看到了熟悉的东西:斐波那契数列。
于是我们再次找到实例6的代码,稍作修改加以引用。
源代码:
a, b = 1, 2
list1 = [1, 2]
n = 21
for i in range(n-2):
a, b = b, a+b
list1.append(b)
s = 0
for i in range(len(list1)-1):
s = s + list1[i+1]/list1[i]
print(s)
python练习实例25
题目:
求1+2!+3!+...+20!的和。
分析:
循环相乘求和。
源代码:
a = 1
s = 0
for i in range(1, 21):
a *= i
s += a
print(s)
python练习实例26
题目:
利用递归方法求5!。
分析:
因为需要用递归解决问题,所以我们需要定义一个函数来实现递归算法,其中的传递参数为n。
源代码:
def n_1(n):
if n == 0 or n == 1:
return 1
else:
return n * n_1(n - 1)
print(n_1(5))
python练习实例27
题目:
利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
分析:
这个题目还是递归,但是需要传递两个参数来控制递归。一个是字符串str1,一个是需要用到的字符串索引数n。
源代码:
def invert(n, str1):
if n == 0:
return
print(str1[n - 1], end="")
invert(n - 1, str1)
str1 = input('请输入字符串:')
n = len(str1)
invert(n, str1)
python练习实例28
题目:
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
分析:
读题发现是很简单的一道题,但是蕴含了递归的思想,于是我们用递归算法来解决这个问题。
源代码:
def age(n):
if n == 1:
return 10
else:
return age(n-1)+2
print(age(5))
python练习实例29
题目:
给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
分析:
因为给定了不多于5位的正整数是,因此我们可以直接用5次的for循环,只需要给定一个结束循环并打印的条件就行。
源代码:
number = int(input('请输入一个不多于五位的正整数:'))
for i in range(5):
n = number % 10
number = int((number - n) / 10)
print(n)
if number == 0:
print(f'这是一个{i+1}位数')
break
python练习实例30
题目:
一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
分析:
if判断语句
源代码:
n = int(input('请输入一个5位数:'))
a = n // 10000
b = (n - a * 10000) // 1000
d = n % 10
c = (n % 100 - d) // 10
if a == d and b == c:
print('是回文数!')
else:
print('不是回文数')
python练习实例31
题目:
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
分析:
我的思路是:创建一个可索引的列表week,将七个单词以列表的形式储存到week中,以便后面的索引。
这样,我们就可以用for循环来解决问题。
最后输出时,要想得到连续的字母,需要用到''.join()语句。
源代码:
week = [list('Monday'), list('Tuesday'), list('Wednesday'), list('Thursday'), list('Friday'), list('Saturday'), list('Sunday')]
first_letter = str(input('请输入第一个字母:'))
n = 0
a = 0
for i in range(7):
if first_letter == week[i][0]:
a = i
n += 1
if n == 1:
print(''.join(week[a]))
elif n == 2:
second_letter = str(input('请输入第二个字母:'))
for i in range(7):
if second_letter == week[i][1]:
print(''.join(week[i]))
else:
print('error')
python练习实例32
题目:
按相反的顺序输出列表的值。
源代码:
list1 = [1, 2, 3, 4, 5, 6]
list2 = list1[::-1]
print(list2)
python练习实例33
题目:
按逗号分隔列表。
分析:
直接用‘,’.join(str)方法就行。
源代码:
list1 = [1, 2, 3, 4, 5, 6]
# s = ','.join(str(list1))
# s = str(list1)
s = ','.join(str(n) for n in list1)
print(str(s))
收获:
本以为是个很简单的题,但还是让我有了新收获。
str(list)直接把list中的内容连[]带,带数据全部转换成了字符串,大家可以吧注释掉的那两行运行看看。
如果只需要把列表内容强制转换,还是要像菜鸟教程给的演示代码一样用条件赋值语句遍历list中的内容。
python练习实例34
题目:
练习函数调用。
分析:
使用函数,输出三次 RUNOOB 字符串。
源代码:
def many(n):
for i in range(n):
print('RUNOOB')
if __name__ == '__main__':
many(3)
python练习实例35
题目:
文本颜色设置。
分析:
这属实触及到我的知识盲区了。学一下:
源代码:
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m' # 标准结尾
BOLD = '\033[1m' # 改字体
UNDERLINE = '\033[4m' # 加下划线
print(bcolors.WARNING + "警告的颜色字体?" + bcolors.ENDC)
python练习实例36
题目:
求100之内的素数。
分析:
我记得之前有一道题是求101-200以内的素数,所以思路都差不多。
用从2到它本身的数去除它,如果没有能整除的就是质数。
源代码:
s = [2]
for i in range(3, 101):
for j in range(2, i):
if i % j == 0:
break
if j == i-1:
s.append(i)
print(s)
python练习实例37
题目:
对10个数进行排序。
分析:
排序方法有多种,我就选择两种我有点基础的算法吧。选择排序和冒泡排序。
选择排序:从一众数中选择最小或最大的数放在第一位,再从剩下数中选出最小或最大的数放在第二位,以此类推。
冒泡排序:把较小的数当成泡泡一样一步一步往上冒,就是相邻两数比较,小的放前面。
我窃以为把较大的数一步一步排到最后应该算是下沉,不应该叫冒泡,哈哈哈。
源代码:
# 选择排序
s = []
for i in range(10):
a = int(input(f'请输入第{i+1}个数:'))
s.append(a)
for i in range(9): # 循环次数
a = s[i] # a用来储存一次循环中的最小数
n = i # n用来储存最小数的索引
for j in range(i+1, 10):
if a > s[j]:
a = s[j]
n = j
s[i], s[n] = a, s[i] # 交换第i位和最小数,使得在选择排序最小数时不丢失数据
print(s)
# 冒泡排序
s = []
for i in range(10):
a = int(input(f'请输入第{i+1}个数:'))
s.append(a)
for i in range(9):
for j in range(9, i, -1):
if s[j-1] > s[j]: # 前面大的时候交换
s[j-1], s[j] = s[j], s[j-1]
print(s)
python练习实例38
题目:
求一个3*3矩阵主对角线元素之和。
分析:
用numpy包, 或者直接列表嵌套列表,双重索引。
源代码:
import numpy as np
a = np.arange(1, 10).reshape(3, 3)
s = 0
for i in range(3):
s += a[i][i]
print(s)
python练习实例39
题目:
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
分析:
既然是已经排好的数组,那么就可以直接比较插入了,插入完加个break结束循环。
源代码:
l = [1, 2, 3, 5, 6, 8, 9, 45]
a = int(input('请输入数字:'))
for i in range(len(l)):
if a < l[i]:
l.insert(i, a)
break
print(l)
python练习实例40
题目:
将一个数组逆序输出。
分析:
列表的inverse方法,或者负索引也行。
源代码:
l = [1, 2, 3, 5, 6, 8, 9, 45]
a = l[::-1]
l.reverse()
print(l)
print(a)
python练习实例41
题目:
模仿静态变量的用法。
分析:
首先我们要知道静态变量是什么。
C语言中,在函数内部可以定义static类型的变量,这个变量是属于这个函数的全局对象。在python中也可以实现这样的机制。
源代码:
class Student:
school = 'NWPU'
def __init__(self, name, age):
self.name = name
self.age = age
a = Student('张三', 20)
print(a.school)
python练习实例42
题目:
学习使用auto定义变量的用法。
分析:
c语言中,关键字auto用于声明一个变量为局部变量。所有局部变量默认都是auto,一般省略不写。
具体可参考:c语言关键字之auto
没有auto关键字的话,可以使用变量作用域来举例。
源代码:
num = 2
def autofunc():
num = 1
print('internal block num = %d' % num)
num += 1
for i in range(10):
print('The num = %d' % num)
num += 1
autofunc()
可以看到,局部变量和全局变量虽然名称相同但互不影响。
python练习实例43
题目:
模仿静态变量(static)另一案例。
分析:
直接看演示代码,我理解的意思是:
变量在定义类的时候初始化,在执行类下面的函数时不会再次初始化该变量,而是以其此刻的值执行代码。
源代码:
class Num:
nNum = 1
def inc(self):
self.nNum += 1
print('nNum = %d' % self.nNum)
if __name__ == '__main__':
nNum = 2
inst = Num()
for i in range(3):
nNum += 1
print('The num = %d' % nNum)
inst.inc()
python练习实例44
题目:
两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵:
X = [[12,7,3], [4 ,5,6], [7 ,8,9]] Y = [[5,8,1], [6,7,3], [4,5,9]]
分析:
用numpy包产生矩阵, 直接相加。
源代码:
import numpy as np
X = np.array([12, 7, 3, 4, 5, 6, 7, 8, 9]).reshape(3, 3)
Y = np.array([5, 8, 1, 6, 7, 3, 4, 5, 9]).reshape(3, 3)
Z = X + Y
print(Z)
python练习实例45
题目:
统计 1 到 100 之和。
分析:
他可能想考range的范围是左闭右开吧……
源代码:
s = 0
for i in range(1, 101):
s += i
print(s)
python练习实例46
题目:
求输入数字的平方,如果平方运算后小于 50 则退出。
分析:
需要设定死循环中断条件。
源代码:
def square(n):
return n**2
while 1:
n = int(input('请输入数字:'))
a = n**2
print(a)
if a < 50:
break
python练习实例47
题目:
两个变量值互换。
分析:
用python独有的多元赋值语句。
但定义函数需要有返回值,因为参数传递是局部变量。
源代码:
def exchange(a, b):
a, b = b, a
return a, b
if __name__ == '__main__':
x = 10
y = 100
print(x, y)
x, y = exchange(x, y)
print(x, y)
python练习实例48
题目:
数字比较。
分析:
定义函数传参比较。
源代码:
def compare(a, b):
if a < b:
print(f'{a}<{b}')
elif a > b:
print(f'{a}>{b}')
else:
print(f'{a}={b}')
if __name__ == '__main__':
a = 10
b = 100
compare(a, b)
python练习实例49
题目:
使用lambda来创建匿名函数。
分析:
川川教程里有这个函数的讲解。
需要注意,这是一个需要传参的函数。
源代码:
def tri(n):
return lambda a: a * n
if __name__ == '__main__':
trible = tri(3)
print(trible(5))
python练习实例50
题目:
输出一个随机数。
分析:
使用 random 模块可以输出各种各样的随机数。
源代码:
import random
num = []
for i in range(20):
x = random.randint(1, 10)
num.append(x)
print(num)
python练习实例51
题目:
学习使用按位与 & 。
分析:
按位与&是将数据转化为二进制,然后按位与。
比如十六进制88是10001000,与十进制5(00000101)按位与之后是0,与十六进制15(00001111)按位与之后是8
源代码:
x = 5
y = 0x88
z = x & y
print(z)
a = 0xf
b = a & y
print(b)
python练习实例52
题目:
学习使用按位或 | 。
分析:
按位或 | 是将数据转化为二进制,然后按位或。
比如十六进制88是10001000,与十进制5(00000101)按位或之后是0x8d(141),与十六进制15(00001111)按位与之后是0x8f(143)
源代码:
x = 5
y = 0x88
z = x | y
print(z)
a = 0xf
b = a | y
print(b)
python练习实例53
题目:
学习使用按位异或 ^ 。
分析:
按位异或 ^ 是将数据转化为二进制,然后按位异或。
相异为一,相同为零。
比如十六进制88是10001000,与十进制5(00000101)按位异或之后是0x8d(141),与十六进制15(00001111)按位与之后是0x87(135)
源代码:
x = 5
y = 0x88
z = x ^ y
print(z)
a = 0xf
b = a ^ y
print(b)
python练习实例54
题目:
取一个整数a从右端开始的4〜7位。
分析:
说实话没看懂代码。
原以为是取万位以上,但看完示例分析发现应该是说的二进制数,但是这个给的例子又很奇怪。
取4-7位不应该右移3位用1111取吗?为什么右移4位。
源代码:
if __name__ == '__main__':
a = int(input('input a number:\n'))
b = a >> 3
c = ~(~0 << 4)
d = b & c
print('%o\t%o' % (a, d))
python练习实例55
题目:
学习使用按位取反~。
分析:
完全是学习,因为忘完了。
说明:
二进制数在内存中以补码的形式存储。
按位取反:二进制每一位取反,0 变 1,1 变 0。
最高位为符号位,正数的符号位为 0,负数为 1。
对正数来说,最高位为 0,其余各位代表数值本身(以二进制表示),如 +42 的补码为 00101010。
对负数而言,把该数绝对值的补码按位取反,然后对整个数加 1,即得该数的补码。如 -42 的补码为 11010110(00101010 按位取反
11010101+1 即 11010110)。
~9 的计算步骤:
转二进制:0 1001 计算补码:0 1001 按位取反:1 0110
转为原码:
按位取反:1 1001 末位加 1:1 1010 符号位为 1 是负数,即 -10
源代码:
a = 7
b = ~a
c = -7
d = ~c
print('变量 a 取反结果为: %d' % b)
print('变量 c 取反结果为: %d' % d)
python练习实例56
题目:
画图,学用circle画圆形。
分析:
可以像演示代码一样,也可以用numpy和matplotlib.pyplot画,也可以用turtle
源代码:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2, 2, 500)
y = np.sqrt(4 - x ** 2)
z = -np.sqrt(4 - x ** 2)
figures = plt.figure()
plt.plot(x, y)
plt.plot(x, z)
plt.show()
import turtle
turtle.circle(60)
python练习实例57
题目:
画图,学用line画直线。
分析:
跟上个题差不多,但turtle中没有line函数。
源代码:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2, 2, 500)
y = x + 2
plt.plot(x, y)
plt.show()
python练习实例58
题目:
画图,学用rectangle画方形。
分析:
还是演示代码更方便一些。
源代码:
if __name__ == '__main__':
from tkinter import *
root = Tk()
root.title('Canvas')
canvas = Canvas(root, width=400, height=400, bg='yellow')
x0 = 263
y0 = 263
y1 = 275
x1 = 275
for i in range(19):
canvas.create_rectangle(x0, y0, x1, y1)
x0 -= 5
y0 -= 5
x1 += 5
y1 += 5
canvas.pack()
root.mainloop()
python练习实例59
题目:
画图,综合例子。
吐槽:
说实话做到近期这一部分让我这个任务驱动型的人非常难受,什么叫做综合例子啊,没有一个明确的指示真的让我很难做事。
而且昨天做的三道题用的东西、演示代码什么的也很是奇怪,虽然应该是我学艺不精。
下面是不想做了,直接贴的演示代码。
演示代码:
if __name__ == '__main__':
from tkinter import * # 只修改了个T-t
canvas = Canvas(width = 300,height = 300,bg = 'green')
canvas.pack(expand = YES,fill = BOTH)
x0 = 150
y0 = 100
canvas.create_oval(x0 - 10,y0 - 10,x0 + 10,y0 + 10)
canvas.create_oval(x0 - 20,y0 - 20,x0 + 20,y0 + 20)
canvas.create_oval(x0 - 50,y0 - 50,x0 + 50,y0 + 50)
import math
B = 0.809
for i in range(16):
a = 2 * math.pi / 16 * i
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
canvas.create_oval(x0 - 60,y0 - 60,x0 + 60,y0 + 60)
for k in range(501):
for i in range(17):
a = (2 * math.pi / 16) * i + (2 * math.pi / 180) * k
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 + math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
for j in range(51):
a = (2 * math.pi / 16) * i + (2* math.pi / 180) * k - 1
x = math.ceil(x0 + 48 * math.cos(a))
y = math.ceil(y0 + 48 * math.sin(a) * B)
canvas.create_line(x0,y0,x,y,fill = 'red')
mainloop()
python练习实例60
题目:
计算字符串长度。
分析:
用len函数。
源代码:
str1 = input('请输入字符串:')
l = len(str1)
print(f'字符串长度为{l}')
python练习实例61
题目:
打印出杨辉三角形(要求打印出10行如下图)。
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1
分析:
杨辉三角形:每个数等于它上方两数之和。(因为这里排布不太一样,所以每个数等于他正上方数及其左边数之和)
源代码:
import copy
tri = [[1]]
tri1 = [1]
for i in range(9):
tri2 = []
tri1.insert(0, 0)
tri1.append(0)
for j in range(i + 2):
tri2.append(tri1[j] + tri1[j + 1])
tri1 = tri2
tri.append(copy.deepcopy(tri1)) # 可以改变这行代码看看浅拷贝和深拷贝不同的运行结果。
for i in range(10):
print(tri[i])
收获:
我这个思路的实现让我理解了上课老师讲的直接赋值、浅拷贝和深拷贝的区别。
直接赋值=:获得列表的引用(数组的指针),用id函数查看系统分配的地址是一样的。
浅拷贝.copy:复制第一层的引用保存到另一个地址空间中。
深拷贝.deepcopy:复制所有层的引用保存到另一个地址空间中。
浅拷贝和深拷贝,简单的区别就是:
当列表套列表的时候执行直接赋值或浅拷贝,改变源列表内列表的值,相应复制列表内列表的值也会改变。
用深拷贝,则复制列表不会改变。
python练习实例62
题目:
查找字符串。
分析:
find函数返回查找字符串索引,如果找不到返回-1。
源代码:
str1 = '123keh565'
print(str1.find('keh'))
print(str1.find('0keh'))
python练习实例63
题目:
画椭圆。
分析:
tkinter还是可以,numpy+matpotlib.pyplot也可以。
源代码:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2, 2, 1000)
y = np.sqrt(3-3/4*x**2)
plt.plot(x, y, 'b')
plt.plot(x, -y, 'b')
plt.show()
python练习实例64
题目:
利用ellipse 和 rectangle 画图。
源代码:
if __name__ == '__main__':
from tkinter import *
canvas = Canvas(width = 400,height = 600,bg = 'white')
left = 20
right = 50
top = 50
num = 15
for i in range(num):
canvas.create_oval(250 - right,250 - left,250 + right,250 + left)
canvas.create_oval(250 - 20,250 - top,250 + 20,250 + top)
canvas.create_rectangle(20 - 2 * i,20 - 2 * i,10 * (i + 2),10 * ( i + 2))
right += 5
left += 5
top += 10
canvas.pack()
mainloop()
python练习实例65
题目:
一个最优美的图案。
源代码:
import math
from tkinter import *
class PTS:
def __init__(self):
self.x = 0
self.y = 0
points = []
def LineToDemo():
screenx = 400
screeny = 400
canvas = Canvas(width=screenx, height=screeny, bg='white')
AspectRatio = 0.85
MAXPTS = 15
h = screeny
w = screenx
xcenter = w / 2
ycenter = h / 2
radius = (h - 30) / (AspectRatio * 2) - 20
step = 360 / MAXPTS
angle = 0.0
for i in range(MAXPTS):
rads = angle * math.pi / 180.0
p = PTS()
p.x = xcenter + int(math.cos(rads) * radius)
p.y = ycenter - int(math.sin(rads) * radius * AspectRatio)
angle += step
points.append(p)
canvas.create_oval(xcenter - radius, ycenter - radius,
xcenter + radius, ycenter + radius)
for i in range(MAXPTS):
for j in range(i, MAXPTS):
canvas.create_line(points[i].x, points[i].y, points[j].x, points[j].y)
canvas.pack()
mainloop()
if __name__ == '__main__':
LineToDemo()
python练习实例66
题目:
输入3个数a,b,c,按大小顺序输出。
分析:
可以用sort函数,也可以自己定义一个函数。
源代码:
num = []
for i in range(3):
a = int(input(f'请输入第{i+1}个数:'))
num.append(a)
num.sort()
print(num)
python练习实例67
题目:
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
分析:
当定义一个函数的传递参数是列表时,传递过去的还是列表,可以用列表专用的函数。
源代码:
def special_swap(args):
a = args.index(max(args))
args[0], args[a] = args[a], args[0]
b = args.index(min(args))
args[-1], args[b] = args[b], args[-1]
return args
if __name__ == "__main__":
num = []
for i in range(6):
n = input('请输入数据:')
num.append(int(n))
print(num)
num_new = special_swap(num)
print(num_new)
python练习实例68
题目:
有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数。
分析:
通过看题目,可以发现这是一个循环右移的算法,那么我们可以定义一个函数来实现。
源代码:
def RR(num, n):
for i in range(n):
a = num[-1]
for j in range(len(num)-1, 0, -1):
num[j] = num[j-1]
num[0] = a
return num
if __name__ == "__main__":
num = []
n = int(input('你要输入几个数:'))
for i in range(n):
a = int(input(f'请输入第{i+1}个数:'))
num.append(a)
m = int(input('需要循环移动几位:'))
print(num)
num_new = RR(num, m)
print(num_new)
python练习实例69
题目:
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
分析:
围成一圈报数意思就是报到最后的时候,从头开始继续报,不是从头开始从1报。所以实现只能用while循环,因为不知道循环次数。
源代码:
import numpy as np
n = int(input('请输入人数:'))
num = np.arange(1, n+1)
i = 0
j = 0
k = 0
while k < n-1:
if num[i] != 0:
j += 1
if j == 3:
num[i] = 0
j = 0
k += 1
i += 1
if i == n:
i = 0
for m in range(n):
if num[m] != 0:
print(m+1)
python练习实例70
题目:
写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
分析:
len函数。
源代码:
def L(string):
long = len(string)
return long
if __name__ == "__main__":
string = input('请输入字符串:')
s = L(string)
print(f'字符串长度为:{s}')
python练习实例71
题目:
编写input()和output()函数输入,输出5个学生的数据记录。
分析:
专用于存储学生信息的input和output函数。
tips:注意遍历字典内容时要用.items()
源代码:
def input_stu(stu):
n = int(input('请输入学生个数:'))
for i in range(n):
student0 = {}
student0['number'] = i+1
student0['name'] = input('请输入姓名:')
student0['math'] = input('数学成绩:')
student0['chinese'] = input('语文成绩:')
student0['english'] = input('英语成绩:')
stu.append(student0)
def output_stu(stu):
for i in range(len(stu)):
for j, k in stu[i].items():
print(f'{j}:{k}')
print('')
if __name__ == '__main__':
student = []
input_stu(student)
print(student)
output_stu(student)
python练习实例72
题目:
创建一个链表。
源代码:
if __name__ == '__main__':
ptr = []
for i in range(5):
num = int(input('please input a number:\n'))
ptr.append(num)
print(ptr)
python练习实例73
题目:
反向输出一个链表。
分析:
列表专属reverse函数。
源代码:
if __name__ == '__main__':
ptr = []
for i in range(5):
num = int(input('please input a number:\n'))
ptr.append(num)
print(ptr)
ptr.reverse()
print(ptr)
Python 练习实例74
题目:
列表排序及连接。
程序分析:
排序可使用 sort() 方法,连接可以使用 + 号或 extend() 方法。
源代码:
if __name__ == '__main__':
a = [1, 3, 2]
b = [3, 4, 5]
a.sort()
print(a)
print(a + b)
a.extend(b)
print(a)
Python 练习实例75
题目:
放松一下,算一道简单的题目。
源代码:
if __name__ == '__main__':
for i in range(5):
n = 0
if i != 1:
n += 1
if i == 3:
n += 1
if i == 4:
n += 1
if i != 4:
n += 1
if n == 3:
print(64 + i)
Python 练习实例76
题目:
编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n。
分析:
简单的for循环。
源代码:
def even(n):
s = 0
for i in range(2, n + 1, 2):
s += 1 / i
return s
def uneven(n):
s = 0
for i in range(1, n + 1, 2):
s += 1 / i
return s
if __name__ == '__main__':
n = int(input('请输入n:'))
if n % 2 == 0:
s = even(n)
else:
s = uneven(n)
print(s)
python练习实例77
题目:
循环输出列表。
分析:
for range(len())或者for i in list都可以。
源代码:
if __name__ == '__main__':
s = ["man", "woman", "girl", "boy", "sister"]
for i in range(len(s)):
print(s[i])
print()
for i in s:
print(i)
python练习实例78
题目:
找到年龄最大的人,并输出。请找出程序中有什么问题。
分析:
好像没找到什么问题……
源代码:
if __name__ == '__main__':
person = {"li": 18, "wang": 50, "zhang": 20, "sun": 22}
m = 'li'
for key in person.keys():
if person[m] < person[key]:
m = key
print('%s:%d' % (m, person[m]))
python练习实例79
题目:
字符串排序。
源代码:
if __name__ == '__main__':
str1 = input('input string:\n')
str2 = input('input string:\n')
str3 = input('input string:\n')
print(str1, str2, str3)
if str1 > str2:
str1, str2 = str2, str1
if str1 > str3:
str1, str3 = str3, str1
if str2 > str3:
str2, str3 = str3, str2
print('after being sorted.')
print(str1, str2, str3)
python练习实例80
题目:
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
分析:
演示代码中,i用来计数猴子的个数,j是平均分成5份时每份的个数,x是桃子总数。
源代码:
if __name__ == '__main__':
i = 0
j = 1
x = 0
while i < 5:
x = 4 * j
for i in range(0, 5):
if x % 4 != 0:
break
else:
i += 1
x = (x / 4) * 5 + 1
j += 1
print(x)
python练习实例81
题目:
809*??=800*??+9*?? 其中??代表的两位数, 809*??为四位数,8*??的结果为两位数,9*??的结果为3位数。求??代表的两位数,及809*??后的结果。
分析:
判断乘积结果是几位数就可以了。
源代码:
for i in range(10, 100):
if 809 * i < 10000 and 8 * i < 100 <= 9 * i < 1000:
print(f'i={i}')
print(f'809*{i}={809 * i}')
python练习实例82
题目:
八进制转换为十进制。
分析:
将输入的字符串转化为列表以便索引,然后计算时用int强制转换。
源代码:
n = input('请输入一个八进制数:')
n = list(n)
s = 0
for i in range(len(n)):
s += int(n[i])*8**(len(n)-1-i)
print(s)
python练习实例83
题目:
求0—7所能组成的奇数个数。
分析:
组成1位数是4个。
组成2位数是7*4个。
组成3位数是7*8*4个。
组成4位数是7*8*8*4个。
......
源代码:
if __name__ == '__main__':
sum = 4
s = 4
for j in range(2, 9):
print(sum)
if j <= 2:
s *= 7
else:
s *= 8
sum += s
print('sum = %d' % sum)
python练习实例84
题目:
连接字符串。
分析:
我理解的连接是+号
源代码:
delimiter = ','
mylist1 = ['Brazil', 'Russia', 'India', 'China']
mylist2 = ['Brazil', 'Russia', 'India', 'China']
print(delimiter.join(mylist1))
print(mylist1+mylist2)
python练习实例85
题目:
输入一个奇数,然后判断最少几个 9 除于该数的结果为整数。
分析:
先生成一个9,99,999,……的列表,然后用for循环寻找符合条件的数。
源代码:
num = []
a = 10
for i in range(15):
num.append(a-1)
a *= 10
n = int(input('请输入一个奇数:'))
for i in num:
if i % n == 0:
print(f'{i}/{n}={int(i/n)}')
break
python练习实例86
题目:
两个字符串连接程序。
分析:
这次是真的+号连接。
源代码:
if __name__ == '__main__':
a = "acegikm"
b = "bdfhjlnpq"
c = a + b
print(c)
python练习实例87
题目:
回答结果(结构体变量传递)。
分析:
定义外部函数也依然可以改变类属性的值。
源代码:
if __name__ == '__main__':
class student:
x = 0
c = 0
def f(stu):
stu.x = 20
stu.c = 'c'
a = student()
a.x = 3
a.c = 'a'
f(a)
print(a.x, a.c)
python练习实例88
题目:
读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。
分析:
随机数生成,for循环打印。
源代码:
import random
num = []
for i in range(7):
n = random.randint(1, 51)
num.append(n)
for i in num:
print(i)
print('*'*i)
python练习实例89
题目:
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
分析:
将输入数据转化为可索引的列表,比较容易交换和遍历。
源代码:
def encrypt(data):
for i in range(len(data)):
data[i] = (int(data[i]) + 5) % 10
data[0], data[3] = data[3], data[0]
data[1], data[2] = data[2], data[1]
return data
data = list(input('请输入需要传递的数据:'))
print('原数据:' + ''.join(data))
data = encrypt(data)
print('加密后数据:', end='')
for n in data:
print(n, end='')
python练习实例90
题目:
列表使用实例。
分析:
推荐川川教程,我就粘一下列表部分吧。
源代码:
### 创建 ###
mylist = ["川川一号", "川川二号", "川川三号"]
print(mylist)
thislist = list(("apple", "banana", "cherry"))
print(thislist)
# 允许重复
thislist = ["川川一号", "川川二号", "川川三号", "川川一号"]
print(thislist)
### 遍历 ###
for i in thislist:
print(i)
# List列表是一个有序且可变的集合。允许重复成员。
# turple元组是一个有序且不可更改的集合。允许重复成员。
# Set集合是一个无序且无索引的集合。没有重复的成员。
# dict字典是一个有序*且可变的集合。没有重复的成员。
# !!!从 Python 3.7 版开始,字典才是有序的!!!
### 索引 ###
# 可正可负
# 检查是否存在
thislist = ["apple", "banana", "cherry"]
if "apple" in thislist:
print("Yes, 'apple' is in the fruits list")
### 更改 ###
# 单个更改
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist[0] = "川川五号"
print(mylist[0])
# 多个更改
mylist = ["川川一号", "川川二号", "川川三号", "川川四号", "川川五号"]
mylist[1:3] = ["哈皮川川", "憨批川川"]
print(mylist)
# 插入
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist.insert(2, '帅哥呀')
print(mylist)
### 添加 ###
# 末尾添加append
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist.append("憨批川川")
print(mylist)
# 指定位置添加insert
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist.insert(2, '川川菜鸟')
print(mylist)
# 合并列表extend
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist1 = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist.extend(mylist1)
print(mylist)
# extend()方法不一定要列表,也可以添加任何可迭代对象(元组、集合、字典等)。
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist2 = ("川川", "菜鸟")
mylist.extend(mylist2)
print(mylist)
### 删除列表 ###
# 删除指定目标remove
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist.remove('川川二号')
print(mylist)
# 删除指定索引pop
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist.pop(2)
print(mylist)
# 如果不指定索引,该pop()方法将删除最后一项。
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist.pop()
print(mylist)
# 删除指定索引del
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
del mylist[0]
print(mylist)
# 该del关键字也可以完全删除列表。
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
del mylist
# 清除列表clear
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist.clear()
print(mylist)
# clear()方法清空列表。该列表仍然存在,但没有内容。
### 循环列表 ###
# for循环遍历
'''可以使用循环遍历列表项'''
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
for i in mylist:
print(i)
'''遍历索引号'''
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
for i in range(len(mylist)):
print(mylist[i])
# while循环遍历
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
i = 0
while i < len(mylist):
print(mylist[i])
i = i + 1
### 列表推导式 ###
# 根据fruits列表,您需要一个新列表,其中仅包含名称中带有字母“a”的fruits。
# 如果没有列表理解,您将不得不编写一个for带有条件测试的语句:
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
for x in fruits:
if "a" in x:
newlist.append(x)
print(newlist)
# 使用列表推导式,你只需要一行代码即可!
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]
print(newlist)
# 返回“orange”而不是“banana”:(这个不是很好理解,多想想)
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x if x != "banana" else "orange" for x in fruits]
print(newlist)
### 列表排序 ###
# 区分大小写的排序
# 默认情况下,该sort()方法区分大小写,导致所有大写字母都排在小写字母之前:
thislist = ["banana", "Orange", "Kiwi", "cherry"]
thislist.sort()
print(thislist)
# 不区分大小写的排序
# 如果你想要一个不区分大小写的排序函数,使用 str.lower 作为键函数:
thislist = ["banana", "Orange", "Kiwi", "cherry"]
thislist.sort(key=str.lower)
print(thislist)
# 倒序reverse
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
mylist.reverse()
print(mylist)
### 复制列表 ###
# copy()方法制作列表的副本:
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
my = mylist.copy()
print(my)
# list()方法制作列表的副本:
mylist = ["川川一号", "川川二号", "川川三号", "川川四号"]
my = list(mylist)
print(my)
### 加入列表 ###
# +号运算符
list1 = ["a", "b", "c"]
list2 = [1, 2, 3]
list3 = list1 + list2
print(list3)
# 稍微有意思点,连接两个列表的另一种方法是将 list2 中的所有项一个一个地附加到 list1 中:
list1 = ["a", "b", "c"]
list2 = [1, 2, 3]
for x in list2:
list1.append(x)
print(list1)
# extend() 方法,其目的是将元素从一个列表添加到另一个列表:
list1 = ["a", "b", "c"]
list2 = [1, 2, 3]
list1.extend(list2)
print(list1)
python练习实例91
题目:
时间函数举例1。
分析:
就当学习了。
源代码:
if __name__ == '__main__':
import time
print(time.ctime(time.time()))
print(time.asctime(time.localtime(time.time())))
print(time.asctime(time.gmtime(time.time())))
python练习实例92
题目:
时间函数举例2。
分析:
计算循环打印3000次所需时间。
源代码:
if __name__ == '__main__':
import time
start = time.time()
for i in range(3000):
print(i)
end = time.time()
print(end - start)
python练习实例93
题目:
时间函数举例3。
源代码:
if __name__ == '__main__':
import time
start = time.clock()
for i in range(10000):
print(i)
end = time.clock()
print('different is %6.3f' % (end - start))
Traceback (most recent call last):
File "C:\Users\14504\PycharmProjects\study\python100例\93.py", line 6, in <module>
start = time.clock()
AttributeError: module 'time' has no attribute 'clock'
和上个代码一样的功能,但是这个报错time没有clock这个属性,所以就用time好了。
python练习实例94
题目:
时间函数举例4,一个猜数游戏,判断一个人反应快慢。
源代码:
if __name__ == '__main__':
import time
import random
play_it = input('do you want to play it.(\'y\' or \'n\')')
while play_it == 'y':
c = input('input a character:\n')
i = random.randint(0, 100)
print('please input number you guess:\n')
start = time.time()
a = time.time()
guess = int(input('input your guess:\n'))
while guess != i:
if guess > i:
print('please input a little smaller')
guess = int(input('input your guess:\n'))
else:
print('please input a little bigger')
guess = int(input('input your guess:\n'))
end = time.time()
b = time.time()
var = (end - start) / 18.2
print(var)
if var < 15:
print('you are very clever!')
elif var < 25:
print('you are normal!')
else:
print('you are stupid!')
print('Congradulations')
print('The number you guess is %d' % i)
play_it = input('do you want to play it.')
python练习实例95
题目:
字符串日期转换为易读的日期格式。
源代码:
from dateutil import parser
dt = parser.parse("Aug 28 2015 12:00AM")
print(dt)
如果不是有这个函数,确实比较难办,字符串格式太多了。
python练习实例96
题目:
计算字符串中子串出现的次数。
分析:
用一个count函数就可以解决。
源代码:
if __name__ == '__main__':
str1 = input('请输入一个字符串:\n')
str2 = input('请输入一个子字符串:\n')
n = str1.count(str2)
print(n)
python练习实例97
题目:
从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。
分析:
当字符串没有#全部写入,有#则提取#前面的字符串写入。
源代码:
filename = input('输入文件名:\n')
fp = open(filename, "w+")
ch = ''
while '#' not in ch:
fp.write(ch)
ch = input('输入字符串:\n')
n = ch.index('#')
ch1 = ch[0:n]
fp.write(ch1)
fp.close()
python练习实例98
题目:
从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。
分析:
upper函数,with open语句比较方便。
源代码:
string = input('请输入字符串:').upper()
with open('test.txt', 'w+') as f:
f.write(string)
python练习实例99
题目:
有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。
分析:
首先读取两个文件内容并存在两个变量内,然后强制转换list使用sort函数,最后用join函数转回字符串写入。
源代码:
with open('A.txt', 'r') as f:
a = f.readline()
with open('B.txt', 'r') as f:
b = f.readline()
c = list(a + b)
c.sort()
d = ''.join(c)
with open('C.txt', 'w') as f:
f.write(d)
python练习实例100
题目:
列表转换为字典。
分析:
注意dict[i[j]] = l[j]这个语句,dict[key],key=i[j]。
源代码:
i = ['a', 'b']
l = [1, 2]
dict = {}
for j in range(len(i)):
dict[i[j]] = l[j]
print(dict)
结语:
经过整整一个月的坚持,我终于搞完了菜鸟100例,接下来稍作休整,继续进军力扣。
加油加油加油!