赞
踩
目录
今天开始打卡的第一天,希望能够一直坚持下去。
因为python这东西,只看不练是没什么效果的。所以我就先稍微复习了一些川川的教程,然后开始今天的案例。
有四个数字: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)
企业发放的奖金根据利润提成。利润(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)的值。
一个整数,它加上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)
编程往往需要运用数学知识对问题已知条件做合适的转化,来达到简单编程的目标。需要加强这方面的学习和应用。
输入某年某月某日,判断这一天是这一年的第几天?
首先要知道闰年这个概念:
普通闰年:能被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)
输入三个整数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特有的多元赋值语句解决,比较简单。
- 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)
将一个列表的数据复制到另一个列表中。
- a = [1, 23, 45, 265, 7]
- b = a.copy()
- print(b)
输出 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('')
暂停一秒输出。
利用time包的sleep暂停。
- import time
-
- num = [1, 2, 3, 4, 5, 6]
- for i in range(len(num)):
- print(num[i])
- time.sleep(1)
暂停一秒输出,并格式化当前时间。
用time包的格式化时间。
time.strftime(format, t)
- import time
-
- print(time.strftime('%Y-%m-%d %H:%M:%S'))
- time.sleep(1)
- print(time.strftime('%Y-%m-%d %H:%M:%S'))
古典问题:有一对兔子,从出生后第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)
判断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}个')
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如: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)
将一个正整数分解质因数。例如:输入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语句应该熟练掌握,考虑问题时要知道循环应该从哪里结束或者继续。
利用条件运算符的嵌套来完成此题:学习成绩>=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')
输出指定格式的日期。
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"))
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
通过比较计数。其中英文字母的大小写要分开用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}')
求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)
一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如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('')
一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
只要理清节点就很简单。
- h = 100
- s = 100
- for i in range(10):
- s += h
- h /= 2
- print(f's={s}')
- print(f'h={h}')
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
简单的逆向思维问题。
- x = 1
- for i in range(9):
- x = (x+1)*2
- print(x)
两个乒乓球队进行比赛,各出三人。甲队为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}')
打印出如下图案(菱形):
* *** ***** ******* ***** *** *
找出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))
有一分数序列: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)
求1+2!+3!+...+20!的和。
循环相乘求和。
- a = 1
- s = 0
- for i in range(1, 21):
- a *= i
- s += a
- print(s)
利用递归方法求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))
利用递归函数调用方式,将所输入的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)
有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))
给一个不多于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
一个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('不是回文数')
请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
我的思路是:创建一个可索引的列表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')
按相反的顺序输出列表的值。
- list1 = [1, 2, 3, 4, 5, 6]
- list2 = list1[::-1]
- print(list2)
按逗号分隔列表。
直接用‘,’.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中的内容。
练习函数调用。
使用函数,输出三次 RUNOOB 字符串。
- def many(n):
- for i in range(n):
- print('RUNOOB')
-
-
- if __name__ == '__main__':
- many(3)
文本颜色设置。
这属实触及到我的知识盲区了。学一下:
- 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)
求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)
对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)
求一个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)
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
既然是已经排好的数组,那么就可以直接比较插入了,插入完加个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)
将一个数组逆序输出。
列表的inverse方法,或者负索引也行。
- l = [1, 2, 3, 5, 6, 8, 9, 45]
- a = l[::-1]
- l.reverse()
- print(l)
- print(a)
模仿静态变量的用法。
首先我们要知道静态变量是什么。
C语言中,在函数内部可以定义static类型的变量,这个变量是属于这个函数的全局对象。在python中也可以实现这样的机制。
- class Student:
- school = 'NWPU'
-
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
-
- a = Student('张三', 20)
- print(a.school)
学习使用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()
可以看到,局部变量和全局变量虽然名称相同但互不影响。
模仿静态变量(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()
两个 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)
统计 1 到 100 之和。
他可能想考range的范围是左闭右开吧……
- s = 0
- for i in range(1, 101):
- s += i
- print(s)
求输入数字的平方,如果平方运算后小于 50 则退出。
需要设定死循环中断条件。
- def square(n):
- return n**2
-
-
- while 1:
- n = int(input('请输入数字:'))
- a = n**2
- print(a)
- if a < 50:
- break
两个变量值互换。
用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)
数字比较。
定义函数传参比较。
- 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)
'运行
使用lambda来创建匿名函数。
川川教程里有这个函数的讲解。
需要注意,这是一个需要传参的函数。
- def tri(n):
- return lambda a: a * n
-
-
- if __name__ == '__main__':
- trible = tri(3)
- print(trible(5))
输出一个随机数。
使用 random 模块可以输出各种各样的随机数。
- import random
-
- num = []
- for i in range(20):
- x = random.randint(1, 10)
- num.append(x)
- print(num)
学习使用按位与 & 。
按位与&是将数据转化为二进制,然后按位与。
比如十六进制88是10001000,与十进制5(00000101)按位与之后是0,与十六进制15(00001111)按位与之后是8
- x = 5
- y = 0x88
- z = x & y
- print(z)
- a = 0xf
- b = a & y
- print(b)
学习使用按位或 | 。
按位或 | 是将数据转化为二进制,然后按位或。
比如十六进制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)
学习使用按位异或 ^ 。
按位异或 ^ 是将数据转化为二进制,然后按位异或。
相异为一,相同为零。
比如十六进制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)
取一个整数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))
学习使用按位取反~。
完全是学习,因为忘完了。
说明:
二进制数在内存中以补码的形式存储。
按位取反:二进制每一位取反,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)
画图,学用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)
画图,学用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()
画图,学用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()
画图,综合例子。
说实话做到近期这一部分让我这个任务驱动型的人非常难受,什么叫做综合例子啊,没有一个明确的指示真的让我很难做事。
而且昨天做的三道题用的东西、演示代码什么的也很是奇怪,虽然应该是我学艺不精。
下面是不想做了,直接贴的演示代码。
- 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()
计算字符串长度。
用len函数。
- str1 = input('请输入字符串:')
- l = len(str1)
- print(f'字符串长度为{l}')
打印出杨辉三角形(要求打印出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:复制所有层的引用保存到另一个地址空间中。
浅拷贝和深拷贝,简单的区别就是:
当列表套列表的时候执行直接赋值或浅拷贝,改变源列表内列表的值,相应复制列表内列表的值也会改变。
用深拷贝,则复制列表不会改变。
查找字符串。
find函数返回查找字符串索引,如果找不到返回-1。
- str1 = '123keh565'
- print(str1.find('keh'))
- print(str1.find('0keh'))
画椭圆。
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()
利用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()
一个最优美的图案。
- 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()
输入3个数a,b,c,按大小顺序输出。
可以用sort函数,也可以自己定义一个函数。
- num = []
- for i in range(3):
- a = int(input(f'请输入第{i+1}个数:'))
- num.append(a)
- num.sort()
- print(num)
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
当定义一个函数的传递参数是列表时,传递过去的还是列表,可以用列表专用的函数。
- 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)
有 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)
有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)
写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
len函数。
- def L(string):
- long = len(string)
- return long
-
-
- if __name__ == "__main__":
- string = input('请输入字符串:')
- s = L(string)
- print(f'字符串长度为:{s}')
编写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)
创建一个链表。
- if __name__ == '__main__':
- ptr = []
- for i in range(5):
- num = int(input('please input a number:\n'))
- ptr.append(num)
- print(ptr)
反向输出一个链表。
列表专属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)
列表排序及连接。
排序可使用 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)
放松一下,算一道简单的题目。
- 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)
编写一个函数,输入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)
循环输出列表。
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)
找到年龄最大的人,并输出。请找出程序中有什么问题。
好像没找到什么问题……
- 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]))
字符串排序。
- 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)
海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?
演示代码中,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)
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}')
八进制转换为十进制。
将输入的字符串转化为列表以便索引,然后计算时用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)
求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)
连接字符串。
我理解的连接是+号
- delimiter = ','
- mylist1 = ['Brazil', 'Russia', 'India', 'China']
- mylist2 = ['Brazil', 'Russia', 'India', 'China']
- print(delimiter.join(mylist1))
- print(mylist1+mylist2)
输入一个奇数,然后判断最少几个 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
两个字符串连接程序。
这次是真的+号连接。
- if __name__ == '__main__':
- a = "acegikm"
- b = "bdfhjlnpq"
- c = a + b
- print(c)
回答结果(结构体变量传递)。
定义外部函数也依然可以改变类属性的值。
- 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)
读取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)
某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上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='')
列表使用实例。
推荐川川教程,我就粘一下列表部分吧。
- ### 创建 ###
- 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)
时间函数举例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())))
时间函数举例2。
计算循环打印3000次所需时间。
- if __name__ == '__main__':
- import time
-
- start = time.time()
- for i in range(3000):
- print(i)
- end = time.time()
-
- print(end - start)
时间函数举例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好了。
时间函数举例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.')
字符串日期转换为易读的日期格式。
- from dateutil import parser
- dt = parser.parse("Aug 28 2015 12:00AM")
- print(dt)
如果不是有这个函数,确实比较难办,字符串格式太多了。
计算字符串中子串出现的次数。
用一个count函数就可以解决。
- if __name__ == '__main__':
- str1 = input('请输入一个字符串:\n')
- str2 = input('请输入一个子字符串:\n')
- n = str1.count(str2)
- print(n)
从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。
当字符串没有#全部写入,有#则提取#前面的字符串写入。
- 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()
从键盘输入一个字符串,将小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。
upper函数,with open语句比较方便。
- string = input('请输入字符串:').upper()
- with open('test.txt', 'w+') as f:
- f.write(string)
有两个磁盘文件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)
列表转换为字典。
注意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例,接下来稍作休整,继续进军力扣。
加油加油加油!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。