易语言语法的25个练习题

题目来源:
Python语法的25个练习题
https://www.52pojie.cn/thread-1689186-1-1.html

Python语法的25个练习题
https://blog.csdn.net/u014643814/article/details/126836874

第12、15、24题为作业,请留在评论区,不调用任何模块的方式实现。

题目1:水仙花数

.版本 2
.支持库 spec

.子程序 题目1_水仙花数
.局部变量 start, 整数型
.局部变量 stop, 整数型
.局部变量 i, 整数型, , , 100~999
.局部变量 i1, 整数型
.局部变量 i2, 整数型
.局部变量 i3, 整数型

start = 100
stop = 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:四叶玫瑰数

.版本 2
.支持库 spec

.子程序 题目2_四叶玫瑰数
.局部变量 start, 整数型
.局部变量 stop, 整数型
.局部变量 i, 整数型, , , 1000~9999
.局部变量 i1, 整数型
.局部变量 i2, 整数型
.局部变量 i3, 整数型
.局部变量 i4, 整数型

start = 1000
stop = 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是四叶玫瑰数
    .如果真结束

.变量循环尾 ()

题目3:逆序输出字符串

.版本 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)

题目4:猜数字小游戏

.版本 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 = 假)
    调试输出 (“游戏结束,你没有猜到”)

题目5:百鸡百钱

.版本 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只
        .如果真结束

    .变量循环尾 ()
.变量循环尾 ()

题目6:闰年问题升级版

.版本 2
.支持库 spec

.子程序 题目6_闰年问题升级版
.局部变量 year, 整数型
.局部变量 month, 整数型
.局部变量 day, 整数型
.局部变量 date_list, 整数型, , "0"
.局部变量 count_day, 整数型
.局部变量 i, 整数型

标准输出 (#标准输出设备, “请输入年份” + #换行符)
year = 到整数 (标准输入 ())
标准输出 (#标准输出设备, “请输入月份” + #换行符)
month = 到整数 (标准输入 ())
标准输出 (#标准输出设备, “请输入日期” + #换行符)
day = 到整数 (标准输入 ())

' year = 2022
' month = 10
' day = 3

date_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天

题目7:猴子吃桃问题

.版本 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个桃子

题目8:冒泡排序

.版本 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}

题目9:二分查找法

第一种 纯算法的方式

.版本 2
.支持库 spec

.子程序 题目9_二分查找法_纯算法
.局部变量 arr_list, 整数型, , "0"
.局部变量 number, 整数型
.局部变量 count, 整数型
.局部变量 left, 整数型
.局部变量 right, 整数型
.局部变量 middle, 整数型
.局部变量 ok, 逻辑型

arr_list = { 5, 7, 11, 22, 27, 33, 39, 52, 58 }
number = 11
count = 0
left = 0
right = 取数组成员数 (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

题目10:选择排序

.版本 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}

题目11:剪刀石头布

.版本 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)
            调试输出 (“游戏结束,你输了”)
            跳出循环 ()
        .否则

        .如果结束

    .如果结束

.判断循环尾 ()

题目12:快乐数

调试输出 ("请完善")

题目13:猜年龄(一)

.版本 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
        .如果真结束

    .变量循环尾 ()
.变量循环尾 ()

题目14:猜年龄(二)

.版本 2
.支持库 spec

.子程序 数组_去重复_整数型, 整数型, 公开, 返回剩余不重复数组的成员数量
.参数 整数数组, 整数型, 参考 数组, 要去重复的 整数数组
.局部变量 成员数, 整数型
.局部变量 i, 长整数型
.局部变量 a, 整数型

数组排序 (整数数组, 真)
成员数 = 取数组成员数 (整数数组)
i = 0
a = 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

        .如果真结束

    .如果真结束

.变量循环尾 ()

题目15:split算法实现

调试输出 ("请完善")

题目16:大衍数列

.版本 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
    ' ...
.变量循环尾 ()

题目17:单词分析

.版本 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”)

题目18:利用栈打印菱形

.版本 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)

题目19:深入理解递归函数

.版本 2
.支持库 spec

.子程序 p
.参数 n, 整数型

.如果真 (n = 0)
    返回 ()
.如果真结束
调试输出 (“递归前->”, n)
p (n - 1)
调试输出 (“递归后->”, n)

.子程序 题目19_深入理解递归函数

p (5)
' “递归前->” | 5
' “递归前->” | 4
' “递归前->” | 3
' “递归前->” | 2
' “递归前->” | 1
' “递归后->” | 1
' “递归后->” | 2
' “递归后->” | 3
' “递归后->” | 4
' “递归后->” | 5

题目20:斐波那契递归函数

.版本 2
.支持库 spec

.子程序 fib, 整数型
.参数 n, 整数型

.如果真 (n ≤ 2)
    返回 (1)
.如果真结束
返回 (fib (n - 1) + fib (n - 2))

.子程序 题目20_斐波那契递归函数

调试输出 (fib (10))  ' 55
调试输出 (fib (2))  ' 1

题目21:三个数取最大数

.版本 2
.支持库 spec

.子程序 题目21_三个数取最大数
.局部变量 a, 整数型
.局部变量 b, 整数型
.局部变量 c, 整数型
.局部变量 max_num, 整数型

a = 10
b = 6
c = 18
.如果 (a > b)
    max_num = a
.否则
    max_num = b
.如果结束

.如果真 (max_num < c)
    max_num = c
.如果真结束
调试输出 (max_num)  ' 18

题目22:因子之和“完数”

.版本 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
    .如果真结束

.变量循环尾 ()

题目23:递归阶乘求和

.版本 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

题目24:有效的括号

调试输出 ("请完善")

题目25:回文数的两种解法

解法一:通过逆转字符串进行比对

.版本 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))  ' 真

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值