不吃辣的雾都人 发表于 2023-2-20 22:37:37

Python第27节,最后一题!

s = "a1b2c3"
s_list = []
for i in s:
    s_list.append(i)
final = []

for i in range(len(s_list)):
    if i % 2 == 0:
      final.append(s_list)
    if i % 2 != 0:
      if (ord(s_list) + int(s_list)) <= 122:
            s_list = chr(ord(s_list)+int(s_list))
            final.append(s_list)
    if i % 2 != 0:
      if (ord(s_list) + int(s_list)) > 122:
            s_list = chr(ord(s_list)+int(s_list) - 122 + 96)
            final.append(s_list)

print(final)

这是我写的代码?
为什么总是报错,提示如下:
line 15, in <module>
if (ord(s_list) + int(s_list)) > 122:
ValueError: invalid literal for int() with base 10: 'b'

按我设置的条件,字母不会进入后面两个if模块呀?
求各位朋友解答一下!!

ouyunfu 发表于 2023-2-20 22:41:40

在这段代码中,出现了一个错误,即在执行第二个if语句时,当它的上一个字符是字母而不是数字时,将引发ValueError异常。这是因为尝试将字母转换为整数时会引发异常。

这个问题可以通过在第二个if语句之前添加一个检查来解决,以确保上一个字符是数字而不是字母。此外,还需要将条件中的数字122替换为字母'z'的ASCII码值,以确保当相加的值超出字母表范围时,将它们映射回字母表的末尾。

以下是修正后的代码:s = "a1b2c3"
s_list = []
for i in s:
    s_list.append(i)
final = []

for i in range(len(s_list)):
    if i % 2 == 0:
      final.append(s_list)
    if i % 2 != 0:
      if i > 0 and s_list.isdigit() and (ord(s_list) + int(s_list)) <= ord('z'):
            s_list = chr(ord(s_list)+int(s_list))
            final.append(s_list)
      elif i > 0 and s_list.isdigit() and (ord(s_list) + int(s_list)) > ord('z'):
            s_list = chr(ord(s_list)+int(s_list) - ord('z') + ord('a') - 1)
            final.append(s_list)

print(final)


现在,代码应该可以正确运行并输出['a', 'b', 'd', 'c', 'f'].

ExiaGN001 发表于 2023-2-20 22:44:39

本帖最后由 ExiaGN001 于 2023-2-20 22:46 编辑

我自己RTFW了一下,发现确实,
PY里字母转整数会报错。
那么就在第二/第三个if里加一个判定是不是字母的if就行喽

isdkz 发表于 2023-2-20 22:58:21

明面上看是字母不会进入后面的两个 if 语句,其实准确地说是索引为偶数的不会进入后面的两个 if 语句,

但你的索引为 1 的时候进入后面的两个 if 语句中的第一个,然后在这里 s_list 被改成了字母,

然后接着进入了最后一个 if 语句,这字母可不就进入后面的两个 if 语句中的一个了么,

所以你不应该写两个 if i % 2 != 0,而且因为 (ord(s_list) + int(s_list)) <= 122 与 (ord(s_list) + int(s_list)) > 122 是互斥的两个条件,所以用 else 就可以了,

对你的代码修改如下:

s = "a1b2c3"
s_list = []
for i in s:
    s_list.append(i)
final = []

for i in range(len(s_list)):
    if i % 2 == 0:
      final.append(s_list)
    if i % 2 != 0:
      if (ord(s_list) + int(s_list)) <= 122:
            s_list = chr(ord(s_list)+int(s_list))
            final.append(s_list)
      else:
            s_list = chr(ord(s_list)+int(s_list) - 122 + 96)
            final.append(s_list)

print(final)

不吃辣的雾都人 发表于 2023-2-20 22:58:22

ouyunfu 发表于 2023-2-20 22:41
在这段代码中,出现了一个错误,即在执行第二个if语句时,当它的上一个字符是字母而不是数字时,将引发Valu ...

我把你的代码跑了一遍,答案是s_list = ['a', '1', 'b', '2', 'c', '3']
跟原s_list是一样的,我想了一下是这个循环,应该没进入后面两个IF模块
我的想法是利用前面一个字母加上后面的数字之和,再用ord转换成字母
例如:chr(ord('a') + 1) = 'b'
如果按照你修改的判定条件,要满足不是字母才能进入IF模块,所以修改过的程序应该没计算奇数的情况,所以跟原s_list一模一样

不吃辣的雾都人 发表于 2023-2-20 23:15:10

isdkz 发表于 2023-2-20 22:58
明面上看是字母不会进入后面的两个 if 语句,其实准确地说是索引为偶数的不会进入后面的两个 if 语句,

...

谢谢大佬,看来思路没问题,问题出在最基础的分支和循环{:5_96:},回去再复习一下,已经看懂了,谢谢!!
页: [1]
查看完整版本: Python第27节,最后一题!