(编辑:jimmy 日期: 2024/12/24 浏览:2)
题目来源:
Python语法的25个练习题
https://www.52pojie.cn/thread-1689186-1-1.html
第12、15、24题为作业,请留在评论区,不调用任何模块的方式实现。
.版本 2.支持库 spec.子程序 题目1_水仙花数.局部变量 start, 整数型.局部变量 stop, 整数型.局部变量 i, 整数型, , , 100~999.局部变量 i1, 整数型.局部变量 i2, 整数型.局部变量 i3, 整数型start = 100stop = 1000.变量循环首 (start, stop - 1, 1, i) ' i = 123 ' 假设 i1 = i \ 100 ' 取百位数字 123//100=1 i2 = i \ 10 % 10 ' 取十位数字 123//10=12 12%10=2 i3 = i % 10 ' 取个位数字 123%10=3 .如果真 (到整数 (求次方 (i1, 3)) + 到整数 (求次方 (i2, 3)) + 到整数 (求次方 (i3, 3)) = i) 调试输出 (到文本 (i) + “是水仙花数”) ' 153是水仙花数 ' 370是水仙花数 ' 371是水仙花数 ' 407是水仙花数 .如果真结束.变量循环尾 ()
.版本 2.支持库 spec.子程序 题目2_四叶玫瑰数.局部变量 start, 整数型.局部变量 stop, 整数型.局部变量 i, 整数型, , , 1000~9999.局部变量 i1, 整数型.局部变量 i2, 整数型.局部变量 i3, 整数型.局部变量 i4, 整数型start = 1000stop = 10000.变量循环首 (start, stop - 1, 1, i) ' i = 1234 ' 假设 i1 = i \ 1000 ' 取千位数字 1234//1000=1 i2 = i \ 100 % 10 ' 取百位数字 1234//100=12 12%10=2 i3 = i \ 10 % 10 ' 取十位数字 1234//10=123 123%10=3 i4 = i % 10 ' 取个位数字 1234%10=4 .如果真 (到整数 (求次方 (i1, 4)) + 到整数 (求次方 (i2, 4)) + 到整数 (求次方 (i3, 4)) + 到整数 (求次方 (i4, 4)) = i) 调试输出 (到文本 (i) + “是四叶玫瑰数”) ' 1634是四叶玫瑰数 ' 8208是四叶玫瑰数 ' 9474是四叶玫瑰数 .如果真结束.变量循环尾 ()
.版本 2.支持库 spec.子程序 题目3_逆序输出字符串.局部变量 str, 文本型, , , 只允许数字或字母.局部变量 len, 整数型, , , 不考虑中文,需特殊处理(1个汉字占2字节).局部变量 i, 整数型.局部变量 ret, 文本型标准输出 (#标准输出设备, “请输入字符串” + #换行符)str = 标准输入 ()' str = “123456”' str = “abcdefghijklmnopqrstuvwxyz”' str = “52pojie_OVVO”len = 取文本长度 (str).变量循环首 (len, 1, -1, i) ret = ret + 取文本中间 (str, i, 1).变量循环尾 ()调试输出 (ret)
.版本 2.支持库 spec.子程序 题目4_猜数字小游戏.局部变量 number, 整数型, , , 0~100都有可能.局部变量 i, 整数型.局部变量 choice, 整数型.局部变量 ok, 逻辑型置随机数种子 ()number = 取随机数 (0, 100)调试输出 (“嘘~这是随机数:” + 到文本 (number)).计次循环首 (10, i) 标准输出 (#标准输出设备, “请输入你要猜测的数字:” + #换行符) choice = 到整数 (标准输入 ()) .如果 (choice > number) 调试输出 (“你猜大了”) .否则 .如果 (choice < number) 调试输出 (“你猜小了”) .否则 ok = 真 调试输出 (“你猜对了,真棒!”) 调试输出 (“你一共用了” + 到文本 (i) + “次机会”) 跳出循环 () .如果结束 .如果结束 调试输出 (“还剩” + 到文本 (10 - i) + “次机会”).计次循环尾 ().如果真 (ok = 假) 调试输出 (“游戏结束,你没有猜到”)
.版本 2.支持库 spec.子程序 题目5_百鸡百钱.局部变量 count, 整数型.局部变量 x, 整数型.局部变量 y, 整数型.局部变量 z, 整数型count = 0.变量循环首 (1, 20 - 1, 1, x) .变量循环首 (1, 33 - 1, 1, y) z = 100 - x - y .如果真 (z > 0 且 5 × x + 3 × y + z ÷ 3 = 100) count = count + 1 调试输出 (取重复文本 (60, “=”)) 调试输出 (“第” + 到文本 (count) + “种买法,公鸡买了” + 到文本 (x) + “只,母鸡买了” + 到文本 (y) + “只,小鸡买了” + 到文本 (z) + “只”) ' ============================================================ ' 第1种买法,公鸡买了4只,母鸡买了18只,小鸡买了78只 ' ============================================================ ' 第2种买法,公鸡买了8只,母鸡买了11只,小鸡买了81只 ' ============================================================ ' 第3种买法,公鸡买了12只,母鸡买了4只,小鸡买了84只 .如果真结束 .变量循环尾 ().变量循环尾 ()
.版本 2.支持库 spec.子程序 题目6_闰年问题升级版.局部变量 year, 整数型.局部变量 month, 整数型.局部变量 day, 整数型.局部变量 date_list, 整数型, , "0".局部变量 count_day, 整数型.局部变量 i, 整数型标准输出 (#标准输出设备, “请输入年份” + #换行符)year = 到整数 (标准输入 ())标准输出 (#标准输出设备, “请输入月份” + #换行符)month = 到整数 (标准输入 ())标准输出 (#标准输出设备, “请输入日期” + #换行符)day = 到整数 (标准输入 ())' year = 2022' month = 10' day = 3date_list = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }count_day = day.如果 (year % 4 = 0 且 year % 100 ≠ 0 或 year % 400 = 0) 调试输出 (到文本 (year) + “年是闰年”) date_list [2] = 29.否则 调试输出 (到文本 (year) + “年是平年”) date_list [2] = 28.如果结束.计次循环首 (month - 1, i) count_day = count_day + date_list [i].计次循环尾 ()调试输出 (到文本 (year) + “年” + 到文本 (month) + “月” + 到文本 (day) + “日是当年的第” + 到文本 (count_day) + “天”)' 2022年是平年' 2022年10月3日是当年的第276天
.版本 2.支持库 spec.子程序 题目7_猴子吃桃问题.局部变量 p, 整数型.局部变量 i, 整数型p = 1调试输出 (“第10天还剩下” + 到文本 (p) + “个桃子”).变量循环首 (9, 1, -1, i) p = (p + 1) × 2 调试输出 (“第” + 到文本 (i) + “天还剩下” + 到文本 (p) + “个桃子”).变量循环尾 ()调试输出 (“第一天一共摘了” + 到文本 (p) + “个桃子”)' 第10天还剩下1个桃子' 第9天还剩下4个桃子' 第8天还剩下10个桃子' 第7天还剩下22个桃子' 第6天还剩下46个桃子' 第5天还剩下94个桃子' 第4天还剩下190个桃子' 第3天还剩下382个桃子' 第2天还剩下766个桃子' 第1天还剩下1534个桃子' 第一天一共摘了1534个桃子
.版本 2.支持库 spec.子程序 题目8_冒泡排序.局部变量 pop_list, 整数型, , "0".局部变量 count, 整数型.局部变量 i, 整数型.局部变量 j, 整数型' pop_list = { 82, 15, 15, 41, 37, 31 }pop_list = { 29, 12, 19, 37, 14 }count = 取数组成员数 (pop_list)调试输出 (“没排序之前的列表”, pop_list).计次循环首 (count, i) .计次循环首 (count - i, j) .如果真 (pop_list [j] > pop_list [j + 1]) 交换变量 (pop_list [j], pop_list [j + 1]) .如果真结束 .计次循环尾 ().计次循环尾 ()调试输出 (“排好序的列表为”, pop_list)' {15, 15, 31, 37, 41, 82}' {12, 14, 19, 29, 37}
第一种 纯算法的方式
.版本 2.支持库 spec.子程序 题目9_二分查找法_纯算法.局部变量 arr_list, 整数型, , "0".局部变量 number, 整数型.局部变量 count, 整数型.局部变量 left, 整数型.局部变量 right, 整数型.局部变量 middle, 整数型.局部变量 ok, 逻辑型arr_list = { 5, 7, 11, 22, 27, 33, 39, 52, 58 }number = 11count = 0left = 0right = 取数组成员数 (arr_list) - 1.判断循环首 (left ≤ right) middle = (left + right) \ 2 count = count + 1 .如果 (number > arr_list [middle + 1]) left = middle + 1 .否则 .如果 (number < arr_list [middle + 1]) right = middle - 1 .否则 ok = 真 调试输出 (“数字” + 到文本 (number) + “已找到,索引值为” + 到文本 (middle)) 跳出循环 () .如果结束 .如果结束.判断循环尾 ().如果 (ok = 假) 调试输出 (“数字” + 到文本 (number) + “没有找到”).否则 调试输出 (“一共用了” + 到文本 (count) + “次查找”).如果结束' 数字11已找到,索引值为2' 一共用了3次查找
第二种 递归函数的方式
.版本 2.支持库 spec.子程序 binary_search, 整数型, 公开.参数 arr_list, 整数型, 参考 数组.参数 number, 整数型.参数 left, 整数型.参数 right, 整数型.局部变量 middle, 整数型.如果 (left ≤ right) middle = (left + right) \ 2 .如果 (number < arr_list [middle]) right = middle - 1 .否则 .如果 (number > arr_list [middle]) left = middle + 1 .否则 返回 (middle) .如果结束 .如果结束 返回 (binary_search (arr_list, number, left, right)).否则 返回 (-1).如果结束返回 (0).子程序 题目9_二分查找法_递归函数的方式.局部变量 arr_list, 整数型, , "0"arr_list = { 5, 7, 11, 22, 27, 33, 39, 52, 58 }调试输出 (binary_search (arr_list, 11, 0, 取数组成员数 (arr_list) - 1)) ' 3
.版本 2.支持库 spec.子程序 题目10_选择排序.局部变量 sec_list, 整数型, , "0".局部变量 length, 整数型.局部变量 i, 整数型.局部变量 min_index, 整数型.局部变量 j, 整数型sec_list = { 91, 30, 93, 98, 26, 98, 20, 90 }length = 取数组成员数 (sec_list)调试输出 (“未排序的列表为:”, sec_list).计次循环首 (length, i) min_index = i .变量循环首 (i, length, 1, j) .如果真 (sec_list [min_index] > sec_list [j]) min_index = j .如果真结束 .变量循环尾 () 交换变量 (sec_list [min_index], sec_list [i]) 调试输出 (“第” + 到文本 (i) + “轮排好序是:”, sec_list).计次循环尾 ()调试输出 (“最终排好序的列表为:”, sec_list)' 数组:8{20,26,30,90,91,93,98,98}
.版本 2.支持库 spec.子程序 题目11_剪刀石头布.局部变量 game_info, 文本型, , "0".局部变量 score, 整数型.局部变量 是否跳出, 逻辑型.局部变量 robots_choice, 整数型.局部变量 user_choice, 整数型调试输出 (取重复文本 (60, “=”))调试输出 (取重复文本 (20, “ ”), “剪刀石头布游戏”)调试输出 (“1代表剪刀 2代表石头 3代表布”)加入成员 (game_info, “剪刀”)加入成员 (game_info, “石头”)加入成员 (game_info, “布”)score = 100置随机数种子 ()是否跳出 = 假.判断循环首 (是否跳出 = 假) robots_choice = 取随机数 (1, 3) 标准输出 (#标准输出设备, “请出拳” + #换行符) user_choice = 到整数 (标准输入 ()) .如果真 (寻找文本 (到文本 (user_choice), “1”, , 假) = -1 且 寻找文本 (到文本 (user_choice), “2”, , 假) = -1 且 寻找文本 (到文本 (user_choice), “3”, , 假) = -1) 调试输出 (“出拳错误,请重新出拳”) 到循环尾 () .如果真结束 调试输出 (取重复文本 (60, “*”)) 调试输出 (“电脑出” + game_info [robots_choice]) 调试输出 (“你出” + game_info [user_choice]) 调试输出 (取重复文本 (60, “*”)) .如果 (user_choice = 1 且 robots_choice = 3 或 user_choice = 2 且 robots_choice = 1 或 user_choice = 3 且 robots_choice = 2) score = score + 10 调试输出 (“你赢得本轮游戏,当前分数为” + 到文本 (score)) .否则 .如果 (user_choice = robots_choice) 调试输出 (“本轮游戏平局,当前分数为” + 到文本 (score)) .否则 score = score - 10 调试输出 (“你输了本轮游戏,当前分数” + 到文本 (score)) .如果结束 .如果结束 .如果 (score ≥ 200) 调试输出 (“游戏结束,你赢得比赛”) 跳出循环 () .否则 .如果 (score ≤ 0) 调试输出 (“游戏结束,你输了”) 跳出循环 () .否则 .如果结束 .如果结束.判断循环尾 ()
调试输出 ("请完善")
.版本 2.支持库 spec.子程序 题目13_猜年龄_一.局部变量 i, 整数型.局部变量 j, 整数型.变量循环首 (1, 100 - 1, 1, i) .变量循环首 (1, i - 1, 1, j) .如果真 (i × j = 6 × (i + j) 且 i - j < 8) 调试输出 (i, j) ' 15 | 10 .如果真结束 .变量循环尾 ().变量循环尾 ()
.版本 2.支持库 spec.子程序 数组_去重复_整数型, 整数型, 公开, 返回剩余不重复数组的成员数量.参数 整数数组, 整数型, 参考 数组, 要去重复的 整数数组.局部变量 成员数, 整数型.局部变量 i, 长整数型.局部变量 a, 整数型数组排序 (整数数组, 真)成员数 = 取数组成员数 (整数数组)i = 0a = 1.判断循环首 (a ≤ 成员数) i = i + 1 整数数组 [i] = 整数数组 [a] .循环判断首 () a = a + 1 .如果真 (a > 成员数) 跳出循环 () .如果真结束 .循环判断尾 (整数数组 [i] = 整数数组 [a]).判断循环尾 ()重定义数组 (整数数组, 真, i)返回 (i).子程序 题目14_猜年龄_二.局部变量 i, 整数型.局部变量 i3, 文本型.局部变量 i4, 文本型.局部变量 arr, 整数型, , "0".局部变量 a, 整数型.变量循环首 (10, 30 - 1, 1, i) i3 = 到文本 (到整数 (求次方 (i, 3))) i4 = 到文本 (到整数 (求次方 (i, 4))) .如果真 (取文本长度 (i3) = 4 且 取文本长度 (i4) = 6) 清除数组 (arr) .计次循环首 (取文本长度 (i3), a) 加入成员 (arr, 到整数 (取文本中间 (i3, a, 1))) .计次循环尾 () .计次循环首 (取文本长度 (i4), a) 加入成员 (arr, 到整数 (取文本中间 (i4, a, 1))) .计次循环尾 () 数组_去重复_整数型 (arr) .如果真 (取数组成员数 (arr) = 10) 调试输出 (i) ' 18 调试输出 (i3 + i4) ' 5832104976 .如果真结束 .如果真结束.变量循环尾 ()
调试输出 ("请完善")
.版本 2.支持库 spec.子程序 题目16_大衍数列.局部变量 x, 整数型.局部变量 a, 整数型.变量循环首 (1, 101 - 1, 1, x) .如果 (x % 2 = 0) ' 偶数 a = 到整数 (求次方 (x, 2) \ 2) .否则 a = 到整数 ((求次方 (x, 2) - 1) \ 2) .如果结束 调试输出 (a) ' 0 ' 2 ' 4 ' 8 ' 12 ' 18 ' 24 ' 32 ' 40 ' 50 ' ....变量循环尾 ()
.版本 2.支持库 e2ee.支持库 spec.子程序 analyse_words, , , 需要E2EE支持库.参数 words, 文本型.局部变量 len, 整数型.局部变量 i, 整数型.局部变量 arr, 文本型, , "0".局部变量 key, 文本型.局部变量 json, 存取键值表.局部变量 value, 整数型.局部变量 最大值的_key, 文本型.局部变量 最大值的_value, 整数型len = 取文本长度 (words).计次循环首 (len, i) 加入成员 (arr, 取文本中间 (words, i, 1)).计次循环尾 ()' 数组:10{“h”,“e”,“l”,“l”,“o”,“w”,“o”,“r”,“l”,“d”}.计次循环首 (取数组成员数 (arr), i) key = arr [i] json.置整数 (key, json.取整数 (key) + 1).计次循环尾 ()' {"h":1,"e":1,"d":1,"l":3,"w":1,"o":2,"r":1}arr = json.取键数组 ().计次循环首 (取数组成员数 (arr), i) key = arr [i] value = json.取整数 (key) .如果 (i = 1) 最大值的_key = key 最大值的_value = value .否则 .如果真 (value ≥ 最大值的_value) 最大值的_key = key 最大值的_value = value .如果真结束 .如果结束.计次循环尾 ()调试输出 (最大值的_key) ' l调试输出 (最大值的_value) ' 3.子程序 题目17_单词分析analyse_words (“helloworld”)
.版本 2.支持库 spec.子程序 diamond.参数 n, 整数型.局部变量 stack, 文本型, , "0".局部变量 i, 整数型.局部变量 p_str, 文本型' stack = { }.计次循环首 (2 × n - 1, i) .如果 (i ≤ n) p_str = 取重复文本 (n - i, “ ”) + 取重复文本 (2 × i - 1, “*”) .如果真 (i ≠ n) 加入成员 (stack, p_str) .如果真结束 调试输出 (p_str) .否则 调试输出 (stack [取数组成员数 (stack)]) 删除成员 (stack, 取数组成员数 (stack), 1) .如果结束.计次循环尾 ()' ....*' ...***' ..*****' .*******' *********' .*******' ..*****' ...***' ....*.子程序 题目18_利用栈打印菱形diamond (5)
.版本 2.支持库 spec.子程序 p.参数 n, 整数型.如果真 (n = 0) 返回 ().如果真结束调试输出 (“递归前->”, n)p (n - 1)调试输出 (“递归后->”, n).子程序 题目19_深入理解递归函数p (5)' “递归前->” | 5' “递归前->” | 4' “递归前->” | 3' “递归前->” | 2' “递归前->” | 1' “递归后->” | 1' “递归后->” | 2' “递归后->” | 3' “递归后->” | 4' “递归后->” | 5
.版本 2.支持库 spec.子程序 fib, 整数型.参数 n, 整数型.如果真 (n ≤ 2) 返回 (1).如果真结束返回 (fib (n - 1) + fib (n - 2)).子程序 题目20_斐波那契递归函数调试输出 (fib (10)) ' 55调试输出 (fib (2)) ' 1
.版本 2.支持库 spec.子程序 题目21_三个数取最大数.局部变量 a, 整数型.局部变量 b, 整数型.局部变量 c, 整数型.局部变量 max_num, 整数型a = 10b = 6c = 18.如果 (a > b) max_num = a.否则 max_num = b.如果结束.如果真 (max_num < c) max_num = c.如果真结束调试输出 (max_num) ' 18
.版本 2.支持库 spec.子程序 factor_sum, 整数型.参数 n, 整数型.局部变量 s_sum, 整数型.局部变量 i, 整数型s_sum = 0.变量循环首 (1, n - 1, 1, i) .如果真 (n % i = 0) s_sum = s_sum + i .如果真结束.变量循环尾 ()返回 (s_sum).子程序 题目22_因子之和_完数.局部变量 j, 整数型.变量循环首 (1, 1000 - 1, 1, j) .如果真 (j = factor_sum (j)) 调试输出 (j) ' 6 ' 28 ' 496 .如果真结束.变量循环尾 ()
.版本 2.支持库 spec.子程序 factor, 整数型.参数 n, 整数型.如果真 (n < 2) 返回 (1).如果真结束返回 (n × factor (n - 1)).子程序 题目23_递归阶乘求和.局部变量 s_sum, 整数型.局部变量 i, 整数型s_sum = 0.变量循环首 (1, 11 - 1, 1, i) s_sum = s_sum + factor (i).变量循环尾 ()调试输出 (s_sum) ' 4037913
调试输出 ("请完善")
解法一:通过逆转字符串进行比对
.版本 2.支持库 spec.子程序 is_palindrome_1, 逻辑型.参数 x, 整数型.局部变量 str_x, 文本型.局部变量 len, 整数型.局部变量 i, 整数型.局部变量 ret, 文本型.如果真 (x < 0 或 x > 0 且 x % 10 = 0) 返回 (假).如果真结束str_x = 到文本 (x)len = 取文本长度 (str_x).变量循环首 (len, 1, -1, i) ret = ret + 取文本中间 (str_x, i, 1).变量循环尾 ()返回 (str_x = ret).子程序 题目25_回文数的两种解法_一调试输出 (is_palindrome_1 (121)) ' 真调试输出 (is_palindrome_1 (120)) ' 假
解法二:反转一半数字和前半部分的数字进行比较
.版本 2.支持库 spec.子程序 is_palindrome_2, 逻辑型.参数 x, 整数型.局部变量 reverted, 整数型.如果真 (x < 0 或 x > 0 且 x % 10 = 0) 返回 (假).如果真结束reverted = 0.判断循环首 (x > reverted) reverted = reverted × 10 + x % 10 x = x \ 10.判断循环尾 ()返回 (x = reverted 或 x = reverted \ 10).子程序 题目25_回文数的两种解法_二调试输出 (is_palindrome_2 (1221)) ' 真调试输出 (is_palindrome_2 (1223)) ' 假调试输出 (is_palindrome_2 (123321)) ' 真