├── case_00 ├── sub_10.py ├── sub_8.py ├── sub_6.py ├── sub_3.py ├── sub_5.py ├── sub_1.py ├── sub_7.py ├── sub_9.py ├── sub_4.py └── sub_2.py ├── case_20 ├── sub_27.py ├── sub_25.py ├── sub_24.py ├── sub_30.py ├── sub_28.py ├── sub_26.py ├── sub_29.py ├── sub_21.py ├── sub_23.py └── sub_22.py ├── case_10 ├── sub_19.py ├── sub_11.py ├── sub_13.py ├── sub_18.py ├── sub_14.py ├── sub_15.py ├── sub_12.py ├── sub_20.py ├── sub_16.py └── sub_17.py ├── .gitattributes ├── .gitignore └── readme.md /case_00/sub_10.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:格式化输出当前时间。 3 | ''' 4 | 5 | import time 6 | 7 | format = '%Y-%m-%d %H:%M:%S' 8 | local = time.localtime(time.time()) 9 | 10 | print(time.strftime(format, local)) 11 | -------------------------------------------------------------------------------- /case_00/sub_8.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:输出 9*9 乘法口诀表。 3 | ''' 4 | 5 | for i in range(1, 10): 6 | for j in range(1, i + 1): 7 | exp = '%d * %d = %d' % (i, j, i * j) 8 | print(exp, end='\t') 9 | print() 10 | -------------------------------------------------------------------------------- /case_00/sub_6.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:斐波那契数列。 3 | ''' 4 | 5 | arr = [0, 1] 6 | 7 | tmp, num = 0, 1 8 | 9 | dep = 20 # 数列长度 10 | 11 | for i in range(dep - 2): 12 | tmp, num = num, tmp + num 13 | arr.append(num) 14 | 15 | print(arr) 16 | -------------------------------------------------------------------------------- /case_00/sub_3.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少? 3 | ''' 4 | 5 | import math 6 | 7 | for i in range(10000): 8 | n = math.sqrt(i + 100) 9 | m = math.sqrt(i + 268) 10 | if n % 1 == 0 and m % 1 == 0: 11 | print(i) 12 | -------------------------------------------------------------------------------- /case_20/sub_27.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。 3 | ''' 4 | 5 | 6 | def reverse(str): 7 | if len(str) == 0: 8 | return str 9 | return reverse(str[1:]) + str[0] 10 | 11 | 12 | poetry = input('五言绝句:') 13 | print(reverse(poetry)) 14 | -------------------------------------------------------------------------------- /case_00/sub_5.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 3 | ''' 4 | 5 | arr_str = input('请输入三个整数:\n') 6 | 7 | arr = arr_str.split() 8 | 9 | for i in range(len(arr)): 10 | arr[i] = int(arr[i]) 11 | 12 | arr.sort(reverse=False) 13 | 14 | print('排序结果:\n' + str(arr)) 15 | -------------------------------------------------------------------------------- /case_20/sub_25.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:求1+2!+3!+...+20!的和。 3 | ''' 4 | 5 | from math import factorial 6 | 7 | arr = [] # 阶乘列表 8 | 9 | for i in range(1, 21): 10 | arr.append(factorial(i)) 11 | 12 | exp = '1! + 2! + 3! + ... + 20!' 13 | print('{0} = {1}'.format(exp, sum(arr))) 14 | -------------------------------------------------------------------------------- /case_00/sub_1.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 3 | ''' 4 | 5 | for a in range(1, 5): 6 | for b in range(1, 5): 7 | for c in range(1, 5): 8 | if a != b and b != c and a != c: 9 | print(a, b, c) 10 | pass 11 | pass 12 | -------------------------------------------------------------------------------- /case_10/sub_19.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:编程找出1000以内的所有完数。 3 | ''' 4 | 5 | RAN = 1000 # 完数范围 6 | 7 | for i in range(2, RAN + 1): 8 | l = [] # 因数列表 9 | for j in range(1, i): 10 | if (i % j) == 0: 11 | l.append(j) 12 | if sum(l) == i: 13 | print(i, ':', l) 14 | -------------------------------------------------------------------------------- /case_20/sub_24.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 3 | ''' 4 | 5 | arr = [] # f(n)/g(n) = (f(n-1) + g(n-1))/f(n-1) 6 | 7 | fn, gn = 1, 1 8 | 9 | for i in range(20): 10 | fn, gn = fn + gn, fn 11 | arr.append('%d/%d' % (fn, gn)) 12 | 13 | print(eval('+'.join(arr))) 14 | -------------------------------------------------------------------------------- /case_10/sub_11.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 3 | 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 4 | ''' 5 | 6 | f1, f2 = 1, 1 7 | for i in range(1, 22): 8 | print('%12ld %12ld' % (f1, f2), end='') 9 | if (i % 3) == 0: 10 | print() 11 | f1 = f1 + f2 12 | f2 = f1 + f2 13 | -------------------------------------------------------------------------------- /case_10/sub_13.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:打印出所有的"水仙花数" 3 | ''' 4 | 5 | arr = list() 6 | 7 | for i in range(100, 1000): 8 | a = int(i / 100) % 10 9 | b = int(i / 10) % 10 10 | c = int(i / 1) % 10 11 | if i == a ** 3 + b ** 3 + c ** 3: 12 | arr.append(i) 13 | 14 | print('水仙花数:' + str(arr)) 15 | -------------------------------------------------------------------------------- /case_20/sub_30.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:一个5位数,判断它是不是回文数。 3 | ''' 4 | 5 | num = str(int(input('输入数字:'))) 6 | 7 | # 判断是否为回文 8 | def palindrome(s): 9 | for i in range(len(s) // 2): 10 | if s[i] != s[-i - 1]: 11 | return False 12 | return True 13 | 14 | 15 | print('是否为回文数:', palindrome(num)) 16 | -------------------------------------------------------------------------------- /case_00/sub_7.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:将一个列表的数据复制到另一个列表中。 3 | ''' 4 | 5 | origin = ['javascript', 'php', 'python'] 6 | refer = origin 7 | copy = origin[:] # origin.copy() 8 | 9 | print('变量(0x%x): %s' % (id(origin), str(origin))) 10 | print('引用(0x%x): %s' % (id(refer), str(refer))) 11 | print('复制(0x%x): %s' % (id(copy), str(copy))) 12 | -------------------------------------------------------------------------------- /case_20/sub_28.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。 3 | 问第4个人岁数,他说比第3个人大2岁。 4 | 问第三个人,又说比第2人大两岁。 5 | 问第2个人,说比第一个人大两岁。 6 | 最后问第一个人,他说是10岁。 7 | 请问第五个人多大? 8 | ''' 9 | 10 | 11 | # f(n) = f(n-1) + 2 12 | 13 | def age(n): 14 | if n == 1: 15 | return 10 16 | return age(n - 1) + 2 17 | 18 | 19 | print(age(5)) 20 | -------------------------------------------------------------------------------- /case_20/sub_26.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:利用递归方法求5!。 3 | ''' 4 | 5 | 6 | def factor(n): 7 | if not isinstance(n, (int)): 8 | raise TypeError() 9 | if n < 1: 10 | raise Exception() 11 | if n == 1: 12 | return 1 13 | return factor(n - 1) * n 14 | 15 | 16 | n = 5 17 | 18 | print('%d! = %d' % (n, factor(n))) 19 | -------------------------------------------------------------------------------- /case_10/sub_18.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。 3 | ''' 4 | 5 | a = int(input('input a: ')) 6 | n = int(input('input n: ')) 7 | 8 | x = 0 # 各项值 9 | l = [] # 值集合 10 | 11 | for i in range(n): 12 | x += a * (10 ** i) 13 | l.append(x) 14 | 15 | exp = ' + '.join(map(str, l)) 16 | res = sum(l) 17 | 18 | print('%s = %d' % (exp, res)) 19 | -------------------------------------------------------------------------------- /case_20/sub_29.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:给一个不多于5位的正整数 3 | 要求:一、求它是几位数,二、逆序打印出各位数字。 4 | ''' 5 | 6 | num = int(input('正整数:')) 7 | 8 | arr = [] # num 的每一位 9 | 10 | while num != 0: 11 | arr.insert(0, str(num % 10)) 12 | num = num // 10 13 | 14 | print('%s 为 %d 位数' % (''.join(arr), len(arr))) 15 | 16 | arr.reverse() # 反向列表中元素 17 | 18 | print('倒序输出', ''.join(arr)) 19 | -------------------------------------------------------------------------------- /case_20/sub_21.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 3 | 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 4 | 以后每天早上都吃了前一天剩下的一半零一个。 5 | 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 6 | ''' 7 | 8 | # f(n) = (f(n + 1) / 2) - 1 9 | 10 | arr = [] # 每天剩余桃子数 11 | arr.insert(0, 1) 12 | 13 | for i in range(9, 0, -1): 14 | n = (arr[0] + 1) * 2 15 | arr.insert(0, n) 16 | 17 | print(arr) 18 | -------------------------------------------------------------------------------- /case_20/sub_23.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:利用循环打印菱形 3 | ''' 4 | 5 | SIZE = 5 6 | SHOW = ' *' 7 | HIDE = ' ' 8 | 9 | # 坐标系构建法 10 | for y in range(SIZE - 1, -SIZE, -1): 11 | for x in range(-SIZE + 1, SIZE, 1): 12 | if (y > x - SIZE) and (y < x + SIZE) and \ 13 | (y > -x - SIZE) and (y < -x + SIZE): 14 | print(SHOW, end='') 15 | else: 16 | print(HIDE, end='') 17 | print() 18 | -------------------------------------------------------------------------------- /case_10/sub_14.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 3 | ''' 4 | 5 | num = int(input('input num: ')) 6 | arr = [] # 质因数列表 7 | 8 | tmp = num 9 | while tmp != 1: 10 | pri = 2 11 | while pri != (num + 1): 12 | if (tmp % pri) == 0: 13 | tmp = tmp // pri 14 | arr.append(pri) 15 | else: 16 | pri += 1 17 | 18 | exp = ' * '.join(map(str, arr)) 19 | print('%d = %s' % (num, exp)) 20 | -------------------------------------------------------------------------------- /case_10/sub_15.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:利用条件运算符的嵌套来完成此题: 3 | 学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 4 | ''' 5 | 6 | score = int(input('输入成绩:')) 7 | rank = None 8 | 9 | if 0 <= score and score < 60: 10 | rank = 'C' 11 | elif 60 <= score and score < 90: 12 | rank = 'B' 13 | elif 90 <= score and score <= 100: 14 | rank = 'A' 15 | 16 | if rank != None: 17 | print('%d 属于等级 %s' % (score, rank)) 18 | else: 19 | print('成绩应在 0-100 之间') 20 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /case_10/sub_12.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:判断101-200之间有多少个素数,并输出所有素数。 3 | ''' 4 | 5 | from math import sqrt 6 | 7 | min = 101 8 | max = 200 9 | 10 | prime = list() 11 | 12 | for i in range(min, max + 1): 13 | temp = int(sqrt(i)) 14 | flag = True # 是否为素数 15 | for j in range(2, temp + 1): 16 | if (i % j) == 0: 17 | flag = False 18 | break 19 | if flag == True: 20 | prime.append(i) 21 | 22 | print('%d-%d 之间共有 %d 个素数' % (min, max, len(prime))) 23 | print(prime) 24 | -------------------------------------------------------------------------------- /case_00/sub_9.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:模拟Linux用户登录。 3 | ''' 4 | 5 | import time 6 | 7 | global user, name 8 | 9 | user = { 10 | 'woider': '3243', 11 | } 12 | 13 | 14 | def login(): 15 | global name 16 | name = input('Username:') 17 | pswd = input('Password:') 18 | if name not in user: 19 | return False 20 | return user[name] == pswd 21 | 22 | 23 | while (not login()): 24 | time.sleep(3) # 暂停3秒 25 | print('Authentication failure') 26 | 27 | print(name + '@localhost:~$') 28 | -------------------------------------------------------------------------------- /case_10/sub_20.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半; 3 | 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 4 | ''' 5 | 6 | h = 100 # 自由落体高度 7 | n = 10 # 落地次数 8 | 9 | s = [] # 每次下落高度 10 | 11 | for i in range(n): 12 | s.append(h) 13 | h /= 2 14 | 15 | print('总高度:', 2 * sum(s) - s[0]) 16 | print('反弹高度:', s[-1] / 2) 17 | 18 | # 等比数列求解法 19 | q = 1 / 2 20 | a1 = 100 21 | 22 | a11 = a1 * (q ** (11 - 1)) 23 | s10 = a1 * ((1 - q ** 10) / (1 - q)) 24 | 25 | print('总高度:', 2 * s10 - a1) 26 | print('反弹高度:', a11) 27 | -------------------------------------------------------------------------------- /case_10/sub_16.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:输出指定格式的日期。 3 | ''' 4 | 5 | import datetime 6 | 7 | # 日期格式 8 | form = '%Y-%m-%d' 9 | 10 | # 日期对象 11 | date1 = datetime.date(1945, 8, 15) 12 | print('抗战胜利:', date1.strftime(form)) 13 | 14 | # 日期运算 15 | date2 = date1 + datetime.timedelta(days=18) 16 | print('二战结束:', date2.strftime(form)) 17 | 18 | # 日期替换 19 | date3 = date2.replace(year=1949, month=10, day=1) 20 | print('开国大典:', date3.strftime(form)) 21 | 22 | # 当前日期 23 | date4 = datetime.date.today() 24 | print('当前日期:', date4.strftime(form)) 25 | -------------------------------------------------------------------------------- /case_00/sub_4.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:输入某年某月某日(yyyy-MM-dd),判断这一天是这一年的第几天? 3 | ''' 4 | 5 | cal = input('日期:') 6 | 7 | date = cal.split('-') # 拆分日期 8 | 9 | year = int(date[0]) 10 | month = int(date[1]) 11 | day = int(date[2]) 12 | 13 | arr = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 14 | 15 | num = 0 16 | 17 | if ((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0): 18 | arr[2] = 29 19 | 20 | for i in range(1, len(arr)): 21 | if month > i: 22 | num += arr[i] 23 | else: 24 | num += day 25 | break 26 | 27 | print('天数:', num) 28 | -------------------------------------------------------------------------------- /case_00/sub_2.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%; 3 | 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%; 4 | 20万到40万之间时,高于20万元的部分,可提成5%; 5 | 40万到60万之间时高于40万元的部分,可提成3%; 6 | 60万到100万之间时,高于60万元的部分,可提成1.5%; 7 | 高于100万元时,超过100万元的部分按1%提成; 8 | 从键盘输入当月利润I,求应发放奖金总数? 9 | ''' 10 | 11 | arr = (0, 10, 20, 40, 60, 100) 12 | rat = (0, 10, 7.5, 5, 3, 1.5, 1) 13 | 14 | pro = float(input('净利润(万元):')) 15 | fit = 0 16 | 17 | for i in range(1, len(arr)): 18 | if (pro > arr[i]): 19 | fit += (arr[i] - arr[i - 1]) * (rat[i] / 100) 20 | else: 21 | fit += (pro - arr[i - 1]) * (rat[i] / 100) 22 | break 23 | 24 | print('奖金(元):', fit * 10000) 25 | -------------------------------------------------------------------------------- /case_20/sub_22.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:两个乒乓球队进行比赛,各出三人。 3 | 甲队为a,b,c三人,乙队为x,y,z三人。 4 | 已抽签决定比赛名单。有人向队员打听比赛的名单。 5 | a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 6 | ''' 7 | 8 | T1 = ('a', 'b', 'c') 9 | T2 = ('x', 'y', 'z') 10 | 11 | arr = [] # 可能的组合 12 | 13 | 14 | def comb(i, j, k): 15 | c1 = T1[0] + '-' + T2[i] 16 | c2 = T1[1] + '-' + T2[j] 17 | c3 = T1[2] + '-' + T2[k] 18 | return tuple([c1, c2, c3]) 19 | 20 | 21 | # 找出 x,y,z 的所有组合 22 | for i in range(3): 23 | for j in range(3): 24 | for k in range(3): 25 | if (i == j) or (i == k) or (j == k): 26 | continue 27 | arr.append(comb(i, j, k)) 28 | 29 | # 过滤不符合要求的组合 30 | for g in arr: 31 | if ('a-x' in g) or ('c-z' in g) or ('c-x' in g): 32 | continue 33 | print(g) 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | 42 | # Directories potentially created on remote AFP share 43 | .AppleDB 44 | .AppleDesktop 45 | Network Trash Folder 46 | Temporary Items 47 | .apdisk 48 | 49 | # IDE 50 | .idea -------------------------------------------------------------------------------- /case_10/sub_17.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 3 | ''' 4 | 5 | 6 | class Code: 7 | content = '' # 代码 8 | letters = 0 # 字母 9 | space = 0 # 空格 10 | digit = 0 # 数字 11 | others = 0 # 字符 12 | 13 | # 构造函数 14 | def __init__(self, content): 15 | self.content = content 16 | 17 | # 分析代码 18 | def analysis(self): 19 | for c in self.content: 20 | if c.isalpha(): 21 | self.letters += 1 22 | elif c.isspace(): 23 | self.space += 1 24 | elif c.isdigit(): 25 | self.digit += 1 26 | else: 27 | self.others += 1 28 | 29 | # 展示结果 30 | def showData(self): 31 | form = '字母(%d) 空格(%d) 数字(%d) 其他字符(%d)' 32 | data = (self.letters, self.space, self.digit, self.others) 33 | print(form % data) 34 | 35 | 36 | content = input('请输入一段代码:\n') 37 | 38 | code = Code(content) 39 | code.analysis() # 分析 40 | code.showData() # 展示 41 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | Python3 练习题 100例 2 | ==================== 3 | 4 | 5 | ## [题目 1](https://github.com/woider/PythonExercise/blob/master/case_00/sub_1.py) ## 6 | 7 | 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 8 | 9 | > 可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 10 | 11 | 12 | ## [题目 2](https://github.com/woider/PythonExercise/blob/master/case_00/sub_2.py) ## 13 | 14 | 企业发放的奖金根据利润提成。利润(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,求应发放奖金总数? 15 | 16 | > 请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 17 | 18 | 19 | ## [题目 3](https://github.com/woider/PythonExercise/blob/master/case_00/sub_3.py) ## 20 | 21 | 一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少? 22 | 23 | > 在10000以内判断,将该数加上100后再开方,加上268后再开方,如果开方后的结果满足如下条件,即是结果。 24 | 25 | 26 | ## [题目 4](https://github.com/woider/PythonExercise/blob/master/case_00/sub_4.py) ## 27 | 28 | 输入某年某月某日,判断这一天是这一年的第几天? 29 | 30 | > 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天。 31 | 32 | 33 | ## [题目 5](https://github.com/woider/PythonExercise/blob/master/case_00/sub_5.py) ## 34 | 35 | 输入三个整数x,y,z,请把这三个数由小到大输出。 36 | 37 | > 我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 38 | 39 | 40 | ## [题目 6](https://github.com/woider/PythonExercise/blob/master/case_00/sub_6.py) ## 41 | 42 | 斐波那契数列。 43 | 44 | > 斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。 45 | 46 | 47 | ## [题目 7](https://github.com/woider/PythonExercise/blob/master/case_00/sub_7.py) ## 48 | 49 | 将一个列表的数据复制到另一个列表中。 50 | 51 | > 使用列表[:]。 52 | 53 | 54 | ## [题目 8](https://github.com/woider/PythonExercise/blob/master/case_00/sub_8.py) ## 55 | 56 | 输出 9*9 乘法口诀表。 57 | 58 | > 分行与列考虑,共9行9列,i控制行,j控制列。 59 | 60 | 61 | ## [题目 9](https://github.com/woider/PythonExercise/blob/master/case_00/sub_9.py) ## 62 | 63 | 模拟Linux用户登录。 64 | 65 | > 验证账号和密码,若失败则延迟三秒输出错误信息。 66 | 67 | 68 | ## [题目 10](https://github.com/woider/PythonExercise/blob/master/case_00/sub_10.py) ## 69 | 70 | 格式化输出当前时间。 71 | 72 | > 使用 time 模块,格式为 yyyy-mm-dd HH:mm:ss。 73 | 74 | 75 | ## [题目 11](https://github.com/woider/PythonExercise/blob/master/case_10/sub_11.py) ## 76 | 77 | 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 78 | 79 | > 兔子的规律为数列1,1,2,3,5,8,13,21.... 80 | 81 | 82 | ## [题目 12](https://github.com/woider/PythonExercise/blob/master/case_10/sub_12.py) ## 83 | 84 | 判断101-200之间有多少个素数,并输出所有素数。 85 | 86 | > 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 87 | 88 | 89 | ## [题目 13](https://github.com/woider/PythonExercise/blob/master/case_10/sub_13.py) ## 90 | 91 | 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。 92 | 93 | > 利用for循环控制100-999个数,每个数分解出个位,十位,百位。 94 | 95 | 96 | ## [题目 14](https://github.com/woider/PythonExercise/blob/master/case_10/sub_14.py) ## 97 | 98 | 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 99 | 100 | > 对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 101 | > (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 102 | > (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 103 | > (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 104 | 105 | 106 | ## [题目 15](https://github.com/woider/PythonExercise/blob/master/case_10/sub_15.py) ## 107 | 108 | 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 109 | 110 | > 程序分析:(a>b)?a:b这是条件运算符的基本例子。 111 | 112 | 113 | ## [题目 16](https://github.com/woider/PythonExercise/blob/master/case_10/sub_16.py) ## 114 | 115 | 输出指定格式的日期。 116 | 117 | > 使用 datetime 模块。 118 | 119 | 120 | ## [题目 17](https://github.com/woider/PythonExercise/blob/master/case_10/sub_17.py) ## 121 | 122 | 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 123 | 124 | > 利用while语句,条件为输入的字符不为'\n'。 125 | 126 | 127 | ## [题目 18](https://github.com/woider/PythonExercise/blob/master/case_10/sub_18.py) ## 128 | 129 | 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。 130 | 131 | > 关键是计算出每一项的值。 132 | 133 | 134 | ## [题目 19](https://github.com/woider/PythonExercise/blob/master/case_10/sub_19.py) ## 135 | 136 | 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。 137 | 138 | > 请参照程序Python 练习实例14。 139 | 140 | 141 | ## [题目 20](https://github.com/woider/PythonExercise/blob/master/case_10/sub_20.py) ## 142 | 143 | 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? 144 | 145 | > 利用循环计算每一次小球落地的高度。 146 | 147 | 148 | ## [题目 21](https://github.com/woider/PythonExercise/blob/master/case_20/sub_21.py) ## 149 | 150 | 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 151 | 152 | > 采取逆向思维的方法,从后往前推断。 153 | 154 | 155 | ## [题目 22](https://github.com/woider/PythonExercise/blob/master/case_20/sub_22.py) ## 156 | 157 | 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。 158 | 159 | > 先进行排列组合,再挑选符合要求的组合。 160 | 161 | 162 | ## [题目 23](https://github.com/woider/PythonExercise/blob/master/case_20/sub_23.py) ## 163 | 164 | 利用循环打印菱形 165 | 166 | > 先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。 167 | 168 | 169 | ## [题目 24](https://github.com/woider/PythonExercise/blob/master/case_20/sub_24.py) ## 170 | 171 | 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 172 | 173 | > 请抓住分子与分母的变化规律。 174 | 175 | 176 | ## [题目 25](https://github.com/woider/PythonExercise/blob/master/case_20/sub_25.py) ## 177 | 178 | 求1+2!+3!+...+20!的和。 179 | 180 | > 此程序只是把累加变成了累乘。 181 | 182 | 183 | ## [题目 26](https://github.com/woider/PythonExercise/blob/master/case_20/sub_26.py) ## 184 | 185 | 利用递归方法求5!。 186 | 187 | > 递归公式:fn=fn_1*4! 188 | 189 | 190 | ## [题目 27](https://github.com/woider/PythonExercise/blob/master/case_20/sub_27.py) ## 191 | 192 | 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。 193 | 194 | > 递归实际上是一种函数堆栈。 195 | 196 | 197 | ## [题目 28](https://github.com/woider/PythonExercise/blob/master/case_20/sub_28.py) ## 198 | 199 | 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大? 200 | 201 | > 利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。 202 | 203 | 204 | ## [题目 29](https://github.com/woider/PythonExercise/blob/master/case_20/sub_29.py) ## 205 | 206 | 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 207 | 208 | > 学会分解出每一位数。 209 | 210 | 211 | ## [题目 30](https://github.com/woider/PythonExercise/blob/master/case_20/sub_30.py) ## 212 | 213 | 一个5位数,判断它是不是回文数。 214 | 215 | > 回文数,个位与万位相同,十位与千位相同。 --------------------------------------------------------------------------------