头歌实践教学平台——Python程序设计之字符串(导学)

目录

序列通用操作自学检测

拼接成一个新列表        B

索引操作        A

序列的重复操作        D

切片操作        A

获取序列的长度        B

索引号        A

成员测试        A

切片        A 

重复操作        D

字符串常用方法自学检测

子串的索引位置        B

upper        B

检查字符串是否以指定的子串结束        B

分割一个字符串         A

title()        A

合并一个字符串列表        B

去除字符串首尾的空白字符        B

检查字符串        A

字符串转换为整数        A

找到子串        A

5.1 统计英文文件中的单词数(project)

5.2 凯撒密码(project)

凯撒密码-加密

凯撒密码-解密

5.4 文本分析与加密(project)

统计字符数量

统计单词数量

计算偏移量

凯撒密码加密

5.5 日期分析处理(project)

判断闰年

输出当前月份共有多少天

日期转换格式

判断日期合法性

月份的英文名称

5.6 单词猎手游戏(project)

字符串、列表随机取值

猜测目标单词

单词猎手游戏

如果此文章对你有所帮助,麻烦点个赞,谢谢~~~

点赞加关注,追新不迷路~~~


序列通用操作自学检测

拼接成一个新列表        B


索引操作        A

序列的重复操作        D

切片操作        A

获取序列的长度        B

索引号        A

成员测试        A

切片        A 

重复操作        D

字符串常用方法自学检测

子串的索引位置        B

upper        B

检查字符串是否以指定的子串结束        B


分割一个字符串         A
 

title()        A
 

合并一个字符串列表        B
 

去除字符串首尾的空白字符        B
 

检查字符串        A
 

字符串转换为整数        A
 

找到子串        A

5.1 统计英文文件中的单词数(project)

# 补充你的代码
a = input()
import string
with open(f'/data/bigfiles/{a}', 'r', encoding='utf-8') as text:  # 打开文件a.txt,创建文件对象
    txt = text.read()  # 读文件为字符串
    for i in ",.!\'":
        txt = txt.replace(i, " ")
    x1 = txt.split()
    print('共有'+str(len(x1))+"个单词")
 
 
 
 

5.2 凯撒密码(project)

凯撒密码-加密

import string
 
def caesar_cipher(text):
    """接收一个字符串为参数,采用字母表和数字中后面第3个字符代替当前字符的方法
    对字符串中的字母和数字进行替换,实现加密效果,返回值为加密的字符串。
    例如:2019 abc 替换为5342 def """
    ########## Begin ##########
    lower = string.ascii_lowercase
    upper = string.ascii_uppercase
    digit = string.digits
    before = lower + upper + digit
    after = lower[3:]+lower[:3] + upper[3:]+upper[:3]+ digit[3:]+digit[:3]
    result = ''.maketrans(before, after)
    return text.translate(result)
 
    ########## End ##########
 
if __name__ == '__main__':
    plaintext = input()
    print(caesar_cipher(plaintext))
    #+


凯撒密码-解密

import string
 
def caesar_decrypt(text, offset):
    """接收一个加密的字符串text和一个整数offset为参数,采用字母表和数字中前面第offset个字符
    代替当前字符的方法对字符串中的字母和数字进行替换,实现解密效果,返回值为解密的字符串。"""
    ###############################Begin#############################################
    lower = string.ascii_lowercase          # 小写字母
    upper = string.ascii_uppercase          # 大写字母
    digit = string.digits                # 数字
    before = string.ascii_letters + digit
    after = lower[offset:] + lower[:offset] + upper[offset:] + upper[:offset] + digit[offset:] + digit[:offset]
    table = ''.maketrans(after, before)
    decrypt_text = text.translate(table)
    return decrypt_text  
 
 
    ################################End##############################################
 
def find_offset(key_text, ciphertext):
    """接收一个单词和一个加密字符串为参数,尝试用[0,25]之间的数为偏移量进行解密。
        如果key_text 在解密后的明文里,则说明解密成功。
    找出偏移量数值并返回这个整数偏移量。"""
    ###############################Begin#############################################
    for i in range(26):
        plain_text = caesar_decrypt(ciphertext, i) #使用i作为偏移量,尝试解密得到明文
        if key_text in plain_text : # 如果key_text在明文里,说明偏移值为i时能成功解密
            return i
    ################################End##############################################
 
 
if __name__ == '__main__':
    key_message = 'question'                                   #密文中的已知单词
    cipher_text = 'Yt gj,tw sty yt gj,ymfy nx f vzjxynts.'      #截获的密文
    secret_key = find_offset(key_message, cipher_text)   #破解密码,得到密匙
    print(f'密钥是{secret_key}')
    
    target_text = input() #读入新密文,进行解密
    #'Fyyfhp ts Ujfwq Mfwgtw ts Ijhjrgjw 2, 6496'   #新密文,需要解密
    print(caesar_decrypt(target_text, secret_key))  #解密,打印明文

5.4 文本分析与加密(project)

统计字符数量

import string
# 读文件,返回字符串  
def read_file(file):  
    # 补充你的代码
    with open(file, 'r', encoding='utf-8') as f:  
        return f.read()


# 返回大写字母、小写字母、数字、空格和其他字符的数量  
def classify_char(txt):  
    # 补充你的代码
    upper, lower, digit, space, other = 0, 0, 0, 0, 0  
    for ch in txt:  
        if ch.islower():  
            lower = lower + 1  
        elif ch.isupper():  
            upper = upper + 1  
        elif ch.isnumeric():  
            digit = digit + 1  
        elif ch.isspace():  
            space = space + 1  
        else:  
            other = other + 1  
    return upper, lower, digit, space, other 
    

if __name__ == '__main__':  
    filename = 'mayun.txt'  # 读取的文件名  
    text = read_file(filename)  # text为字符串  
    print(*classify_char(text))  


统计单词数量

import string


# 读文件,返回字符串
def read_file(file):    
   with open(file, 'r', encoding='utf-8') as f:      
        return f.read()  


def word_list(txt):
    """用空格替换所有符号,切分为列表"""
    for ch in '!"#$%&()*+,-.:;<=>?@[\\]^_’‘{|}~/':
    # 补充你的代
        txt = txt.replace(ch, " ")  # 所有符号替换为空格  
    # print(txt)  
    return txt.split()  # 切分为列表,返回列表
    



def number_of_words(ls):
    """返回单词数量"""
    # 补充你的代码
    total_words = len(ls)  # 列表长度
    return total_words  # 列表长度即单词个数


if __name__ == '__main__':
    filename = 'mayun.txt'  # 读取的文件名
    text = read_file(filename)  # text为字符串
    words_list = word_list(text)  # 单词的列表
    words_counts = number_of_words(words_list)
    print(f'共有{words_counts}单词')


计算偏移量

import string

# 
def offset_cal(day):
    """用字符串中字符ASCII值的和对26取模为偏移量"""
    # 补充你的代码
    sum_of_ch = 0  
    for c in day:  
        sum_of_ch = sum_of_ch + ord(c)  
    offset = sum_of_ch % 26  
    return offset


if __name__ == '__main__':
    secret_word = input()
    offset_number = offset_cal(secret_word)
    print(offset_number)


凯撒密码加密

import string
# 读文件,返回字符串  
def read_file(file):  
    with open(file, 'r', encoding='utf-8') as f:  
        return f.read()

# 
def offset_cal(day):  
    """用字符串中字符ASCII值的和对26取模为偏移量  """
    sum_of_ch = 0  
    for c in day:  
        sum_of_ch = sum_of_ch + ord(c)  
    offset = sum_of_ch % 26  
    return offset

def kaisa(txt, number):  
    # 补充你的代码
    lower = string.ascii_lowercase  # 小写字母
    upper = string.ascii_uppercase  # 大写字母
    before = string.ascii_letters
    after = lower[number:] + lower[:number] + upper[number:] + upper[:number]
    table = ''.maketrans(before, after)  # 创建映射表
    return txt.translate(table)
 

if __name__ == '__main__':  
    filename = 'mayun.txt'  # 读取的文件名  
    text = read_file(filename)  # text为字符串  
    secret_word = input()  
    offset_number = offset_cal(secret_word)  
    print(kaisa(text, offset_number))  

5.5 日期分析处理(project)

判断闰年

def leap(current_date):
    """接收一个用8个字符表示日期的字符串为参数,判断这个日期中的年份是否为闰年
    返回值为布尔型。
    闰年的判定方法是:能被400整除或能被4整除且同时不能被100整除的是闰年。
    """
    # 补充你的代码
    if (int(current_date[:4]) % 4 ==0 or int(current_date[:4]) % 400 ==0)  and int(current_date[:4]) % 100 !=0:
        return True
    else:
        return False
 
if __name__ == '__main__':
    date = input()      # 输入一个表示年份的8位数字字符串
    if leap(date[:4]):  # 如果输入的年份是闰年
        print(f'{date[:4]}年是闰年')
    else:
        print(f'{date[:4]}年不是闰年')


输出当前月份共有多少天

def days_of_month(current_date):
    """接收一个用8个字符表示日期的字符串为参数,计算这个日期中的月份有多少天?返回值为整型,
    表示当前月份天数。
    @参数 current_date:表示日期,字符串类型
    """
    # 补充你的代码
    dm = [31,28,31,30,31,30,31,31,30,31,30,31] 
    if leap(current_date):
        dm[1] = 29
    days = dm[(int(CurrentDate[4:6])-1)]
    return days
    
def leap(current_date):
    """接收一个用8个字符表示日期的字符串为参数,判断这个日期中的年份是否为闰年
    返回值为布尔型。
    闰年的判定方法是:能被400整除或能被4整除且同时不能被100整除的是闰年。
    """
    # 补充你的代码
    if (int(current_date[:4]) % 4 ==0 or int(current_date[:4]) % 400 ==0)  and int(current_date[:4]) % 100 !=0:
        return True
    else:
        return False
   
if __name__ == '__main__':
    CurrentDate = input()
    days = days_of_month(CurrentDate)
    print(f'{CurrentDate[:4]}年{int(CurrentDate[4:6])}月有{days}天')


日期转换格式

def separate_date(current_date, symbol):
    """接收一个用8个字符表示日期的字符串和一个符号为参数,返回用该符号分隔的日期,字符串类型。
    @参数 current_date:表示日期,字符串类型
    @参数 symbol:分隔符号,字符串类型
    例如传入'20201031'和"/",返回字符串'2020/09/09'
    """
    # 补充你的代码
 
    return f'{current_date[0:4]}{symbol}{current_date[4:6]}{symbol}{current_date[6:]}'
 
 
if __name__ == '__main__':
    CurrentDate = input()  # 输入8位数字表示的日期
    sign = input()         # 输入分隔符
    print(separate_date(CurrentDate, sign))  # 输出用分隔符分隔的日期


判断日期合法性

def legal_judge(current_date):
    """接收一个用8个字符表示日期的字符串为参数,判定日期的合法性,返回值为布尔型。
    1,3,5,7,8,10,12月各31天,4,6,9,11各30天,闰年2月29天,平年2月28天。
    @参数 current_date:表示日期,字符串类型
    """
    # 补充你的代码
    dm = [31,28,31,30,31,30,31,31,30,31,30,31]
    if leap(current_date):
        dm[1] = 29
    if int(CurrentDate[6:]) <= dm[(int(CurrentDate[4:6])-1)]:
        return True
    else:
        return False
 
def leap(current_date):
    """接收一个用8个字符表示日期的字符串为参数,判断这个日期中的年份是否为闰年
    返回值为布尔型。
    闰年的判定方法是:能被400整除或能被4整除且同时不能被100整除的是闰年。
    """
    # 补充你的代码
    if (int(current_date[:4]) % 4 ==0 or int(current_date[:4]) % 400 ==0)  and int(current_date[:4]) % 100 !=0:
        return True
    else:
        return False
 
if __name__ == '__main__':
    CurrentDate = input()
    if legal_judge(CurrentDate):
        print(f'{CurrentDate}是合法日期')
    else:
        print(f'{CurrentDate}是非法日期')


月份的英文名称

def name_of_month(current_date):
    """接收一个用8个字符表示日期的字符串为参数,返回这个月份对应的英文单词及其缩写形式。
    @参数 current_date:表示日期,字符串类型
    例如:current_date为20201031,返回值为'October','Oct.'
    日期的英文全称:['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October','November', 'December']
    日期的英文缩写:September为前四位字母加点,其余月份均为前三位字母加点,如:'Sept.','Jan.'
    """
    # 补充你的代码
    m =['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October','November', 'December']
    monthName = m[(int(current_date[4:6])-1)]
 
    if int(current_date[4:6]) == 9:
        monthAbbr = str(monthName[:4])
    else:
        monthAbbr = str(monthName[:3])
    return monthName, monthAbbr
 
if __name__ == '__main__':
    CurrentDate = input()
    monthName, monthAbbr = name_of_month(CurrentDate)  # 获得月份名称和缩写
    print(f'{int(CurrentDate[4:6])}月英文是{monthName},缩写为{monthAbbr}.')
    

5.6 单词猎手游戏(project)

字符串、列表随机取值

import random
 
 
def read_file(file):
    """接收一个文件名为参数,读取文件中的内容为字符串类型,
    替换字符串中的标点和符号为空格,根据空格将字符串切分为单词为元素的列表,
    返回这个列表。
    @参数 file:文件名,字符串类型
    读取文件前先输出'正在从文件加载单词列表...'
    转为列表后输出输出'成功加载了多少个单词' """
    print('正在从文件加载单词列表...')
    with open(file, 'r', encoding='utf-8') as novel:
        txt = novel.read()
    symbols = '!"#$%&()*+,-.:;[\'][\"]<=>?@[\\]^_‘{|}~/'   #标点、符号 字符串
 
    # 将所有符号替换为空格
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
    for i in symbols:
        if i in txt:
            txt = txt.replace(i, " ")
    #####################End#####################################
 
    print(f'成功加载{len(txt.split())}个单词')
    return txt.split()  # 切分为列表,返回列表
 
def secret_word(ls):
    """参数为从文件中读取的单词列表,返回值为随机得到的一个单词。
    @参数 ls:单词列表,列表类型
    在测试程序时,可以先预设一个有少数单词的列表,例如随机数种子为19730516时:
    # >>> ls = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    # >>> secret_word(ls)
    # 'Monday'
    """
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
  
    return random.choice(ls)
 
    #####################End#####################################
 
if __name__ == '__main__':
    test_seed = int(input())
    random.seed(test_seed)
    filename = 'data/gone with the wind.txt'  # 文件名
    wordlist = read_file(filename)
    secretword = secret_word(wordlist)
    print(secretword)


猜测目标单词

def get_guessed_word(cover_word, word, letter):
    """接受三个字符串为参数:分别表示正在猜测的遮盖了字母的单词、随机抽取的单词和正在猜测的字母。
    每次猜测后产生一个由猜中字母和下划线与空格组成的字符串,猜中的字母显示出来,未知字母用"_"
    表示,字母间留一个空格。返回每次猜测后由字母和下划线组成的字符串。
    @参数 cover_word:遮盖了字母的单词,字符串类型
    @参数 word:随机抽取的单词,字符串类型
    @参数 letter:正在猜测的字母,字符串类型
    """
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
    for i in range(len(word)):
        if letter == word[i]:
            cover_word = cover_word[:2*i] + letter + " " + cover_word[2*(i+1):]
 
    #####################End#####################################
    print(f'当前猜测结果为:{cover_word}')
    return cover_word
 
if __name__ == '__main__':
    word = input()
    print(f'单词长度为{len(word)}')  # 先提示用户单词长度
    cover_word = '_ ' * len(word)  # 产生一个由下划线与空格构成的字符串,每组下划线与空格代表一个字母
    print(cover_word)
    for i in range(1, 2 * len(word) + 1):  # 最多猜测2倍字母数次
        print(f'当前是第{i}次猜测,你还有{2 * len(word) - i}次机会')
        letter = input('请输入你猜测的字母:')  # 输入猜测的字母
        cover_word = get_guessed_word(cover_word, word, letter)
        guess_word = cover_word.replace(' ', '')
        if guess_word == word:  # 替换字符串中的空格,查看是否猜中
            print(f'你太厉害了,居然只用了{i}次就猜中了单词')
            print(f'秘密单词是:{guess_word}')  # 猜中后输出时去掉单词中的空格
            break


单词猎手游戏

import random
 
 
def read_file(file):
    """接收一个文件名为参数,读取文件中的内容为字符串类型,
    替换字符串中的标点和符号为空格,根据空格将字符串切分为单词为元素的列表,
    返回这个列表。
    @参数 file:文件名,字符串类型
    读取文件前先输出'正在从文件加载单词列表...'
    转为列表后输出输出'成功加载了多少个单词' """
    print('正在从文件加载单词列表...')
    with open(file, 'r', encoding='utf-8') as novel:
        txt = novel.read()
    symbols = '!"#$%&()*+,-.:;[\'][\"]<=>?@[\\]^_‘{|}~/'
    for ch in symbols:
        txt = txt.replace(ch, " ")  # 所有符号替换为空格
    print(f'成功加载{len(txt.split())}个单词')
    # print(txt.split())
    return txt.split()  # 切分为列表,返回列表
 
 
def secret_word(ls):
    """参数为从文件中读取的单词列表,返回值为随机得到的一个单词。
    @参数 ls:单词列表,列表类型
    在测试程序时,可以先预设一个有少数单词的列表,例如随机数种子为19730516时:
    # >>> ls = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    # >>> secret_word(ls)
    # 'Monday'
    """
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
    word = random.choice(ls)
    return word
    #####################End#####################################
 
 
def get_guessed_word(cover_word, word, letter):
    """接受三个字符串为参数:分别表示正在猜测的遮盖了字母的单词、随机抽取的单词和正在猜测的字母。
    每次猜测后产生一个由猜中字母和下划线与空格组成的字符串,猜中的字母显示出来,未知字母用"_"
    表示,字母间留一个空格。返回每次猜测后由字母和下划线组成的字符串。
    @参数 cover_word:遮盖了字母的单词,字符串类型
    @参数 word:随机抽取的单词,字符串类型
    @参数 letter:正在猜测的字母,字符串类型
    """
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
    for i in range(len(word)):
        if letter == word[i]:
            cover_word = cover_word[:2*i] + letter + " " + cover_word[2*(i+1):]
    #####################End#####################################
    print(f'当前猜测结果为:{cover_word}')
    return cover_word
def word_guess(word):
    """以随机抽取的秘密单词为参数,参数类型为字符串。
    @参数 word:随机抽取的秘密单词,字符串类型
    先输出一个单词长度的提示信息,产生一个由下划线与空格构成的字符串,每组下划线与空格代表一个字母
    限制用户最多猜测次数为单词长度的2倍
    每次猜测并输入一个字母,调用get_guessed_word()函数对猜测进行处理。
    然后回车换行,并按题目要求进行输出。
    若去除处理后的单词中的空格后得到的单词与传入参数相同,表示已经猜中了秘密单词。
    例如秘密单词为'Tuesday',且用户在6次猜测时猜中了单词中的全部字母,此时输出:
    你太厉害了,居然只用了6次就猜中了单词
    秘密单词是:Tuesday
    '"""
    #####################Begin#####################################
    # 此处去掉注释符号“#”并补充你的代码
    print(f'单词长度为{len(word)}')  # 先提示用户单词长度
    cover_word = '_ ' * len(word)  # 产生一个由下划线与空格构成的字符串,每组下划线与空格代表一个字母
    print(cover_word)
    for i in range(1, 2 * len(word) + 1):  # 最多猜测2倍字母数次
        print(f'当前是第{i}次猜测,你还有{2 * len(word) - i}次机会')
        letter = input('请输入你猜测的字母:')  # 输入猜测的字母
        cover_word = get_guessed_word(cover_word, word, letter)
        guess_word = cover_word.replace(' ', '')
        if guess_word == word:  # 替换字符串中的空格,查看是否猜中
            print(f'你太厉害了,居然只用了{i}次就猜中了单词')
            print(f'秘密单词是:{guess_word}')  # 猜中后输出时去掉单词中的空格
            return guess_word
    else:
        print(f'太遗憾了,你未能在{2 * len(word)}次内猜出单词')
        return cover_word
 
    #####################End#####################################
 
def judge(txt):
    """接收一个字符串为参数,根据参数值调用不同函数完成任务"""
    test_seed = int(input())
    random.seed(test_seed)
    filename = 'data/gone with the wind.txt'  # 文件名
    wordlist = read_file(filename)
    secretword = secret_word(wordlist)
    if txt == '选词':       # 输出抽中的单词
        #####################Begin#####################################
        # 此处去掉注释符号“#”并补充你的代码
        print(secretword)
        #####################End#####################################
    elif txt == '模板':     # 输出猜词模板,形如:_ _ _ _ _ _
        #####################Begin#####################################
        # 此处去掉注释符号“#”并补充你的代码
        print('_ ' * len(secretword))
        #####################End#####################################
    elif txt == '开始填词':
        word_guess(secretword)
    else:
        print('输入错误')
 
 
if __name__ == '__main__':
    text = input()
    judge(text)

如果此文章对你有所帮助,麻烦点个赞,谢谢~~~

点赞加关注,追新不迷路~~~

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
头歌实践教学平台是一个提供在线学习资源的教学平台,其中包括了关于Python入门的课程内容。在Python入门之基础语法这个课程中,我们将学习Python编程语言的基础知识和语法规则。 首先,我们会介绍Python的基本数据类型,如整数、浮点数、字符串等,并学习它们的定义和使用方法。我们还将学习如何进行数学运算,如加减乘除,以及如何使用字符串进行操作,如连接、切片等。 接下来,我们将学习Python的控制流程语句,包括条件语句和循环语句。条件语句让我们可以根据条件的真假来执行不同的代码块,循环语句则可以重复执行一段代码。我们会学习如何使用if语句进行条件判断,以及使用for和while循环进行迭代操作。 在课程中,我们还会介绍Python的函数和模块的概念。函数是一段封装好的代码块,可以重复使用;模块则是一组函数和变量的集合。我们将学习如何定义和调用函数,以及如何导入和使用模块。 此外,课程还包括对Python错误和异常处理的介绍。我们会学习如何处理程序中的错误和异常情况,以及如何抛出和捕获异常。 通过学习Python入门之基础语法这门课程,我们将掌握Python编程语言的基础知识和语法规则,为我们后续的学习和开发打下坚实的基础。我相信,在头歌实践教学平台上学习这门课程一定能够让我们轻松入门Python编程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌新发文啦~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值