ddup
V2EX  ›  问与答

代码中用中文命名很棒啊

  •  1
     
  •   ddup · Nov 14, 2019 · 7258 views
    This topic created in 2547 days ago, the information mentioned may be changed or developed.

    上次一个专有名次不知如何取名,中文变量命名的帖子,这次这个,来自“狗屁不通文章生成器”,全程中文,看代码像有像是领导在像手下发话,脑海里面自动出现语音版本,或者用语音控制计算机的感受。

    面向声音编程。

    虽然本人从没用中文命名过变量,但是觉得很棒。

    https://github.com/menzi11/BullshitGenerator

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    
    import os, re
    import random,readJSON
    
    data = readJSON.读 JSON 文件("data.json")
    名人名言 = data["famous"] # a 代表前面垫话,b 代表后面垫话
    前面垫话 = data["before"] # 在名人名言前面弄点废话
    后面垫话 = data['after']  # 在名人名言后面弄点废话
    废话 = data['bosh'] # 代表文章主要废话来源
    
    xx = "学生会退会"
    
    重复度 = 2
    
    def 洗牌遍历(列表):
        global 重复度
        池 = list(列表) * 重复度
        while True:
            random.shuffle(池)
            for 元素 in 池:
                yield 元素
    
    下一句废话 = 洗牌遍历(废话)
    下一句名人名言 = 洗牌遍历(名人名言)
    
    def 来点名人名言():
        global 下一句名人名言
        xx = next(下一句名人名言)
        xx = xx.replace(  "a",random.choice(前面垫话) )
        xx = xx.replace(  "b",random.choice(后面垫话) )
        return xx
    
    def 另起一段():
        xx = ". "
        xx += "\r\n"
        xx += "    "
        return xx
    
    if __name__ == "__main__":
        xx = input("请输入文章主题:")
        for x in xx:
            tmp = str()
            while ( len(tmp) < 6000 ) :
                分支 = random.randint(0,100)
                if 分支 < 5:
                    tmp += 另起一段()
                elif 分支 < 20 :
                    tmp += 来点名人名言()
                else:
                    tmp += next(下一句废话)
            tmp = tmp.replace("x",xx)
            print(tmp)
    

    let 后面垫话 = [
        "这不禁令我深思。 ",
        "带着这句话,我们还要更加慎重的审视这个问题: ",
        "这启发了我, ",
        "我希望诸位也能好好地体会这句话。 ",
        "这句话语虽然很短,但令我浮想联翩。 ",
    ]
    
    let 前面垫话 = [
        "曾经说过",
        "在不经意间这样说过",
    ]
    
    function 随便取一句(列表){
        let 坐标 = Math.floor( Math.random() * 列表.length );
        return 列表[坐标];
    }
    
    function 随便取一个数(最小值 = 0,最大值 = 100){
        let 数字 = Math.random()*( 最大值 - 最小值 ) + 最小值;
        return 数字;
    }
    
    function 来点名人名言(){
        let 名言 = 随便取一句(名人名言)
        名言 = 名言.replace("曾经说过", 随便取一句(前面垫话) )
        名言 = 名言.replace("这不禁令我深思", 随便取一句(后面垫话) )
        return 名言
    }
    
    function 来点论述(){
        let 句子 = 随便取一句(论述);
        句子 = 句子.replace(RegExp("主题", "g"),主题);
        return 句子;
    }
    
    function 增加段落(章节){
        if(章节[章节.length-1] === " "){
            章节 = 章节.slice(0,-2)
        }
        return "  " + 章节 + "。 "
    }
    
    function 生成文章(){
        let 文章 = []
        for(let 空 in 主题){
            let 章节 = "";
            let 章节长度 = 0;
            while( 章节长度 < 6000 ){
                let 随机数 = 随便取一个数();
                if(随机数 < 5 && 章节.length > 200){
                    章节 = 增加段落(章节);
                    文章.push(章节); 
                    章节 = "";
                }else if(随机数 < 20){
                    let 句子 = 来点名人名言();
                    章节长度 = 章节长度 + 句子.length;
                    章节 = 章节 + 句子;
                }else{
                    let 句子 = 来点论述();
                    章节长度 = 章节长度 + 句子.length;
                    章节 = 章节 + 句子;
                }
            }
            章节 = 增加段落(章节);
            文章.push(章节);
        }
        return 文章.join("\n");
    }
    
    console.log(生成文章())
    
    Supplement 1  ·  Nov 14, 2019
    我知道写起来肯定不方便,而且智能提示也不方便,不能打几个字母就出现智能提示,只是看起来很棒。
    44 replies  •  2020-08-03 19:53:03 +08:00
    miaomiao888
    miaomiao888
    Nov 14, 2019
    1
    E 语言:听说有人在夸我
    helionzzz
    helionzzz
    Nov 14, 2019❤️3
    2
    中英文和全半角符号切换不累么。。
    coderluan
    coderluan
    Nov 14, 2019❤️1
    3
    虽然本人从没用中文命名过变量,但是觉得很棒。

    要不楼主先用用试试再说,毕竟看和写是两回事。
    misaka19000
    misaka19000
    Nov 14, 2019
    4
    我觉得不行
    hkitdog
    hkitdog
    Nov 14, 2019 via iPhone
    5
    那为什么不用易话言,Python 和 C 的库全都可以直连调用
    hkitdog
    hkitdog
    Nov 14, 2019 via iPhone
    6
    总页数 = 431
    ' 标准输出 (1, “开始页数:”)
    ' 当前页 = 标准输入 ()
    ' i = 到整数 (当前页)
    .计次循环首 (总页数, i)
    写到文件 (取运行目录 () + “/confuig.ini”, 到字节集 (“当前页:” + 到文本 (i)))
    源代码 = 网页_访问 S (“http://www.okzy.me/?m=vod-index-pg-” + 到文本 (i) + “.html”, 0, , , )
    文本_取中间_批量 (源代码, #目的地址 1, #目的地址 2, 目的地址, , , )
    .计次循环首 (取数组成员数 (目的地址), j)
    详细页地址 = 网页_访问 S (“http://www.okzy.me” + 目的地址 [j], 0, , , )
    ' 调试输出 (详细页地址)
    标题 = 文本_取出中间文本 (详细页地址, #标题 1, #标题 2, , )

    导演 = 文本_取出中间文本 (详细页地址, #导演 1, #导演 2, , )

    主要演员 = 文本_取出中间文本 (详细页地址, #主演 1, #主演 2, )

    类型 = 文本_取出中间文本 (详细页地址, #类型 1, #类型 2, )

    地区 = 文本_取出中间文本 (详细页地址, #地区 1, #地区 2, )

    剧情介绍 = 文本_取出中间文本 (详细页地址, #剧情介绍 1, #剧情介绍 2, )

    ' 播放链接 = 文本_取出中间文本 (详细页地址, #影片地址 1, #影片地址 2, )
    封面地址 = 文本_取出中间文本 (详细页地址, #封面 1, #封面 2, )
    调试输出 (文本_取出中间文本 (详细页地址, #KuyunBox1, #KuyumBox2, ))
    文本_取中间_批量 (文本_取出中间文本 (详细页地址, #KuyunBox1, #KuyumBox2, ), #影片地址 1, #影片地址 2, 播放链接, )
    播放链接汇总 = “”
    .计次循环首 (取数组成员数 (播放链接), k)
    播放链接汇总 = 播放链接汇总 + “<a href=” + 播放链接 [k] + “>” + 播放链接 [k] + “</a> <br />”
    ' 调试输出 (“名称:” + 标题 + “链接:” + 播放链接 [k])
    .计次循环尾 ()





    标准输出 (1, #换行符 + “电影名称:” + 标题 + #换行符 + “导演:” + 导演 + #换行符 + “主要演员:” + 主要演员 + #换行符 + “类型:” + 类型 + “地区:” + 地区 + #换行符 + “剧情介绍:” + 封面地址 + #换行符 + #换行符)




    调试输出 (标题)
    调试输出 (导演)
    调试输出 (主要演员)
    调试输出 (类型)
    调试输出 (地区)
    调试输出 (剧情介绍)
    调试输出 (封面地址)
    调试输出 (播放链接汇总)
    i = i + 1
    .计次循环尾 ()


    .计次循环尾 ()
    wysnylc
    wysnylc
    Nov 14, 2019❤️3
    7
    其实我觉得中文化数学也有搞头!
    szyp
    szyp
    Nov 14, 2019 via iPhone
    8
    @coderluan 哈哈 敲一个中文变量和一个英文变量手指的差别可不小
    gabon
    gabon
    Nov 14, 2019 via Android
    9
    看瞎了。。
    ddup
    ddup
    OP
    Nov 14, 2019
    10
    @coderluan #3 我知道写起来肯定不方便,而且智能提示也不方便,不能打几个字母就出现智能提示,只是看起来很棒。
    love
    love
    Nov 14, 2019
    11
    只能说明你英文太差
    建议把 PC 和手机的系统全搞成英文找找感觉,回头就会发现这程序有多尬
    glaucus
    glaucus
    Nov 14, 2019
    12
    看起来也并不棒,要么全中文,我这种喜欢在心理读代码的看到这种中英混杂的就跟听到某些人中英混杂和我交流一样难受
    NjcyNzMzNDQ3
    NjcyNzMzNDQ3
    Nov 14, 2019❤️2
    13
    汉语写代码,遇到方言岂不是很有趣

    if(磨叽){
    sleep(ture);
    }

    if(贼多 >= 贼少){
    return true;
    }

    if(不着调){
    return "没正经的";
    }

    if(你瞅啥){
    echo "瞅你咋的";
    }
    geelaw
    geelaw
    Nov 14, 2019 via iPhone
    14
    足以见得 V2EX 自作聪明加空格的算法是多么不小心。由于这个算法,“读 JSON 文件”中间被加了空格,因此失去了作为标识符的资格。
    mokeyjay
    mokeyjay
    Nov 14, 2019
    15
    @ddup #10 拼音首字母了解一下
    joiejia
    joiejia
    Nov 14, 2019
    16
    第一次看懂代码(
    bk201
    bk201
    Nov 14, 2019
    17
    看的累,语言容易歧义
    lazypu
    lazypu
    Nov 14, 2019
    18
    王的富尔
    ddup
    ddup
    OP
    Nov 14, 2019 via Android
    19
    @mokeyjay 拼音首字母绝对不行😰
    ddup
    ddup
    OP
    Nov 14, 2019 via Android
    20
    @geelaw 原来 V2 还会给英文中文间自动加空格
    saltedFish666
    saltedFish666
    Nov 14, 2019
    21
    看得我好尬
    ungrown
    ungrown
    Nov 14, 2019 via Android
    22
    本来就是个好方法,有时候直接用中文命名是最直观最准确的方法,没有之一!

    至于你说的缺点,输入不方便,这我就要批评你缺心眼了:你在中文外面加上简短的英文前缀,不就可以在英文输入状态下自动补全了吗?
    LancerEvo
    LancerEvo
    Nov 14, 2019
    23
    我是中国人 但我碰到有中文注释的代码的时候从来不看
    HolmLoh
    HolmLoh
    Nov 14, 2019
    24
    看起来很爽,爽完记得改回去
    ares586
    ares586
    Nov 14, 2019❤️2
    25
    我觉得并不尬啊,蛮好玩的。如果是自己写一写脚本,反而不用加注释了。。。
    wolfan
    wolfan
    Nov 14, 2019
    26
    分明就是想省去写注释的活~
    ddup
    ddup
    OP
    Nov 14, 2019 via Android
    27
    @ungrown 哈哈 中西结合
    TomatoYuyuko
    TomatoYuyuko
    Nov 14, 2019
    28
    的确 最麻烦的是输入法来回切换,浪费很多时间
    raffaellolin
    raffaellolin
    Nov 14, 2019 via Android
    29
    可以,但是没必要
    KeyboardManAnAn
    KeyboardManAnAn
    Nov 14, 2019
    30
    很棒,是时候掀起一波中文编程的革命了🐶🐶🐶
    ipwx
    ipwx
    Nov 14, 2019
    31
    有些场景下面用中文变量,我拍手称赞。因为那是最恰当的方案。

    楼主这个场景吗,呕……
    orzorzorzorz
    orzorzorzorz
    Nov 14, 2019❤️1
    32
    中文变量一般都是用在相当专业的名词里面的,比如“年后出入库计划表”这种很难翻成英文的。对于能翻、翻完意思确定、而且大家都是这么翻的名词,用中文就会有内味儿了。
    其他实例用的变量姑且不表,但最大值最小值这些都是有惯有翻译的。
    gwybiaim
    gwybiaim
    Nov 14, 2019
    33
    @TomatoYuyuko 输入法支持标点符号始终半角的
    zunceng
    zunceng
    Nov 14, 2019
    34
    看和写是两回事 注释写中文都不习惯 懒得切输入法
    fixmestan
    fixmestan
    Nov 14, 2019❤️1
    35
    切换输入法那点时间你们都心疼?真的假的
    ytmsdy
    ytmsdy
    Nov 14, 2019 via iPhone
    36
    我觉得我会被中英文切换搞奔溃的!
    EscYezi
    EscYezi
    Nov 14, 2019 via iPhone
    37
    @YenvY #34 不心疼,手疼🤣
    hyy1995
    hyy1995
    Nov 14, 2019
    38
    我看哭了。。。真没必要
    QingXuJiaZhi
    QingXuJiaZhi
    Nov 14, 2019❤️7
    39
    本来中国人用中文变量是好处远大于坏处的,但是,偏见是可怕的,比如有人说:

    “中英文和全半角符号切换不累么” ... 偏见, 输入法本来就可以设置一直半角

    “我觉得不行” ... 严重偏见, 连莫须有的罪名都懒得加了

    “敲一个中文变量和一个英文变量手指的差别可不小” ... 偏见, 事实上配合中文输入法的自动自造词功能, 中文变量也很方便输入

    “看得我好尬” ... 偏见, 尬的唯一原因只能是偏见了, 不然为啥尬呢

    “我是中国人 但我碰到有中文注释的代码的时候从来不看” ... 偏见, 中文注释招谁惹谁了?

    “最麻烦的是输入法来回切换,浪费很多时间” ... 偏见, 敲字的时间本来就不重要 (要说有问题, 其实是注意输入法状态的心理负担, 而不是时间)

    “可以,但是没必要” ... 偏见, 对于全英文的代码, 你会加上一句 "没有必要" 吗, 不会, 这种区别对待的唯一原因就是偏见

    中文变量名是有它自己的问题, 但是, 在反对中文变量名的声音之中, 偏见的含量也实在高的惊人.
    zmqking
    zmqking
    Nov 15, 2019 via iPhone❤️1
    40
    因为这个是主要是美帝发明的,我一直好奇,他们看代码是什么感觉,我现在感觉到了^_^。试想下如果这玩意儿是我们发明的,不就是这样的效果吗?
    ywjdlq
    ywjdlq
    Nov 15, 2019
    41
    突然就看不懂了
    CodeEncryption
    CodeEncryption
    Nov 15, 2019
    42
    如果符号也能全角,不用切换全半角我想我会尝试的
    s1E4GnZ4A2qGRyva
    s1E4GnZ4A2qGRyva
    Dec 1, 2019❤️1
    43
    更多中文命名标识符的开源项目: https://github.com/program-in-chinese/overview#%E7%BB%84%E5%86%85%E6%B4%BB%E8%B7%83%E9%A1%B9%E7%9B%AE
    Java, Python,C++,TS 等等
    Mindjet
    Mindjet
    Aug 3, 2020
    44
    挺有意思的,不过生态可能不怎么好,比如,如果这个项目是与别人合作的或者开源的,看到你用的中文,很多人都吓退了。如果有一天,美国小学中文是必修的,也许会可以。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1571 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 103ms · UTC 23:33 · PVG 07:33 · LAX 15:33 · JFK 18:33
    ♥ Do have faith in what you're doing.