char = str(input())
char1 = ord(char) + 1
print(chr(char1))
if char == "Z":
print("A")
这是我写的代码当我输入Z时它想出了[A.我不明白这个方括号是从哪里来的你能解释一下为什么会出现这种情况吗?感谢,我能做些什么来修复它吗
问题在于即使char == "Z"
也会执行行print(chr(char1))
,因为它不在else
块中。方括号是因为[
是Z
之后的下一个ASCII字符。修复代码的一种方法是编写以下内容:
char = str(input())
char1 = ord(char) + 1
if char == "Z":
print("A")
else:
print(chr(char1))
添加1后,缺少转换为chr
的功能,可以利用Python中的三元运算符:
char = input() # you don't need to convert to str, input returns a string
print("A" if char == "Z" else chr(ord(char) + 1))
语法:
true_val if condition else false_val
condition
:计算结果为True
或False
的布尔表达式true_val
:如果表达式求值为True
,则要分配的值false_val
:如果表达式求值为False
,则要分配的值
如果您想要一个稍微更优雅、更灵活的解决方案来避免if
条件,您可以预先定义要循环通过的字符范围,并使用模运算符%
,这样您的+1
就可以自动循环通过ASCII范围,而不会落入[
,即Z
之后的字符。
chr_range_start = ord('A') # Set your first character
chr_range_end = ord('Z') # Set your last character
chr_range = chr_range_end - chr_range_start
char = str(input())
char1 = chr_range_start + ((ord(char) + 1 - chr_range_start) % (chr_range + 1))
print(chr(char1))
如果您决定要循环使用小写字母a-z而不是a-z,您可以简单地将前两行中的"a"替换为"a",将"z"替换为"z"。您可以对任意范围的ASCII字符执行此操作。
如果您想将步骤更改为+2个字符,只需更改第一个+1(第二个必须保持原样(:
char1 = chr_range_start + ((ord(char) + 2 - chr_range_start) % (chr_range + 1))
这会给你A
→C
和Z
→CCD_ 22。如果您在if
条件下执行此操作,则必须将其更改为:
if char == 'Y':
char1 = 'A'
elif char == 'Z':
char1 = 'B'
这可能会变得麻烦。使用以上代码,您可以在不更改代码的情况下任意更改范围和步长值。