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模块呀?
求各位朋友解答一下!!
在这段代码中,出现了一个错误,即在执行第二个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:46 编辑
我自己RTFW了一下,发现确实,
PY里字母转整数会报错。
那么就在第二/第三个if里加一个判定是不是字母的if就行喽 明面上看是字母不会进入后面的两个 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) 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一模一样 isdkz 发表于 2023-2-20 22:58
明面上看是字母不会进入后面的两个 if 语句,其实准确地说是索引为偶数的不会进入后面的两个 if 语句,
...
谢谢大佬,看来思路没问题,问题出在最基础的分支和循环{:5_96:},回去再复习一下,已经看懂了,谢谢!!
页:
[1]