找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: /zhqsystem/zhq

[其他] 批处理大小写字母转换

[复制链接]
发表于 2015-10-22 03:04:34 | 显示全部楼层
试着写写 python
  1. str='asdfsD1df'

  2. def l2u(str):
  3.         ret=''
  4.         for c in str:
  5.                 ret += chr(ord(c)&(0xff^0x20)) if c.isalpha() else c;
  6.         return ret

  7. def u2l(str):
  8.         ret=''
  9.         for c in str:
  10.                 ret += chr(ord(c)|0x20) if c.isalpha() else c;
  11.         return ret

  12. print (l2u(str))
  13. print (u2l(str))
复制代码

评分

参与人数 1技术 +1 收起 理由
依山居 + 1 1

查看全部评分

发表于 2015-10-22 11:51:02 | 显示全部楼层
回复 16# CrLf


    解释一下,0xff^0x20
谢谢。
发表于 2015-10-22 12:54:16 | 显示全部楼层
回复 16# CrLf


    其实是ret += chr(ord(c)&(0xff^0x20)) if c.isalpha() else c 整行语法我没看懂。
发表于 2015-10-22 13:34:15 | 显示全部楼层
回复 18# 依山居

python一种类三元表达式
常规语法是这样
if (c.isalpha()): ret += chr(ord(c)&223)
else: ret += c

另几种方式
ret += c.isalpha() and chr(ord(c)&223) or c
ret += [c,chr(ord(c)&223)][c.isalpha()]

评分

参与人数 2技术 +2 收起 理由
CrLf + 1 数组用得漂亮
依山居 + 1 1

查看全部评分

发表于 2015-10-22 13:49:40 | 显示全部楼层
呃,套用了 c 的算法:
  1. 'a' == 0x60
  2. 'A' == 0x40

  3. 0xff^0x20 == 0b11111011
  4. 0x20 == 0b00000100

  5. 'a'  & (0xff^0x20) = 'A'
  6. 'A'  | 0x20 = 'a'
复制代码

评分

参与人数 1技术 +1 收起 理由
依山居 + 1 1

查看全部评分

发表于 2015-10-22 15:14:35 | 显示全部楼层
回复 20# CrLf


    我想要在ret += chr(ord(c)|0x20) if c.isalpha() else c;
下面加一行print(ret),怎么加?
发表于 2015-10-22 20:36:50 | 显示全部楼层
回复 21# 依山居


    啥意思,直接加上不就好了
发表于 2015-10-22 20:41:22 | 显示全部楼层
回复 22# CrLf


    我加的时候报错了。
发表于 2015-10-22 20:42:47 | 显示全部楼层
好了。抱歉,可以是我之前没注意到我哪里弄错了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 11:36 , Processed in 0.020067 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表