鱼C论坛

 找回密码
 立即注册
查看: 84|回复: 3

[已解决]第三十讲字符串第0题动动手的问题

[复制链接]
发表于 2024-12-12 20:57:17 | 显示全部楼层 |阅读模式

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

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

x
text = input("请输入需要加密的明文(只支持英文字母):")
remove_num = int(input("请输入移动的位数:"))
result = ""
for i in range(len(text)):
    if text[i] == " ":
        result += text[i]
    else:
        if text[i].isupper() == True:
            if ord(text[i])+remove_num < 65:
                result += chr(ord(text[i])+remove_num+26)
            if ord(text[i])+remove_num > 90:
                result += chr(ord(text[i])+remove_num-26)
            else:
                result += chr(ord(text[i])+remove_num)
        if text[i].islower() == True:
            if ord(text[i])+remove_num < 97:
                result += chr(ord(text[i])+remove_num+26)
            if ord(text[i])+remove_num > 122:
                result += chr(ord(text[i])+remove_num-26)
            else:
                result += chr(ord(text[i])+remove_num)
print(result)

当remove_num小于0的时候有时候会搞错是为什么
最佳答案
2024-12-12 20:57:30
你的代码存在一些逻辑问题,特别是在检查和移动字母时。以下是一些问题和修复建议:

1. **检查空格:**
   你在循环中的 `if text == " ":` 语句会检查整个字符串是否为空格,这是不正确的。你应该针对字符串中的每个字符检查是否为空格。

2. **检查大小写和字母移动:**
   `text.isupper()` 和 `text.islower()` 应该在每个字母上单独检查,而不是在整个字符串上检查。

3. **计算字母的新位置:**
   当 `remove_num` 是负数时,你应该使用 `%` 运算确保移位在字母表范围内。

下面是修改后的代码:
text = input("请输入需要加密的明文(只支持英文字母):")
remove_num = int(input("请输入移动的位数:"))
result = ""
for char in text:
    if char == " ":
        result += char  # 保留空格
    elif char.isupper():
        # 移动位置,并确保在字母范围内
        result += chr((ord(char) - 65 + remove_num) % 26 + 65)
    elif char.islower():
        # 移动位置,并确保在字母范围内
        result += chr((ord(char) - 97 + remove_num) % 26 + 97)
print(result)

**解释:**

- `ord(char) - 65 + remove_num`:将字母映射到0-25范围。
- `% 26`:确保移位后的值仍然在0-25范围内(对应字母表范围)。
- `+ 65`或`+ 97`:将0-25的值转换回字母的ASCII值。

这样处理后,无论 `remove_num` 是正数还是负数,都会正确地加密字符串。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-12-12 20:57:30 | 显示全部楼层    本楼为最佳答案   
你的代码存在一些逻辑问题,特别是在检查和移动字母时。以下是一些问题和修复建议:

1. **检查空格:**
   你在循环中的 `if text == " ":` 语句会检查整个字符串是否为空格,这是不正确的。你应该针对字符串中的每个字符检查是否为空格。

2. **检查大小写和字母移动:**
   `text.isupper()` 和 `text.islower()` 应该在每个字母上单独检查,而不是在整个字符串上检查。

3. **计算字母的新位置:**
   当 `remove_num` 是负数时,你应该使用 `%` 运算确保移位在字母表范围内。

下面是修改后的代码:
text = input("请输入需要加密的明文(只支持英文字母):")
remove_num = int(input("请输入移动的位数:"))
result = ""
for char in text:
    if char == " ":
        result += char  # 保留空格
    elif char.isupper():
        # 移动位置,并确保在字母范围内
        result += chr((ord(char) - 65 + remove_num) % 26 + 65)
    elif char.islower():
        # 移动位置,并确保在字母范围内
        result += chr((ord(char) - 97 + remove_num) % 26 + 97)
print(result)

**解释:**

- `ord(char) - 65 + remove_num`:将字母映射到0-25范围。
- `% 26`:确保移位后的值仍然在0-25范围内(对应字母表范围)。
- `+ 65`或`+ 97`:将0-25的值转换回字母的ASCII值。

这样处理后,无论 `remove_num` 是正数还是负数,都会正确地加密字符串。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-12-12 22:15:31 | 显示全部楼层
本帖最后由 jackz007 于 2024-12-12 22:32 编辑

         是不是搞得有点太复杂?
def crypt(c , k) :
    d = [[chr(i) for i in range(ord('A') , ord('Z') + 1)] , [chr(i) for i in range(ord('a') , ord('z') + 1)]]
    while k < 0 : k += 26
    if c in d[0] + d[1] :
        e = d[0] if c in d[0] else d[1]
        c = e[(e . index(c) + k) % 26]
    return c

text = input("请输入需要加密的明文(只支持英文字母):")
remove_num = int(input("请输入移动的位数:"))
s1 = '' . join([crypt(x , remove_num) for x in text])
s2 = '' . join([crypt(x , -remove_num) for x in s1])
print('输入 : %s' % text)
print('密文 : %s' % s1)
print('明文 : %s' % s2)
        运行实况:
D:\[exercise]\Python>python x.py
请输入需要加密的明文(只支持英文字母):Hello , World !
请输入移动的位数:-25
输入 : Hello , World !
密文 : Ifmmp , Xpsme !
明文 : Hello , World !

D:\[exercise]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
印象中不用区别大小写就可以移位操作的,不知哪位大神可以解答。
text = input("请输入需要加密的明文(只支持英文字母):")
remove_num = int(input("请输入移动的位数:"))
result = ""
for char in text:
    if char == " ":
        result += char  # 保留空格
    else:
       result+= char +________________________
print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 04:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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