当前位置: 首页 > news >正文

python里能不能用中文

现代计算机和编程的起源和推动力量主要源自美国,再加上26个字母很便于表示(算上大小写,6位bit就够了),因此英语一直是编程领域的不二之选。但这就给部分非英语国家的编程学习者带来一些困扰。以至于有些人还没开始学,就担心自己的英语问题。这完全没必要,因为编程初期所用到的单词很有限,你就当做一个符号去记,也能很快熟悉。而且我们一直在讲的 Python,也可以“用中文”来编程

Python3 对于字符编码这一块做了很大改进。带来的一个额外功能就是,你可以使用中文作为变量名。比如:

>>> 名字 = '张三'
>>> 年龄 = 18
>>> print(名字, 年龄)
张三 18
复制代码

注意,Python2 是不行的。另外如果在代码里写中文,别忘了在开头加上 #coding: gbk#coding: utf8 的声明。关于版本 2 和 3 的差别之前的文章里有多次说过,不太清楚的同学请在公众号里回复关键字 2v3

上面这样的写法完全是符合语法的,但我个人没有习惯这么来命名。不过非要这么来的,我们可以尝试把教程里的“猜数字”代码改一下(原版代码见教程 22 课):

from random import randint
def 是否相等(参数1, 参数2):
   if 参数1 < 参数2:
       print('太小了')
       return False;
   if 参数1 > 参数2:
       print('太大了')
       return False;
   if 参数1 == 参数2:
       print('猜中了!')
       return True

答案 = randint(1, 100)
print('猜猜我想的是几?')
是否猜中 = False
while 是否猜中 == False:
   猜测值 = int(input())
   是否猜中 = 是否相等(猜测值, 答案)
复制代码

使用中文变量名,执行效果和原版完全一致(除非代码的编码出了问题)。更进一步,你还可以通过某些方式更改系统提供的函数名:

from random import randint as 随机整数

输入 = input输出 = print
 = True
 = False
整数 = int
def 是否相等(参数1, 参数2):
   if 参数1 < 参数2:
       输出('太小了')
       return ;
   if 参数1 > 参数2:
       输出('太大了')
       return ;
   if 参数1 == 参数2:
       输出('猜中了!')
       return 

答案 = 随机整数(1, 100)
输出('猜猜我想的是几?')
是否猜中 = 
while 是否猜中 == :
   猜测值 = 整数(输入())
   是否猜中 = 是否相等(猜测值, 答案)
复制代码

这里牵涉到3个概念:

  1. from random import randint as 随机整数 是引入模块时指定别名
  2. 对 = True,就是一个普通的变量赋值
  3. 输入 = input整数 = int,要理解这个用法,你需要有面向对象的认识:在 Python 中函数也是一种对象,可以像普通值一样赋值给变量。赋值之后,这个变量就相当于这个函数,可以通过括号语法来调用。

如果你还嫌不够彻底,有人给了更凶残的解决方案:一个叫做“周蟒”的项目,相当于把 Python 翻译成了中文。(不过项目很久没更新了,我在 py3 上安装未成功)

在 py2 上通过 pip 即可安装:

pip install zhpy
复制代码

之后就能通过 zhpy 进入交互环境,或者直接 zhpy test.py 执行你的中文 py 代码文件。

写出来代码是酱婶儿的:

 random 导入 randint 作为 随机整数

定义 是否相等(参数1, 参数2):
   如果 参数1 < 参数2:
       打印 '太小了'
       返回 
   如果 参数1 > 参数2:
       打印 '太大了'
       返回 
   如果 参数1 == 参数2:
       打印 '猜中了!'
       返回 

答案 = 随机整数(1, 100)

打印 '猜猜我想的是几?'
是否猜中 = 
 是否猜中 == :
   猜测值 = 整数(输入())
   是否猜中 = 是否相等(猜测值, 答案)
复制代码

几乎帮你把所有基础语法都转成了中文,甚至还可以用 emoji 表情……之前有同学对猜数字代码的理解还有疑惑,尤其是 bingo 这个变量,那如果写成这样,是不是更容易理解一点呢?

除此之外,还有不少中文编程语言,其中最出名的莫过于“易语言”。虽然科班出身的程序员都不太看得上这种语言,但不得不承认,它在我国的草根黑客圈中有着广泛的群众基础。

另外,我还发现了一个有趣语言,叫 PerlYuYan。看名字就知道是基于 Perl,但让你想不到的是,它将 Perl 翻译成了文言文……比如官方示例里的代码:

用警兮用嚴。

印道
一至一
哉兮

印編曰雜申
      雜申矣
又纖曰龍鼠矣
  又曰
    一矣

亂曰
國無人莫我知兮    又何懷乎故都
既莫足與為美政兮  吾將從彭咸之所居

資曰
印重一至一兮
重起一至十合始印終
复制代码


是不是感到不明觉厉!但实际上也就是字面上的翻译。比如 用警兮用嚴。,其实就是use warnings; use strict;。那么曰龍鼠矣,龙鼠又是什么鬼?根据下图自行体会吧(欢迎评论区抢答):

看了这些中文写出的代码,你现在有啥想法?觉得太酷炫了,还是视作异端?

最后还是说句,尽管可以用中文写代码,尽管有大量的中文资料、教程、文档,就算你自己也接受使用中文来学习编程甚至写代码,我还是强烈建议你尽量提升下英文,逼着自己去看报错、看原版文档、看 StackOverflow 上的问答,哪怕一开始你用翻译工具慢慢查。英语能力虽然对你编程起步的下限影响不大,但对你编程发展的上限至关重要。和学编程一样,这是个长期的过程,坚持下去总会有提升的。

之前我们还做过一个整理编程英语高频词汇的小项目,有需要的可以拿去参考:《我们用程序整理出了一份Python英语高频词汇表,拿走不谢!》,希望对你有所帮助。


════

其他文章及回答:

如何自学Python | 新手引导 | 精选Python问答 | Python单词表 | 人工智能 | 爬虫 | 我用Python | requests | 计算机视觉 | 字符播放器 | 一图学Python

欢迎搜索及关注公众号:Crossin的编程教室

相关文章:

  • Redis命令详解:Sorted Sets
  • 开发童鞋必知必会-Linux命令
  • css清除浮动的8种方法以及优缺点
  • 5G首秀北京CBD 将在智能交通等方面打造“智慧CBD”
  • 【BZOJ1049】 [HAOI2006]数字序列
  • 推动“绿色制造” 上海发布新版产业能效指南
  • 关中海关今日揭牌开关
  • 巨头竞赛:AWS和Azure的云区块链服务有何异同?
  • docker 容器无root 权限,如何获得docker容器里面的root权限
  • 一觉睡醒,我的SC存储性能提高了54%?!
  • 【Kyligence 公开课】视频回顾—— Superset设计与SQL查询
  • 设计模式之建造者模式
  • 苹果Q1财报出炉:手机收入下滑15%,服务收入增长19%
  • 2018年全国姓名报告发布:新生儿起名用这50个字最多
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 【css3】浏览器内核及其兼容性
  • Debian下无root权限使用Python访问Oracle
  • java小心机(3)| 浅析finalize()
  • Promise面试题,控制异步流程
  • Service Worker
  • Spark学习笔记之相关记录
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • TypeScript迭代器
  • 彻底搞懂浏览器Event-loop
  • 记一次和乔布斯合作最难忘的经历
  • 驱动程序原理
  • 使用 @font-face
  • Java数据解析之JSON
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 回归生活:清理微信公众号
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​批处理文件中的errorlevel用法
  • (23)Linux的软硬连接
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (rabbitmq的高级特性)消息可靠性
  • (编译到47%失败)to be deleted
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)母版页和相对路径
  • (转)项目管理杂谈-我所期望的新人
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • . NET自动找可写目录
  • ./configure,make,make install的作用(转)
  • .Net Core与存储过程(一)
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET/C# 使用反射注册事件
  • .NET实现之(自动更新)
  • .net中应用SQL缓存(实例使用)
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • :中兴通讯为何成功
  • ??javascript里的变量问题
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [Angular] 笔记 7:模块