我有一段用于python挑战的代码,现在它可以很好地工作,但现在作为输出得到的唯一结果是“I”。你知道吗
我不确定,但我假设由于某种原因,我的代码没有存储我给出的ascii\u列表中的所有值。你知道吗
a = """g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."""
def ascii_list(a):
for i in a: return chr(ord(i)+2)
alist = ascii_list(a)
print ("".join(alist))
现在我的问题是,它为什么这样做,我哪里出错了?我使用的是python3.3。你知道吗
(对我放轻松,我已经试着做对了)
那是因为你在第一次循环中就回来了。你真的想要一份清单:
开始迭代字符串,到达字符“g”,然后返回chr(ord('g')+2)。返回“i”并终止循环。你知道吗
问题在于:
第一次通过循环时,您
return
。在第一个值上结束函数和循环。你知道吗您可以将其更改为生成器函数:
凭直觉,这很简单。您可以
yield
任意多次,而不是return
使用一个值。当有人试图循环您的函数的结果,或将其传递给list
或join
这样的函数时,它将得到所有yield
的结果。你知道吗但是,如果这太令人困惑了,而且您还没有准备好学习生成器,您还可以建立一个明确的列表:
…或:
正如乔恩·克莱门茨在评论中指出的那样,这并不是你所要做的事情的正确算法。首先,您需要“翻滚”过字母表的末尾,否则,您将得到
{
而不是a
和|
而不是b
。如果您了解%
(模/余数)运算符,则可以在一个步骤中完成;如果不了解,则可以使用if
/else
。第二,您根本不想翻译空格或.
之类的非字母;为此,您可能需要和if
/else
。详细地写出来:相关问题 更多 >
编程相关推荐