Python 语言程序设计 第五章 字符串应用举例

写在开头:这些题一定要自己去试一试,不能光看一遍!

p104


1.输入一个字符串,每次去掉最后的字符并输出。

书上给的代码:

s=input()

for i in range(-1,-len(s),-1):
    print(s[:i])

调整range也可以得到相同的结果:

s=input()

for i in range(len(s)-1,0,-1):
    print(s[:i])


2.翻译密码。 为了保密,常不采用明码电文,而用密码电文,按事先约定的规律将一个字
符转换为另一个字符, 收报人则按相反的规律转换得到原来的字符。例如,将字母“A”→“F",“B”→“G”,“C”→“H”,即将一个字母变成其后第5个字母。例如,“He is in Beijing," 应转换为“Mj nxns Gjnonsl.”。
分析:依次取电文中的字符,对其中的字母进行处理,对字母之外的字符维持原样。取字母的
字符串ASCII代码,加上5,再按其ASCII码转换为另一个字母。还有一个问题要处理, 当字母为“V”时,加5就超过了“Z”, 故应使之转换为“A”,同理,“W”→“B”,“X”一“C”,“Y”一“D”,“Z”→“E”。

 

学过c语言的很容易就会想到这种方法:

#include<iostream>

using namespace std;

int main(){
	char s='a';
	printf("%d",s+1);
	printf("%c",s+1);
}

就是一个字符加上一个数字嘛!

但是在python中不行:

s='a'

print("%d"%(s+5))
print("%c"%(s+5))

 

 这段话的意思是:只能str类型与str类型连接;不能str类型与int类型连接


因为我在看书的p87时,没仔细看就跳过了,这里面有解决这个问题的方法:

python提供了ord()函数和chr()两个内置函数,用于字符与其机器内部编码值之间的转换。

ord()函数将一个字符转化为相应编码值。

chr()函数将一个整数转换成Unicode字符。

z='a'
print(z)
print(ord(z))

x=65
print(x)
print(chr(x))

所以,上面的问题这样解决:

s='a'

#print("%d"%(s+5))
#print("%c"%(s+5))
print(ord(s)+5)
print(chr(ord(s)+5))

代码:

line1=input()
line2=""

for c1 in line1:
    if c1.isalpha():
        i=ord(c1)
        j=i+5
        if(j>ord('z') or (j>ord('Z') and j<ord("Z")+6)):
            j-=26
        line2+=chr(j)
    else:
        line2+=c1
print(line2)

3.Python 的标识符以字母或下画线(_ )开头,后接字母、数字或下画线组成,从键盘输入字符串,判断它是否为Python的标识符。
分析:利用string模块中的常量,包括string.digits (数字0~9)、string.ascii letters (所有大小写字
母)、string .ascii lowercase (所有小写字母)、string.ascii uppercase (所有大写字母)。先输入字符串,再分别判断首字符和中间字符,并给出提示。判断中间字符利用for循环遍历字符串。

首先了解一下string库中的几个常量:

import string
print(string.ascii_letters)   #大写与小写字母
print(string.ascii_lowercase) #小写字母
print(string.ascii_uppercase) #大写字母
print(string.digits)          #数字

书上的代码:(输入的字符串必须大于等于两个字符)

import string
alphas=string.ascii_letters+"_"
nums=string.digits

myInput=input()
if len(myInput)>1:
    if myInput[0] not in alphas:
        print("NO")
    else:
        for otherchar in myInput[1:]:
            if otherchar not in alphas+nums:
                print("NO")
                break
        else:
            print("Yes")

我写的代码:(单个字符也行)

import string
flag1=1#当出现不符合的字符时,赋值为0
flag2=1#用于判断第一个字符
line=input()

line1=string.ascii_letters+"_"
line2=string.ascii_letters+string.digits+"_"
for c in line:
    if flag2:#判断第一个字符
        if c not in line1:
            flag1=0
        flag2=0
    else:#判断其余字符
        if c not in line2:
            flag1=0
            
    if not flag1:
        break

if flag1:
    print("YES")
else:
    print("NO")

使用正则表达式:(单个字符也行)

import re
pattern =re.compile(r"\b[a-zA-Z_](\w|_)*\b")
myInput=input()
m_Obj=pattern.match(myInput)
if m_Obj:
    print("YES")
else:
    print("NO")

4.从键盘输入几个数字,用逗号分隔,求这些数字的和

分析:输入的数字作为一个字符串处理,首先分离出来数字串,在转化为数值,这样就能求和。

我一开始想的是这样的:

#这个代码不对
import string
number=input()
line2=""

for i in number:
    if i in string.digits:
        line2+=i
sum=0
for i in line2:
    sum+=int(i)
print(sum)

输入与输出看似没问题:

 但是输入其他测试样例的时候,结果却是这样:

 为什么呢?因为我输入的是“1.2,45”,i每次读取到的是一个字符,所以i读取到的是

number=input()

for i in number:
    print(i,end="*")

所以导致了不对。


在书上的p96有这样一个函数:

s.split([sep,[maxsplit]])

以sep为分隔符,将字符串拆分为一个列表,默认的分隔符是空格,maxsplit表示拆分的次数,默认取-1,表示无限制拆分。

用split函数来修改上面的代码:

number=input()

for i in number.split(","):
    print(i,end=" ")

代码1:

number=input()
sum=0

for i in number.split(","):
    sum+=float(i)

print(sum)

 

也可以使用正则表达式来实现:

import re
number=input()
p=re.compile(",")
d=p.split(number)

sum=0
for i in d:
    sum+=float(i)

print(sum)


p95

对于strip()函数的理解:

s.strip([chars])     

s.lstrip([chars])

s.rstrip([chars])

课本上的对这三个函数的解释我没理解,下面我用自己的方法来解释一下:

s.strip([chars])   

 

这个函数的意思是,对于字符串s,我们从左到右和从右到左扫描一遍,删除chars中有的字符。

这些字符必须是连续的。

例:

s='Python Program'
print(s)
print(s.strip("Pyt m r"))

 chars是“Pyt m r”,所以从前往后扫描,去掉Pyt  ,然后从后往前扫描,去掉m。

但是这里有一个疑问,为什么Program中有P,r和m,在从后往前扫描中为什么只删除了m?

因为从后往前数,第一个字符是m,第二个字符是a,chars中没有a,第三字符是r,但是r和m并不连续。

如果我们在chars中加上a的话:

s='Python Program'
print(s)
print(s.strip("Pyt m ra"))

 这样r也会被删掉,因为ram是连续的。

s.lstrip([chars])

s.rstrip([chars])

l代表left,从左往右,也就是从前往后;r代表right,从右往左,也就是从后往前。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【大纲】 0-1-课程内容和安排介绍 1-1-计算机的概念 1-2-程序设计语言概述 1-3-Python语言 1-4-Python开发环境配置 1-5-基本程序设计方法 1-6-理解问题的计算部分 1-7-温度转换程序实例 2-1-Python程序元素分析 2-2-程序编写模板 2-3-turtle库和蟒蛇绘制程序 2-4-蟒蛇绘制程序分析 2-5-函数库的引用 3-1-Python类型的概念 3-2-数字类型 3-3-字符串类型 3-4-字符串的操作 3-5-元组类型 3-6-列表类型及操作 3-7-math库和random库 3-8-π的计算 4-1-1-程序基本结构 4-1-2-简单分支 4-1-3-多分支 4-1-4-异常处理设计 4-1-5-三者最大实例分析 4-2-1-基本循环结构 4-2-2-通用循环构造方法 4-2-3-死循环半路循环 4-2-4-布尔表达式 6-1-1-文件的基础 6-1-2-文件的基本处理 6-1-3-文件实例一 6-1-4-文件实例二 6-2-1-字典的基础 6-2-2-字典的操作 6-2-3-字典实例一 6-2-4-字典实例二 7-3-1-计算思维 7-3-2-自顶向下的设计 7-3-3-自底向上的执行 7-3-4-软件工程 7-3-5-敏捷开发方法 7-4-1-面向过程的程序设计 7-4-2-面向对象的程序设计 7-4-3-基本例子 7-4-4-面向对象的特点 8-6-1-基本介绍 8-6-2-图形对象概念 8-6-3-交互式图形用户接口 8-6-4-图形库的应用方法 8-6-5-Turtle库介绍 8-6-6-图形用户接口实例 8-6-7-Turtle实例 8-6-8-Turtle Art 第6章-函数与递归-1-函数定义 第6章-函数与递归-2-函数的调用和返回值 第6章-函数与递归-3-改变参数值的函数 第6章-函数与递归-4-程序结构和递归 第6章-函数与递归-5-函数实例
【大纲】 0-1-课程内容和安排介绍 1-1-计算机的概念 1-2-程序设计语言概述 1-3-Python语言 1-4-Python开发环境配置 1-5-基本程序设计方法 1-6-理解问题的计算部分 1-7-温度转换程序实例 2-1-Python程序元素分析 2-2-程序编写模板 2-3-turtle库和蟒蛇绘制程序 2-4-蟒蛇绘制程序分析 2-5-函数库的引用 3-1-Python类型的概念 3-2-数字类型 3-3-字符串类型 3-4-字符串的操作 3-5-元组类型 3-6-列表类型及操作 3-7-math库和random库 3-8-π的计算 4-1-1-程序基本结构 4-1-2-简单分支 4-1-3-多分支 4-1-4-异常处理设计 4-1-5-三者最大实例分析 4-2-1-基本循环结构 4-2-2-通用循环构造方法 4-2-3-死循环半路循环 4-2-4-布尔表达式 6-1-1-文件的基础 6-1-2-文件的基本处理 6-1-3-文件实例一 6-1-4-文件实例二 6-2-1-字典的基础 6-2-2-字典的操作 6-2-3-字典实例一 6-2-4-字典实例二 7-3-1-计算思维 7-3-2-自顶向下的设计 7-3-3-自底向上的执行 7-3-4-软件工程 7-3-5-敏捷开发方法 7-4-1-面向过程的程序设计 7-4-2-面向对象的程序设计 7-4-3-基本例子 7-4-4-面向对象的特点 8-6-1-基本介绍 8-6-2-图形对象概念 8-6-3-交互式图形用户接口 8-6-4-图形库的应用方法 8-6-5-Turtle库介绍 8-6-6-图形用户接口实例 8-6-7-Turtle实例 8-6-8-Turtle Art 第6章-函数与递归-1-函数定义 第6章-函数与递归-2-函数的调用和返回值 第6章-函数与递归-3-改变参数值的函数 第6章-函数与递归-4-程序结构和递归 第6章-函数与递归-5-函数实例
【大纲】 0-1-课程内容和安排介绍 1-1-计算机的概念 1-2-程序设计语言概述 1-3-Python语言 1-4-Python开发环境配置 1-5-基本程序设计方法 1-6-理解问题的计算部分 1-7-温度转换程序实例 2-1-Python程序元素分析 2-2-程序编写模板 2-3-turtle库和蟒蛇绘制程序 2-4-蟒蛇绘制程序分析 2-5-函数库的引用 3-1-Python类型的概念 3-2-数字类型 3-3-字符串类型 3-4-字符串的操作 3-5-元组类型 3-6-列表类型及操作 3-7-math库和random库 3-8-π的计算 4-1-1-程序基本结构 4-1-2-简单分支 4-1-3-多分支 4-1-4-异常处理设计 4-1-5-三者最大实例分析 4-2-1-基本循环结构 4-2-2-通用循环构造方法 4-2-3-死循环半路循环 4-2-4-布尔表达式 6-1-1-文件的基础 6-1-2-文件的基本处理 6-1-3-文件实例一 6-1-4-文件实例二 6-2-1-字典的基础 6-2-2-字典的操作 6-2-3-字典实例一 6-2-4-字典实例二 7-3-1-计算思维 7-3-2-自顶向下的设计 7-3-3-自底向上的执行 7-3-4-软件工程 7-3-5-敏捷开发方法 7-4-1-面向过程的程序设计 7-4-2-面向对象的程序设计 7-4-3-基本例子 7-4-4-面向对象的特点 8-6-1-基本介绍 8-6-2-图形对象概念 8-6-3-交互式图形用户接口 8-6-4-图形库的应用方法 8-6-5-Turtle库介绍 8-6-6-图形用户接口实例 8-6-7-Turtle实例 8-6-8-Turtle Art 第6章-函数与递归-1-函数定义 第6章-函数与递归-2-函数的调用和返回值 第6章-函数与递归-3-改变参数值的函数 第6章-函数与递归-4-程序结构和递归 第6章-函数与递归-5-函数实例
【大纲】 0-1-课程内容和安排介绍 1-1-计算机的概念 1-2-程序设计语言概述 1-3-Python语言 1-4-Python开发环境配置 1-5-基本程序设计方法 1-6-理解问题的计算部分 1-7-温度转换程序实例 2-1-Python程序元素分析 2-2-程序编写模板 2-3-turtle库和蟒蛇绘制程序 2-4-蟒蛇绘制程序分析 2-5-函数库的引用 3-1-Python类型的概念 3-2-数字类型 3-3-字符串类型 3-4-字符串的操作 3-5-元组类型 3-6-列表类型及操作 3-7-math库和random库 3-8-π的计算 4-1-1-程序基本结构 4-1-2-简单分支 4-1-3-多分支 4-1-4-异常处理设计 4-1-5-三者最大实例分析 4-2-1-基本循环结构 4-2-2-通用循环构造方法 4-2-3-死循环半路循环 4-2-4-布尔表达式 6-1-1-文件的基础 6-1-2-文件的基本处理 6-1-3-文件实例一 6-1-4-文件实例二 6-2-1-字典的基础 6-2-2-字典的操作 6-2-3-字典实例一 6-2-4-字典实例二 7-3-1-计算思维 7-3-2-自顶向下的设计 7-3-3-自底向上的执行 7-3-4-软件工程 7-3-5-敏捷开发方法 7-4-1-面向过程的程序设计 7-4-2-面向对象的程序设计 7-4-3-基本例子 7-4-4-面向对象的特点 8-6-1-基本介绍 8-6-2-图形对象概念 8-6-3-交互式图形用户接口 8-6-4-图形库的应用方法 8-6-5-Turtle库介绍 8-6-6-图形用户接口实例 8-6-7-Turtle实例 8-6-8-Turtle Art 第6章-函数与递归-1-函数定义 第6章-函数与递归-2-函数的调用和返回值 第6章-函数与递归-3-改变参数值的函数 第6章-函数与递归-4-程序结构和递归 第6章-函数与递归-5-函数实例
可以通过设置 QLineEdit 的 echoMode 属性来实现密码框明码和密码的切换。 echoMode 属性有四个可选值: - Normal:正常模式,显示用户输入的字符。 - NoEcho:不回显模式,输入的字符不可见。 - Password:密码模式,显示为圆点或星号等特殊字符。 - PasswordEchoOnEdit:编辑时密码模式,当用户编辑时显示为明文,编辑结束后显示为密码模式。 在密码切换按钮的槽函数,修改 QLineEdit 的 echoMode 属性即可切换密码显示模式。 示例代码如下: ```python from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QVBoxLayout class PasswordWidget(QWidget): def __init__(self): super().__init__() self.password_edit = QLineEdit() self.password_edit.setEchoMode(QLineEdit.Password) self.show_password_button = QPushButton('Show Password') self.show_password_button.clicked.connect(self.toggle_password_echo_mode) layout = QVBoxLayout() layout.addWidget(self.password_edit) layout.addWidget(self.show_password_button) self.setLayout(layout) def toggle_password_echo_mode(self): if self.password_edit.echoMode() == QLineEdit.Password: self.password_edit.setEchoMode(QLineEdit.Normal) self.show_password_button.setText('Hide Password') else: self.password_edit.setEchoMode(QLineEdit.Password) self.show_password_button.setText('Show Password') if __name__ == '__main__': app = QApplication([]) password_widget = PasswordWidget() password_widget.show() app.exec_() ``` 运行代码,可以看到一个密码框和一个切换密码显示模式的按钮。点击按钮,密码框的显示模式会切换为明码和密码模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值