鱼C论坛

 找回密码
 立即注册
查看: 1298|回复: 2

[已解决]输出的结果总是会漏掉最后的两位

[复制链接]
发表于 2023-11-4 20:34:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本意是将输入的字符串中的数字转换成前一位英文字符的后n位英文,如果超过z就重新从a开始排.就比如输入"a1b2",转换后就应该输出"abbd",输入"z1"就输出"za"
但当我输入字符串如,"a1b2c3"时输出的结果只有"abbd","c3"不见了,将数组num打印出来也只有"abbdc"这是为什么?
s = input("请按规则输入一个字符串(下标为偶数输入小写英文字符,奇数则输入数字):")
num = []
for i in range(len(s)-1):
    if i % 2 == 0:
       num.append(s[i])
    if i % 2 != 0:
        if int(ord(s[i-1]))+int(s[i]) <= 122:
            num.append(chr(int(ord(s[i-1]))+int(s[i])))
        if int(ord(s[i-1]))+int(s[i]) > 122:
            num.append(chr(int(ord(s[i-1])+int(s[i]))-26))
for j in range(len(num)-1):
    print(num[j],end = "")
最佳答案
2023-11-4 20:35:33
问题出在第一个for循环中的范围选择上,应该将范围改为 range(len(s)) ,而不是 range(len(s)-1) 。因为 len(s)-1 的范围会导致最后一个字符被漏掉。修改后的代码如下:
s = input("请按规则输入一个字符串(下标为偶数输入小写英文字符,奇数则输入数字):")
num = []
for i in range(len(s)):
    if i % 2 == 0:
        num.append(s[ i])
    if i % 2 != 0:
        if int(ord(s[i-1]))+int(s[ i]) <= 122:
            num.append(chr(int(ord(s[i-1]))+int(s[ i])))
        if int(ord(s[i-1]))+int(s[ i]) > 122:
            num.append(chr(int(ord(s[i-1])+int(s[ i]))-26))
for j in range(len(num)):
    print(num[j], end="")

这样修改后,输入字符串"a1b2c3"的输出结果就会包含"c3"了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-4 20:35:11 | 显示全部楼层
你的代码在处理奇数位数字转换成后n位英文字符时存在一个问题,即在计算 ASCII 值时没有正确处理超过字母 'z' 的情况。

在判断奇数位置时,你可以使用以下方法来处理超过字母 'z' 的情况:
1. 首先,计算前一位英文字符的 ASCII 值,需要将其转换为整数,再加上当前数字。
2. 检查计算出的值是否超过了字母 'z' 的 ASCII 值(即 122)。
3. 如果超过了,需要将其减去 26,使其回到字母 'a' 对应的 ASCII 值(即 97)开始循环。

下面是修改后的代码:
s = input("请按规则输入一个字符串(下标为偶数输入小写英文字母,奇数输入数字):")num = []for i in range(len(s) - 1):    if i % 2 == 0:        num.append(s[i])    else:        prev_char_ascii = ord(s[i - 1])        current_num = int(s[i])        new_char_ascii = prev_char_ascii + current_num        if new_char_ascii > 122:            new_char_ascii -= 26        num.append(chr(new_char_ascii))for j in range(len(num)):    print(num[j], end="")
这样修改后的代码会正确处理超过字母 'z' 的情况,并输出转换后的结果。例如,对于输入 "a1b2c3",输出将包括 "abbd" 和 "c3"。

希望这次的回答能解决你的问题。如果还有其他疑问,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-4 20:35:33 | 显示全部楼层    本楼为最佳答案   
问题出在第一个for循环中的范围选择上,应该将范围改为 range(len(s)) ,而不是 range(len(s)-1) 。因为 len(s)-1 的范围会导致最后一个字符被漏掉。修改后的代码如下:
s = input("请按规则输入一个字符串(下标为偶数输入小写英文字符,奇数则输入数字):")
num = []
for i in range(len(s)):
    if i % 2 == 0:
        num.append(s[ i])
    if i % 2 != 0:
        if int(ord(s[i-1]))+int(s[ i]) <= 122:
            num.append(chr(int(ord(s[i-1]))+int(s[ i])))
        if int(ord(s[i-1]))+int(s[ i]) > 122:
            num.append(chr(int(ord(s[i-1])+int(s[ i]))-26))
for j in range(len(num)):
    print(num[j], end="")

这样修改后,输入字符串"a1b2c3"的输出结果就会包含"c3"了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 13:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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