Python - 经典程序示例

 

 

  • 列表排序
 1 def que6():
 2     # 6.输入三个整数x, y, z,形成一个列表,请把这n个数由小到大输出。
 3     # 程序分析:列表有sort方法,所以把他们组成列表即可。
 4     li = np.random.randint(-100, 100, size=10)
 5     # 就地转化
 6     li = li.tolist()
 7     # 用sort()结果
 8     li_sort = sorted(li, reverse = False)
 9     print('用sort方法,重新排列结果:{}'.format(li_sort))
10 
11     # 不用sort方法,自己写排序方法做,
12 
13     # 冒泡排序
14     def bubbleSort(m):
15         m = m.copy()
16         for time in range(1, len(m)):
17             for index in range(len(m) - time):
18                 if m[index] > m[index+1]:
19                     m[index], m[index+1] = m[index+1] , m[index]
20         return  m
21 
22     # 选择排序
23     def selectSort(m):
24         m = m.copy()
25         for seat_L in range(len(m)-1):
26             for seat_R in range(seat_L+1, len(m)):
27                 if m[seat_L] > m[seat_R]:
28                     m[seat_L], m[seat_R] = m[seat_R], m[seat_L]
29         return m
30 
31     # 插入排序1(内部写成函数):
32     def insertSort_1(m):
33         result = []
34 
35         # 单个元素k插入列表li
36         def to_insert(li, k):
37             # 标识符
38             tab = False
39 
40             # 寻找插入位置
41             # 循环次数应该至少大于列表长度+1,None也占一位(空列表),即认为扑克牌最末尾还有一张‘空牌’
42             for i in range(len(li) + 1):
43                 # 修改标识符,标志‘遍历完后的下一个循环’,即在和‘空牌’比较
44                 if i == (len(li)):
45                     tab = True
46 
47                 # 如果在对li[-1]比较完成(包含)之前,且寻找到位置,即把扑克从左往右比较一遍
48                 if not tab and k < li[i]:
49                     li.insert(i, k)
50                     break
51             # 如果遍历完成,多循环一次,即和‘空牌’不需要比较,直接把牌替换掉‘空牌’
52             if tab:
53                 li.append(k)
54             return li
55         # 遍历列表
56         # result = result[:1]
57         for length in range(len(m)):
58             result = to_insert(result, m[length])
59 
60             # print(result,m[length])
61         return result
62 
63     # 插入排序2(直接嵌套循环):
64     def insertSort2(m):
65         m = m.copy()
66         result = m[:1]
67         for index_choose in range(1, len(m)):
68             # 手上已经有index_choose张牌,比较第index_choose+1张牌则append
69             # 逐个比对手上的牌,如果都对比了一遍,则加到最后
70             for index_insert in range(len(result) + 1):
71                 print(result, index_insert,'\n',m, index_choose,'\n\n')
72                 if index_insert != index_choose and m[index_choose] < result[index_insert] :
73                     result.insert(index_insert, m[index_choose])
74                     break
75                 if index_insert == index_choose:
76                     result.append(m[index_choose])
77             # print(result, m[index_choose])
78         return result
79 
80   
81 
82     # print(li)
83     print('插入排序:',insertSort3(li))
84     print('选择排序:',selectSort(li))
85     print('冒泡排序:',bubbleSort(li))
86 que6()

 

  • 调换字典键值
 1 # 1. 调换元素.\
 2 def que1():
 3     d={1:"one",2:"two"}
 4 
 5     # 方法1 --- 动态赋值
 6     def method1(d):
 7         d = d.copy()
 8         result = {}
 9         for k,v in d.items():
10             result[v] = k
11         return result
12 
13     # 方法2 --- 生成器
14     def method2(d):
15         d = d.copy()
16         result = {v:k for k,v in d.items()}
17         return result
18 
19     # 方法3 --- 由值寻找键
20     def method3(d):
21         d = d.copy()
22         # 由键寻找值
23         def match(dic, b):
24             return [k for k,v in dic.items() if v == b]
25         # 先生成key-None,再赋值
26         result = {}
27         result = result.fromkeys(d.values())
28         for k in result.keys():
29             result[k] = match(d, k)[0]
30         return result
31 
32     # 方法4 --- 列表转字典 < 直接转换/动态赋值 >
33     def method4(d):
34         d = d.copy()
35         key = d.keys()
36         val = d.values()
37         data = list(zip(key, val))
38 
39         # 方法4-1
40         result1 = {}
41         for i in range(len(data)):
42             result1[data[i][1]] = data[i][0]
43 
44         # 方法4-2
45         result2 = dict(zip(val, key))
46 
47         return result1, result2
48 
49     print('新列表动态赋值方法:{}'.format(method1(d)))
50     print('生成器方法:{}'.format(method2(d)))
51     print('由键寻值方法:{}'.format(method3(d)))
52     print('动态赋值列表转字典方法:{}'.format(method4(d)[0]))
53     print('直接列表转字典方法:{}'.format(method4(d)[1]))
54 # que1()

 

  • 删除列表中的重复元素
 1 # 3. 删除重复元素list =[1,2,5,4,1,5,6,8,0,2,5]
 2 a = np.random.randint(-100, 100, size=10)
 3 a = a.tolist()
 4 
 5 def method1(a):
 6     a = a.copy()
 7     a = set(a)
 8     return a
 9 def method2(a):
10     b = a.copy()
11     c = 0
12     for i in range(len(a)-1):
13         if b[i+c] in b[:i+c]+b[i+c+1:]:
14             b.pop(i+c)
15             c -= 1
16     return b
17 print('集合法:',method1(a))
18 print('遍历法:',method2(a))

 

 

 

  • 输出质数
 1 def prime(end):
 2 
 3     prime_list = []
 4     if end <= 1:
 5         print('必须大于1')
 6     else:
 7         # prime_list.append(2)
 8         for i in range(2, end+1, 1):
 9             count = 0
10             if i == 2:
11                 if i%2 != 0:
12                     prime_list.append(2)
13             else:
14                 for m in range(2, i):
15                     # 能够整除,则跳出循环
16                     if (i % m) == 0:
17                         # print(i, m)
18                         break
19                     # 否则计数+1
20                     else:
21                         count += 1
22                     # 判断是否整除完成(0/n)
23                     if count == i - 2:
24                         prime_list.append(i)
25 
26                     print(count, i, m)
27 
28     return (prime_list)
29 
30 num = int(input('想输出2到多少?'))
31 print(prime(num))

 

  • 判断是一年中第几天
 1 def que3():
 2     # 3.输入某年某月某日,判断这一天是这一年的第几天?:
 3     # 闰年判断函数
 4     def judge_leap(num):
 5         date = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
 6         # (四年一闰 and not百年) or 四百年闰
 7         if (num % 4 == 0 and num % 100 != 0) or num % 400 ==0:
 8             date[1] =29
 9         return date
10 
11     # 格式转换
12     date = (input('请输入一个日期,格式如:“2018.02.12”:'))
13     date_list = (list(map(int, (date.split('.')))))
14     # 遍历计算天数
15     day = date_list[2]
16     for i in range(date_list[1]):
17         day += judge_leap(date_list[0])[i]
18     print('{}月{}日是{}年的第{}天\n'.format(date_list[1], date_list[2], date_list[0], day))
19 # que3()

 

 

 

  • 猜数字
 1 # 重新猜数字
 2 import random
 3 
 4 def judge_num(num, num_random):
 5     if num > num_random:
 6         print('It\'s too big')
 7         return 1
 8     elif num < num_random:
 9         print('It\'s too small')
10         return 1
11     else:
12         print("Congratulation!! That\' right!")
13         return 0
14 
15 # 产生随机数
16 num_start = int(input('Digital lower limit of guess number:\n'))
17 num_end = int(input('Digital upper limit of guess number:\n'))
18 num_random = random.randint(num_start, num_end)
19 
20 # 参数初始化
21 result = 1      # 判断结果
22 i = 0           # 循环次数
23 frequency = 3   # 循环限制次数
24 
25 # 提示总猜测次数、剩余次数
26 print('WARNING: You have【{}】 chances you guess '.format(frequency), end = '--&&>>--')
27 print('【{}】 chances left now:\n'.format(frequency - i +1))
28 
29 while result and i != frequency:
30     # 猜数字
31     num = int(input('Please guess a int_number:\n'))
32     result = judge_num(num, num_random)
33     i += 1

 

  • 进制转换
 1 # 任意进制转十进制
 2 def other_to_decimal(hex, num):
 3     # 整型转化为列表,
 4     num_str = str(num)
 5     # map()将List对象中的元素(list类型)转化为集合(set)类型
 6     num_list = list(map(int, num_str))
 7     # 列表反序
 8     num_list = num_list[::-1]
 9     print(list(map(int, num_str)))
10 
11     # 获取数字位数
12     digit = len(num_list)
13     num_decimal = 0
14 
15     # 累加
16     for i in range(digit):
17         numi = num_list[i]
18         # print(numi, hex**i)
19         num_decimal += numi*(hex**i)   # 对每一位数的幂指数累加
20 
21     return num_decimal
22 
23 # 十进制转任意进制
24 def decimal_to_other(hex, num):
25     # 获取数字位数
26     digit = len(str(num))
27 
28     num_hex = []
29     quotient = 1
30 
31     # 相除,余数计入列表num_hex
32     while quotient:
33         # 取余和取商
34         quotient = num // hex
35         remainder = num % hex
36         # print(quotient, remainder)
37         # 余数计入列表
38         num_hex.append(remainder)
39         # 商做下一次循环
40         num = quotient
41 
42     # 列表反序,通过切片和sort()函数可以实现
43     num_hex = num_hex[::-1]
44     # num_hex.sort(reverse=True)
45 
46     # 如果超过十进制,用ASCII码转化为字母
47     for i in range(len(num_hex)):
48         if num_hex[i] > 9:
49             num_hex[i] = chr(int(num_hex[i])+87)
50     # print(num_hex)
51 
52     # 列表转化为字符串
53     result = (''.join('%s' %m for m in num_hex))
54     return result
55 
56 
57 Type = bool(input("十进制转任意进制请输入1,任意进制转十进制请输入0\n"))
58 if Type:
59     hex = int(input("需要把十进制转换为多少进制?请输入正整数\n"))
60     num = int(input("需要转换的数字是:"))
61     print("换算结果是:", decimal_to_other(hex, num))
62 else:
63     hex = int(input("需要把多少进制转换为十进制?请输入正整数\n年"))
64     num = int(input("需要转换的数字是:"))
65     print("换算结果是:", other_to_decimal(hex, num))

 




转载于:https://www.cnblogs.com/geoffreyone/p/9899784.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值