Python 小练习 100 例 (边练习边更新)

(持续更新中……)
实践出真知呐

目录

      • 第1例: 排列组合
      • 第2例: 公司奖金计算
      • 第3例: 求符合要求的完全平方数
      • 第4例: 判断该日期为当年第几天
      • 第5例: 数字排序
      • 第6例: 斐波那契数列
      • 第7例: 九九乘法表
      • 第8例: 隔一秒输出时间
      • 第9例: 古典问题, 兔子生小兔子
      • 第10例: 素数
      • 第11例: 水仙花数
      • 第12例: 分解质因数
      • 第13例: 根据分数划分等级
      • 第14例: 输出指定格式的日期
      • 第15例: 统计字符串中的字母, 空格, 数字
      • 第16例: 求s=a+aa+aaa+aaaa+aa...a
      • 第17例: 完数
      • 第18例: 小球自由落体
      • 第19例: 猴子摘桃
      • 第20例: 编程序找出三队赛手的名单
      • 第21例: 打印菱形图案(待改进)
      • 第22例: 数列求和
      • 第23例: 求1+2!+3!+...+20!的和
      • 第24例: 递归应用
      • 第25例: 回文数
      • 第26例: 求一个矩阵对角线元素之和
      • 第27例: filter函数应用
      • 第28例: tkinter应用——计算器之排版
      • 第29例: tkinter应用——计算器之数字接收器
      • 第30例: tkinter应用——计算器之运算函数
      • 第31例: tkinter应用——计算器之获取运算结果函数
      • 第32例: tkinter应用——计算器之完整代码
      • 第33例: JSON格式提取数据
      • 第34例: 保存数据到本地CSV文件(os+csv)

第1例: 排列组合

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

代码片

count = 0
print("1、2、3、4可以组成的无重复三位数有:")
for x in range(1,5):
    for y in range(1,5):
        for z in range(1,5):
            if (x != y) and (x != z) and (y != z):
                print(x,y,z)
                count += 1
print("一共%d个数字。"%count)

运行结果

1、2、3、4可以组成的无重复三位数有:
1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
2 4 1
2 4 3
3 1 2
3 1 4
3 2 1
3 2 4
3 4 1
3 4 2
4 1 2
4 1 3
4 2 1
4 2 3
4 3 1
4 3 2
一共24个数字。

第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,求应发放奖金总数?

代码片

arr = [1000000, 600000, 400000, 200000, 100000, 0]
rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1]
i = int(input("请输入当月理论(单位:元):"))
thisarr = 0
for j in range(len(arr)):
    if i > arr[j]:
        thisarr += (i - arr[j])*rat[j]
        i = arr[j]
print("应发放奖金总数(单位:元):%d"%thisarr)

运行结果

请输入当月理论(单位:元):1200000
应发放奖金总数(单位:元):41500

第3例: 求符合要求的完全平方数

题目:一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少?

代码片

import math

for x in range(10000):
    a = int(sqrt(x+100))
    b = int(sqrt(x+268))
    if (a*a == x+100) and (b*b == x+268):
        print(x)

运行结果

21
261
1581

第4例: 判断该日期为当年第几天

题目:输入某年某月某日,判断这一天是这一年的第几天?

代码片

print("请输入日期:")
x = int(input("年:"))
y = int(input("月:"))
z = int(input("日:"))
list = [31,28,31,30,31,30,31,31,30,31,30,31]
days = sum(list[0:(y-1)])+ z
if x / 4 ==0:
	print("这一天是这一年的第%d天。"%(days+1))
else:
	print("这一天是这一年的第%d天。"%(days))

运行结果

这一天是这一年的第354天。

第5例: 数字排序

题目:输入三个整数 x,y,z,请把这三个数由小到大输出。

代码片

list = []
for i in range(3):
    x = int(input("请输入第%d个数字:"%(i+1)))
    list.append(x)
list.sort()
print("这三个数由小到大依次是:", list[0], list[1], list[2])

运行结果

请输入第1个数字:34
请输入第2个数字:23
请输入第3个数字:187
这三个数由小到大依次是: 23 34 187

第6例: 斐波那契数列

题目:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。

代码片

fib = [0,1]
i = int(input("您希望输出第几个斐波那契数?"))
if i > 2:
    for j in range(0,i):
        fib.append(fib[-1]+fib[-2])
else: pass
print("第%d个斐波那契数是%d。" % (i, fib[i - 1]))

运行结果

您希望输出第几个斐波那契数?10
第10个斐波那契数是34。

第7例: 九九乘法表

题目:输出9*9乘法口诀表

代码片

for i in range(1,10):
    for j in range(1,i+1):
        print("%d x %d = %d"%(i,j,i*j), end="\t")
    print()

运行结果

1 x 1 = 1
2 x 1 = 2 2 x 2 = 4
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9
4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16
5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25
6 x 1 = 6 6 x 2 = 12 6 x 3 = 18 6 x 4 = 24 6 x 5 = 30 6 x 6 = 36
7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49
8 x 1 = 8 8 x 2 = 16 8 x 3 = 24 8 x 4 = 32 8 x 5 = 40 8 x 6 = 48 8 x 7 = 56 8 x 8 = 64
9 x 1 = 9 9 x 2 = 18 9 x 3 = 27 9 x 4 = 36 9 x 5 = 45 9 x 6 = 54 9 x 7 = 63 9 x 8 = 72 9 x 9 = 81

第8例: 隔一秒输出时间

题目:暂停一秒输出。

代码片

import time

print(time.strftime('%H:%M:%S', time.localtime(time.time())))
time.sleep(1)
print(time.strftime('%H:%M:%S', time.localtime(time.time())))

运行结果

13:30:11
13:30:12

第9例: 古典问题, 兔子生小兔子

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
(自己比划了下, 还是个斐波那契数列)
代码片

mon = int(input("需要计算第几个月的兔子总数?"))
rat = [0,2]
for i in range(1,mon+1):
    rat.append(rat[-1]+rat[-2])
    print("第%d个月一共%d只兔子。" % (i, rat[i]))

运行结果

第1个月一共2只兔子。
第2个月一共2只兔子。
第3个月一共4只兔子。
第4个月一共6只兔子。
第5个月一共10只兔子。
第6个月一共16只兔子。
第7个月一共26只兔子。
第8个月一共42只兔子。
第9个月一共68只兔子。
第10个月一共110只兔子。

第10例: 素数

题目:判断101 - 200之间有多少个素数,并输出所有素数。
质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数

代码片

count = 0
print("101 - 200之间的素数有:")
for x in range(101,201):
    sqr = int(math.sqrt(x))
    for i in range(2,sqr+1):
        if x%i ==0:
            break
    else:
        print(x)
        count += 1
print("共%d个素数。"%count)

运行结果

101 - 200之间的素数有:
101
103
107
109
113
127
131
137
139
149
151
157
163
167
173
179
181
191
193
197
199
共21个素数。

第11例: 水仙花数

题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

代码片

for x in range(1,10):
    for y in range(0,10):
        for z in range(0,10):
            if (x**3 + y**3 + z**3) == (100*x + 10*y +z):
                print(100*x + 10*y +z)

运行结果

153
370
371
407

第12例: 分解质因数

题目: 将一个正整数分解质因数。例如:输入90,打印出90 = 2x3x3x5。

代码片

i,y=2,x
while i<=x//2:
    for j in range(x//2):
        if y%i==0 and y!=i:
            print("%dx"%i,end="")
            y=y//i # 如果使用,y=y/i,则y会转变为float
    i=i+1
print(y)

运行结果

请输入一个正整数:90
90分解质因数为:90 = 2x3x5x3

第13例: 根据分数划分等级

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示

代码片

score = float(input("请输入学生分数:"))
if score>=90 and score<=100:
    print("该同学分数等级为A")
elif score>=60 and score<90:
    print("该同学分数等级为B")
elif score>=0 and score<60:
    print("该同学分数等级为C")
else:
    print("分数输入错误!!!")

运行结果

请输入学生分数:97.5
该同学分数等级为A

第14例: 输出指定格式的日期

题目:输出指定格式的日期。

代码片

import time
print("请输入日期:")
year = int(input("年:"))
month = int(input("月:"))
day = int(input("日:"))
date = datetime.date(year, month, day).strftime('%Y-%m-%d, %B, %A')
# format %y requires year >= 1900 on Windows, %y(例:20), %Y(例:2020), %B(月份,例:December), %A(礼拜几,例:Wednesday)
print(date)

运行结果

请输入日期:
年:2121
月:12
日:31
2121-12-31, December, Wednesday

第15例: 统计字符串中的字母, 空格, 数字

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

代码片

str = input("请输入一串字符:")
letter, space, digit, other = 0, 0, 0, 0
for chacter in str:
    if chacter.isalpha():
        letter+=1
    elif chacter.isspace():
        space+=1
    elif chacter.isdigit():
        digit+=1
    else:
        other+=1
print("该字符串中包含%d字母、%d空格、%d数字、%d其他字符"%(letter, space, digit, other))

运行结果

请输入一串字符:123abcd *# 12 ab
该字符串中包含6字母、3空格、5数字、2其他字符

第16例: 求s=a+aa+aaa+aaaa+aa…a

题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

代码片

a = input("请输入1-9之间的任意整数。\n") # type(a) = string
        n = int(input("请问需要几个数字连续相加?\n"))
        str = "" # 用于接收若干个a组成的字符串
        sum = 0
        for num in range(0,n):
            str = str+a
            print("%s+"%str,end="") if num<n-1 else print("%s"%str,end="")
            sum += int(str)
        print("=%d"%sum)

运行结果

请输入1-9之间的任意整数。
3
请问需要几个数字连续相加?
7
3+33+333+3333+33333+333333+3333333=3703701

第17例: 完数

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

代码片

print("1000以内的完数有:")
count = 0 # 用于计算完数个数
# 先求该数的所有因子,并计算因子之和
for num in range(1,1000):
    sum = 0 # 作为所有因子之和的接收器
    for factor in range(1, num):
        if num%factor == 0:
            sum += factor
# 比较该数与其因子之和
    if sum == num:
# 输出符合要求的数
        print(num)
        count += 1
print("一共有%d个完数。"%count)

运行结果

1000以内的完数有:
6
28
496
一共有3个完数。

第18例: 小球自由落体

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

代码片

s = 0.0 # 第n次落地时,共经过多少米。变量类型定义为浮点型
h = 100.0 # 第n次反弹多高。变量类型定义为浮点型
for n in range(10):
    if n < 1:
        h = h
        s = s + h
    else:
        h = h/2
        s += h*2
print("小球第10次落地时%f米,第10次反弹%f米。"%((n+1), s, (n+1), h))

运行结果

小球第10次落地时299.609375米,第10次反弹0.195312米。

第19例: 猴子摘桃

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
(从最后一天开始倒推)

代码片

peach = 1 # 第 10天剩 1 个桃子
for day in range(9,0,-1):
    peach = (peach+1) *2
print("第一天有%d个桃子。"%peach)

运行结果

第一天有1534个桃子。

第20例: 编程序找出三队赛手的名单

题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

代码片

team2 = ['x', 'y', 'z']
for a in team2:
    if a != 'x': # a说他不和x比
        for b in team2:
            for c in team2:
                if c != b and c != a and b != a: # a,b,c对手不重复
                    if c != 'x' and c != 'z': # c说他不和x,z比
                        print('''
                        a vs %s
                        b vs %s
                        c vs %s
                        '''%(a, b, c))

运行结果

                   a vs z
                   b vs x
                   c vs y

第21例: 打印菱形图案(待改进)

题目:打印出如下图案(菱形)

代码片

blank = " "
asterisk = "*"
lenght = 11
for i in range(1,6):
    if 5%i == 0: print('%s%s'%(blank*5, asterisk))
    elif 4%i == 0: print('%s%s'%(blank*2, asterisk*7))
    else: print('%s'%(asterisk*11))
'''
输出在这.....
     * 			
  *******		
***********		
  *******		
     *			
'''

第22例: 数列求和

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
(就问熟不熟悉)

代码片

# t1 = a1/b1
# t2 = (a1+b1)/a1
# tn = (a(n-1)+b(n-1))/a(n-1)
a = 2.0
b = 1.0
t = 0.0
for n in range(20):
    t = t + a/b
    c = b
    b = a
    a = b + c # 即 a(n-1) + b(n-1)
print(t)

运行结果

32.66026079864164

第23例: 求1+2!+3!+…+20!的和

题目:求1+2!+3!+…+20!的和。

代码片

sum = 0
for i in range(1,21):
    tn = 1
    for j in range(1,i+1):
        tn *= j
    sum += tn
print("1+2!+3!+...+20!的和是", sum)

运行结果

1+2!+3!+…+20!的和是 2561327494111820313

第24例: 递归应用

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

代码片

# 定义一个递归函数
# 第一个人的年龄 a1,总共有n个人,an = a(n-1)+2
def age(person, firstPersonAge):
    # person: 总人数
    # firstPersonAge: 第一个人的年纪
    if person == 1:
        personAge = firstPersonAge
    else:
       personAge = age(person-1, firstPersonAge) + 2
    return personAge

fifthPersonAge = age(5,10)
print(fifthPersonAge)

运行结果

18

第25例: 回文数

题目:判断一个数是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

代码片

def palindrome(num):
    if num == num[::-1]:
        print("%s是一个回文数"%num)
    else:
        print("%s不是一个回文数"%num)

for i in range(3): # 做3次实验
    num = input("请输入一个正整数:")
    palindrome(num)

运行结果

请输入一个正整数:123321
123321是一个回文数
请输入一个正整数:12321
12321是一个回文数
请输入一个正整数:123445
123445不是一个回文数

第26例: 求一个矩阵对角线元素之和

题目:求一个3*3矩阵对角线元素之和。

代码片

list = []
for i in range(3):
    a = []

    for j in range(3):
        item = float(input("请输入矩阵第%d第%d列元素:"%(i+1,j+1)))
        a.append(item)

    list.append(a)

print("矩阵对角线元素之和:")
sum = 0
for i in range(3):
    sum += list[i][i]
    print("%f+"%list[i][i],end="") if i < 2 else print("%f="%list[i][i],end="")
print(sum)

运行结果

请输入矩阵第1第1列元素:12.32
请输入矩阵第1第2列元素:123.56
请输入矩阵第1第3列元素:12.2
请输入矩阵第2第1列元素:12.45
请输入矩阵第2第2列元素:123
请输入矩阵第2第3列元素:123.4432
请输入矩阵第3第1列元素:12.3476
请输入矩阵第3第2列元素:34.32
请输入矩阵第3第3列元素:45.34
矩阵对角线元素之和:
12.320000+123.000000+45.340000=180.66

第27例: filter函数应用

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

代码片

def firstLetter(x):
    return x[0] == kw1

def secondLetter(x):
    return x[1] == kw2

print("Match weekdays name...")
week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Satday", "Sunday"]
kw1 = input("Please input the first letter:").upper()
week_first = list(filter(firstLetter, week))

if len(week_first) > 1:
    kw2 = input("Please input the second letter:").lower()
    week_second = list(filter(secondLetter, week_first))
    print(week_second[0])
else:
    print(week_first[0])

运行结果

Please input the first letter:s
Please input the second letter:u
Sunday

第28例: tkinter应用——计算器之排版

题目:使用 tkinter 库创建应用框并设置简易UI。

代码片

import tkinter
class calculator():
    def __init__(self):
        self.window = tkinter.Tk() # 创建窗口
        self.window.title("计算器") # 给你的小窗口命个名
        self.window.geometry('500x550') # 设置窗口大小
        self.buttonlist = [] # 输入按钮
        self.layout() # 排版设计
        self.window.mainloop() # 主窗口循环显示,不然都看不见框……

    def button(self, buttonname, text, x, y, width, height):
        self.buttonname = buttonname
        self.buttonname = tkinter.Button(self.window, text = text,bg='#DCDCDC',font=("Caribi",11))
        self.buttonname.place(x = x, y = y,width = width, height = height)

    def layout(self):
        self.label = tkinter.Label(self.window, text = '简易计算器(以后加个menu)', background = "#DCDCDC", font = ("Caribi", 11))
        self.label.place(x = 50, y = 0, width = 400, height = 20)        # 放置部件
        self.result = tkinter.Text(self.window, show = None, background = "#F5F5F5")         # 输入框 & 结果框
        self.result.place(x = 50, y = 40, width = 400, height = 100)
        # 按钮
        self.buttonlist = [
            self.button('sign_percent','%',50,430,80,60),
            self.button('num0', '0', 150, 430,80,60),
            self.button('sign_point','.',250,430,80,60),
            self.button('num1','1',50,340,80,60),
            self.button('num2','2',150,340,80,60),
            self.button('num3','3',250,340,80,60),
            self.button('num4','4',50,250,80,60),
            self.button('num5','5',150,250,80,60),
            self.button('num6','6',250,250,80,60),
            self.button('num7','7',50,160,80,60),
            self.button('num8','8',150,160,80,60),
            self.button('num9','9',250,160,80,60),
            self.button('sign_plus','+',350,160,40,60),
            self.button('sign_minus','-',410,160,40,60),
            self.button('sign_multiple','*',350,250,40,60),
            self.button('sign_divide', '/', 410, 250,40,60),
            self.button('enter_button','Enter',350,340,100,150)
        ]

if __name__ == '__main__':
    calculator()

运行结果
Python 小练习 100 例 (边练习边更新)_第1张图片

第29例: tkinter应用——计算器之数字接收器

代码片

# 接上
def pressNum(self,num):  # 设置一个数字函数 判断是否按下数字 并获取数字将数字写在显示版上
    if self.isPressSign == False:
        pass
    else:  # 重新将运算符号状态设置为否
        self.result.set(0)
        self.isPressSign = False
    # 判断界面的数字是否为0
    oldnum = self.result.get()  # 第一步
    if oldnum == '0':  # 如过界面上数字为0 则获取按下的数字
        self.result.set(num)
    else:  # 如果界面上的而数字不是0  则链接上新按下的数字
        newnum = oldnum + num
        self.result.set(newnum)  # 将按下的数字写到面板中

第30例: tkinter应用——计算器之运算函数

代码片

# 接上
#运算函数
def pressCompute(self,sign):
    num = self.result.get()  #获取界面数字
    self.lists.append(num) #保存界面获取的数字到列表中
    self.lists.append(sign) #讲按下的运算符号保存到列表中
    self.isPressSign = True
    if sign =='CE':  #如果按下的是'AC'按键,则清空列表内容,讲屏幕上的数字键设置为默认数字0
        self.lists.clear()
        self.result.set(0)
    if sign =='Del': #如果按下的是退格‘’,则选取当前数字第一位到倒数第二位
        a = num[0:-1]
        self.lists.clear()
        self.result.set(a)

第31例: tkinter应用——计算器之获取运算结果函数

代码片

# 接上
def pressEqual(self):
    curnum = self.result.get() #设置当前数字变量,并获取添加到列表
    self.lists.append(curnum)
    computrStr = ''.join(self.lists) #讲列表内容用join命令将字符串链接起来
    endNum = eval(computrStr)  #用eval命令运算字符串中的内容
    self.result.set(endNum)  #讲运算结果显示到屏幕1
    self.result2.set(computrStr)  #将运算过程显示到屏幕2
    self.lists.clear()  #清空列表内容

第32例: tkinter应用——计算器之完整代码

代码片

**题目: 附上完整的计算器函数(有Bug……)
**代码片**:
```python
# -*- coding: UTF-8 -*-

import tkinter
class calculator():
    def __init__(self):
        self.window = tkinter.Tk() # 创建窗口
        self.window.title("计算器") # 给你的小窗口命个名
        self.window.geometry('300x440') # 设置窗口大小
        self.result = tkinter.StringVar() # 输出结果
        self.result.set(0)
        self.result2 = tkinter.StringVar()  # 显示面板显示结果2,用于显示计算过程
        self.result2.set('')
        self.buttonlist = [] # 输入按钮
        self.layout() # 排版设计
        # 操作函数
        self.lists = []  # 设置一个变量 保存运算数字和符号的列表
        self.isPressSign = False  # 添加一个判断是否按下运算符号的标志,假设默认没有按下按钮
        self.isPressNum = False
        self.window.mainloop() # 主窗口循环显示,不然都看不见框……

    def button(self, buttonname, text, x, y, width, height, color, command):
        self.buttonname = buttonname
        self.buttonname = tkinter.Button(self.window, text = text,bg=color,font=("Caribi",11),command = command)
        self.buttonname.place(x = x, y = y,width = width, height = height)

    def layout(self):
        self.label0 = tkinter.Label(self.window, text = '简易计算器', background = "#F8F8FF", font = ("Caribi", 11))
        self.label0.place(x = 0, y = 0, width = 300, height = 20)
        # 输入框
        self.label = tkinter.Label(self.window, font=('微软雅黑', 20), bg='#fff', bd='9', fg='#828282', anchor='se',
                             textvariable=self.result2)
        self.label.place(x = 0, y = 20, width=300, height=120)
        # 结果框
        self.label2 = tkinter.Label(self.window, font=('微软雅黑', 30), bg='#fff', bd='9', fg='black', anchor='se',
                               textvariable=self.result)
        self.label2.place(x = 0, y = 140, width=300, height=60)
        # 按钮
        self.buttonlist = [
            # line 1
            self.button('num7', '7', 0, 200, 60, 60, '#F8F8FF', lambda:self.pressNum('7')),
            self.button('num8', '8', 60, 200, 60, 60, '#F8F8FF', lambda:self.pressNum('8')),
            self.button('num9', '9', 120, 200, 60, 60, '#F8F8FF', lambda:self.pressNum('9')),
            self.button('sign_CE', 'CE', 180, 200, 60, 60, '#F8F8FF', lambda:self.pressCompute('CE')),
            self.button('sign_del', 'Del', 240, 200, 60, 60, '#F8F8FF', lambda:self.pressCompute('Del')),
            # line 2
            self.button('num4', '4', 0, 260, 60, 60, '#F8F8FF', lambda:self.pressNum('4')),
            self.button('num5', '5', 60, 260, 60, 60, '#F8F8FF', lambda:self.pressNum('5')),
            self.button('num6', '6', 120, 260, 60, 60, '#F8F8FF', lambda:self.pressNum('6')),
            self.button('sign_multiple', '*', 180, 260, 60, 60, '#F8F8FF', lambda:self.pressCompute('*')),
            self.button('sign_divide', '/', 240, 260, 60, 60, '#F8F8FF', lambda:self.pressCompute('/')),
            # line 3
            self.button('num1','1', 0, 320, 60, 60, '#F8F8FF', lambda:self.pressNum('1')),
            self.button('num2','2',60, 320, 60, 60, '#F8F8FF', lambda:self.pressNum('2')),
            self.button('num3','3',120, 320, 60, 60, '#F8F8FF', lambda:self.pressNum('3')),
            self.button('sign_plus', '+', 180, 320, 60, 60, '#F8F8FF', lambda:self.pressCompute('+')),
            # line 4
            self.button('sign_percent', '%', 0, 380, 60, 60, '#F8F8FF', lambda:self.pressCompute('%')),
            self.button('num0', '0', 60, 380, 60, 60, '#F8F8FF', lambda:self.pressNum('0')),
            self.button('sign_point', '.', 120, 380, 60, 60, '#F8F8FF', lambda:self.pressCompute('.')),
            self.button('sign_minus', '-', 180, 380, 60, 60, '#F8F8FF', lambda:self.pressCompute('-')),
            # enter
            self.button('enter_button','Enter',240, 320, 60, 120, '#E6E6FA', lambda:self.pressEqual())
        ]

    # 数字函数
    def pressNum(self,num):  # 设置一个数字函数 判断是否按下数字 并获取数字将数字写在显示版上
        if self.isPressSign == False:
            pass
        else:  # 重新将运算符号状态设置为否
            self.result.set(0)
            self.isPressSign = False
        # 判断界面的数字是否为0
        oldnum = self.result.get()  # 第一步
        if oldnum == '0':  # 如过界面上数字为0 则获取按下的数字
            self.result.set(num)
        else:  # 如果界面上的而数字不是0  则链接上新按下的数字
            newnum = oldnum + num
            self.result.set(newnum)  # 将按下的数字写到面板中
    #运算函数
    def pressCompute(self,sign):
        num = self.result.get()  #获取界面数字
        self.lists.append(num) #保存界面获取的数字到列表中
        self.lists.append(sign) #讲按下的运算符号保存到列表中
        self.isPressSign = True
        if sign =='CE':  #如果按下的是'AC'按键,则清空列表内容,讲屏幕上的数字键设置为默认数字0
            self.lists.clear()
            self.result.set(0)
        if sign =='Del': #如果按下的是退格‘’,则选取当前数字第一位到倒数第二位
            a = num[0:-1]
            self.lists.clear()
            self.result.set(a)
    # 获取运算结果函数
    def pressEqual(self):
        curnum = self.result.get() #设置当前数字变量,并获取添加到列表
        self.lists.append(curnum)
        computrStr = ''.join(self.lists) #讲列表内容用join命令将字符串链接起来
        endNum = eval(computrStr)  #用eval命令运算字符串中的内容
        self.result.set(endNum)  #讲运算结果显示到屏幕1
        self.result2.set(computrStr)  #将运算过程显示到屏幕2
        self.lists.clear()  #清空列表内容

if __name__ == '__main__':
    calculator()

运行结果
Python 小练习 100 例 (边练习边更新)_第2张图片

第33例: JSON格式提取数据

数组通过index提取数据,JSON通过键名提取数据。
数据需逐层提取。
代码片

**题目: 
**代码片**:
```python
# -*- coding: UTF-8 -*-
json_Example={
    "id":1,
    "name":"Kitty",
    "info":[
        {
            "gender":"女"
        },
        {
            "birth":"2000-01-01"
        }
    ]
}
id=json_Example["id"] # 通过键名提取数据
print(id)
# name=json_Example[1] # 通过index提取数据 --报错
# print(name)
gender=json_Example["info"][0]["gender"]
print(gender)

运行结果
1

第34例: 保存数据到本地CSV文件(os+csv)

接上面的例子
代码片

**题目: 
**代码片**:
```python
# -*- coding: UTF-8 -*-
json_Example={
    "id":1,
    "name":"Kitty",
    "info":[
        {
            "gender":"女"
        },
        {
            "birth":"2000-01-01"
        }
    ]
}
with open(file,'a',newline="") as file: # newline="":保存数据时去除空行
    writer=csv.writer(file)
# writer.writerow(需要保存的数据变量)
    writer.writerows(json_Example) # 数据取键名,一个字母一列
    writer.writerow("")
    # 数据取键名,一个字段一列      下面两行代码运行相同
    writer.writerow(json_Example)
    writer.writerow(json_Example.keys())

运行结果
Python 小练习 100 例 (边练习边更新)_第3张图片

你可能感兴趣的:(Python,python)