Python之字符串练习题(下)

21.nameStr=“Albert Einstein",如何使用字符串运算符“:”来提取 nameStr 中的名和姓?

ming=nameStr[:6]
xing=nameStr[7:]

23.下面哪些语句在运行时不会出错?
(a)var ='xyz ’ * 10.5
(b)var =‘xyz’ * ‘5
©var=‘’xyz’*5
(d)var=‘xyz’*5.0

重复运算符中的数字一定要是整数的数字,不能是浮点数或字符串。
(c)不会出错

24.(逆转字符串)给定一个字符串,比如x='AlanTuring’,写个表达式,逆转它得到一个字符串,y=gniruT nalA’。

y=x[::-1]

25.给出字符串ab_string='abababababababab"。写一个表达式,去掉其中所有的“b",得到一个字符串a_string=‘aaaaaaaa’

a_string=ab_string.replace("b","")

26.给定字符串’abcdefghij’,写一行代码,显示下列结果(提示:使用分片)
(a)'jihgfedcba"
(b)*adgf’
©*igeca"

s="abcdefghij"
(a)s[::-1]
(b)s[::3]
(c)s[-2::-2]

27.使用find方法,编写一个短程序,当输入“Who’s on first?”时,输出两个字母’o’的索引值。

s=input()
index=0
while s.find("o",index)!=-1:
	print(s.find("o",index))
	index=s.find("o",index)+1

28.编写程序,将输入“Chapman,Graham Arhur”转换成“Graham Arhur Chapman”的形式

a,b=input().split(",") #以“,”分隔,然后赋值给a,b
print(b+" "+a)

30.与.lower 一样,编写程序,提示输入一个字符串,不使用string.lower方法,将字符串变成小写形式。

# 提示用户输入字符串  
input_string = input("请输入一个字符串:")  

# 初始化一个空字符串,用于存放小写形式的字符  
lowercase_string = ''  

# 遍历输入字符串中的每个字符  
for char in input_string:  
    # 检查字符是否是大写字母  
    if 'A' <= char <= 'Z':  
        # 将大写字母转换为小写字母  
        # 大写字母的ASCII码值和小写字母的ASCII码值相差32  
        lowercase_char = chr(ord(char) + 32)  
        lowercase_string += lowercase_char  
    else:  
        # 如果不是大写字母,保持原字符  
        lowercase_string += char  

# 输出转换后的字符串  
print("小写形式的字符串是:", lowercase_string)

32.下述代码:
x=input(‘Enter a string:’)
y=0
for i in x:
print y,i
y+=1
(a)如果输人“hello”,将输出什么?
(b)使用枚举的方式重构代码。

(a) 如果输入 "hello",根据给定的代码,输出将如下所示:
0 h
1 e
2 l
3 l
4 o

(b) 如果要使用 `enumerate` 方法重构代码,可以这样实现:

```python
x = input('Enter a string:')
for y, i in enumerate(x):
    print(y, i)

33.虽然对Pyihon输出进行格式化会很麻烦,但也能大幅提高输出的可读性。尝试建立一个字符串表,输出以下值:

name=['Methane','Ethane','Propane','Butane']
M_point=[-162,-89,-42,-0.5]
B_point=[-183,-172,-188,-135]
print("Melting and Boiling Points of Alkanes")
print("%-10s\t%-20s\t%-20s"%("Name","Melting Point(deg C","Boiling Point(deg C"))
for i in range(4):
    print("%-10s\t%-20s\t%-20s"%(name[i],M_point[i],B_point[i]))

34.x='water’,x.replace(‘w’,“c”,1)返回什么?

cater

35.下面的代码产生了错误:“ValueEror:too many values to unpack”。为什么?
first,second =input(‘two space-separated numbers:’)

右侧输入得到一个字符串,只有一个值。
左侧有两个变量
所以会报错

36.下面的代码:
myList = []
for i in range(0,6,2):
for k in range(4):
myList.append(i+k)
print(i) #Line 1
print(k) #Line 2
print(myList) #Line 3
(a)标号为1的行输出什么?
(b)标号为2的行输出什么?
©标号为3的行输出什么?

第一个for循环,range函数得到0,2,4,循环3次
第二个for循环,range函数得到0,1,2,3,循环4次
(a)4
(b)3
(c)[0, 1, 2, 3, 2, 3, 4, 5, 4, 5, 6, 7]

37.写一个程序,提示输入两个字符串,然后进行比较,输出较小的字符串。要求只能使用单字符比较操作。

# 提示用户输入两个字符串
str1 = input("请输入第一个字符串: ")
str2 = input("请输入第二个字符串: ")

len1 = len(str1)
len2 = len(str2)

smaller=''
    

for i in range(min(len1, len2)):
    if str1[i] < str2[i]:
        smaller=str1
        break     # str1 字符小于 str2,结束循环,最小是str1
    elif str1[i] > str2[i]:
        smaller=str2
        break     # str1 字符大于 str2,结束循环,最小是str2

if smaller=="":   #前面比较没有得到最小,最小的刚好是大的前缀
    if len1 < len2:
        smaller=str1
    else:
        smaller=str2

print("较小的字符串是:", smaller)

编程项目

1.智多星

智多星是一种有两名玩家的密码破译游戏;可以使用文本模拟方式在计算机上进行。我们可以通过互联网来了解该游戏的玩法。如果有一个真实的棋盘玩游戏会更好。游戏的玩法是:

  • 一个解码板,板上一端有一个盾,盾下面是排成一行的4个洞;板上还有12行,每行都有4 个大洞和4个小洞。
  • 代码钉有6种颜色(颜色ABCDEF),钉子是圆头的,将放置在解码板的大洞上。
  • 计分钉子是方头的,有黑色和白色两种,将放置在解码板上的小孔中。游戏中只计算每行上黑色和白色计分钉子的数量。

一名玩家为编码者,他会选择4种颜色的钉子放在盾牌下,而其他玩家不知道钉子是如何放置的。在这个版本里,颜色不能重复,也就是说,AABB的放法是不允许的。游戏的目标就是要解码者找出是哪4种颜色,并且是如何编码(摆放)的。
解码者试图在12轮猜测中找出编码格局(包括颜色和顺序)。每一轮猜测将在解码板上放置一排代码钉子。一旦放置好,编码者通过在4个小孔中依次放入计分钉子来给出反馈信息。颜色和位置都猜测正确,则在该位置放置一个黑色的计分钉子。如果颜色正确的钉子但位置不正确,则放一个白色的计分钉子。
当编码者提供反馈后,解码者进行下一轮的猜测,猜测和反馈交替进行,真到破译密码或12次猜测都错误为止。
编写程序以提供反馈的方式来模拟游戏。解码者通过输入颜色字符串进行每次猜测。模拟严格遵守猜测规则,即猪测由“ABCDEF”中的4种颜色组成。反馈是给出黑钉的数量和白钉的数量。程序确定反馈内容,并显示出来。猜测正确时,程序宣布获胜,如果12次猜测都不正确则宣布失败。此外,程序要显示输出完整的解码板状态,这样进行密码破译时,可以更方便参考前面的猜测情况。
提示:

  • 使用纸和铅笔玩这个游戏,在进行游戏算法设计前了解游戏。
  • 使用字符串表示代码和猜测。
  • 允许使用的颜色集合为字符串’ABCDEF’,这样可以使用“in”来检查字符串成员
  • 字符串方法isalpha 可以用于检查输人。
  • 可以使用连接方法,将猜测历史作为一个长字符串。行结束字符’\n’,用于提高输出可
    读性。
    (a)程序的第一个版本提示编码者输入编码。这样的游戏程序没有太大的可玩性,但它更容易测试。
    (6)程序的最终版本使用随机模块来创建编码者的编码,因此可以屏蔽解码者。
    i.使用 index=random.randint(start,end)函数来产生随机索引,start<indexend,从’ABCDEF’中选择代码字符
    ii.或者,使用random.sample(popuration,k),从指定的population 中返回长度为k的样本。连接表达式将函数返回值转换为字符串:
    code:".join(random.sample(‘ABCDEF’,4))

疯狂 Libs

《疯狂利布斯》(madhibs.com)是一个给孩子玩的古老文字游戏。游戏中给出提示,让玩家输入各类单词(颜色、女孩的名字、地点等),然后这些单词被插人一个预定义的故事中。在预先定义的故事中,用提示的值代替对应单词。例如:假设提示输人一个动词和名词,玩家输入了“giggle”和“spark"如果预定义的字符串为“哈姆雷特”的第一行,形式如下:
To VERB or not to VERB: that is the NOUN.
替换后的版本是:
To giggle or not to giggle: that is the spark :
创建你自己的预定义故事,其中要取代词类用大写表示:VERB、NOUN、ADJECTIVE等。如果在预定义的故事中需要增加一些参数,则用其他合适的单词来表示,这样你的故事会更有趣,例如BOYS_NAME、COLOR、ACTIVE-VERB等,要有创意。如果没什么想法,不妨从童话开始。例如,这是《小红帽》故事的开篇:story = “Once upon a time in the middle of a ADJECTIVE ONE NOUN ONE stood aADJECTIVE TWO NOUNTWO,the home of a ADJECTIVE ONE ADJECTIVE THREENOUN THREE known to everyone as GIRS NAME .”
提示用户输入字符串来取代篇章中指定的不同部分。显示出修改后的故事提示:字符串方法replace(old,new)会有用。

##《儿童黑话》
《儿童黑话》(PigLatin)是单词中的改换文字游戏。将英文单词转换为PigLatin 形式,即辅音被调换到单词的末尾,并且加上“ay”。具体而言,有两条规则:
(a)如果一个词以元音开头,单词的末尾添加“yay"
(b)如果单词以辅音开头,从开始处到第一个元音出现的位置出现的辅音字母,都连接到单词的末尾。最后,把“ay"添加到单词的末尾.例如:

  • dog= ogday
  • scratch => atchscray
  • is = isyay
    apple = appleyay
    写一个程序,反复提示输人英文单词,将单词转换成PigLain形式,显示转换后的单词。如果用户输入的一个句号,该程序终止。提示:
  • 使用分片,它可以提取第一个字符进行检查,还可以将分片连接,产生新词
  • 使用“in”运算符构造原音字符串,例如vowels=‘aeiou’。
  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值