我正在研究一些示例,在这些示例中,我必须将“ for”循环转换为“ while”循环,而这让我感到困惑。对我来说,问题是“ for”循环经过精心设计,可以迭代字符串中的每个字符,然后可以将该字符轻松转换为“ ord”以获取其ASCII码。但是,当我尝试检索此“ ord”部分时,将其转换为“ while”循环会给我一些问题。我已经尝试过使用split()并尝试使用索引查找每个字母,但是到目前为止,它还无法正常工作。
请注意,代码本身只是垃圾代码,不会产生任何有用的信息-纯粹是为了练习“ while”循环。谢谢!
提供的问题将转换为“ while”循环:
def convert(string):
"""take string and return an int that is the unicode version"""
num = 0
for char in string:
if ord(char) > 20:
num = ord(char) - 10
else:
num = ord(char) * 2
return num
print(convert('Test this string'))
我尝试使用“ while”循环版本:
def convert(string):
"""take string and return an int that is the unicode version"""
char_value = string.split()
num = 0
char_index = 0
while char_index < len(string):
if ord(char_value[char_index]) > 20:
num = char_value - 10
else:
num = char_value * 2
char_index += 1
return num
print(convert('Test this string'))
编辑:以下是根据NPE的建议改编的有效解决方案(以防万一初学者希望看到完整的解决方案):
def convert(string):
"""take string and return an int that is the unicode version"""
num = 0
char_index = 0
while char_index < len(string):
char = string[char_index]
if ord(char) > 20:
num = ord(char) - 10
else:
num = ord(char) * 2
char_index += 1
return num
print(convert('Test this string'))
答案 0 :(得分:2)
您不需要使用split
。您可以直接使用字符索引来索引字符串。
将for
重写为while
的简单方法如下所示:
char_index = 0
while char_index < len(string):
char = string[char_index]
...
char_index += 1
(...
部分可以与for
循环的主体完全一样。)
答案 1 :(得分:1)
我会提出一种更优雅,甚至更等效的方式来编写该循环:
def convert(string):
"""take string and return an int that is for sure not any kind of Unicode version, whatever that's supposed to be"""
it = iter(string)
while True:
char = next(it, None)
if char is None:
break
if ord(char) > 20:
num = ord(char) - 10
else:
num = ord(char) * 2
return num
print(convert('Test this string'))
您可能会问,为什么迭代器方法更优雅。一些简单的原因: