创建一个名为shift
的函数从用户获取值 阅读文件中的单词列表
按值将每个单词中的每个字母向右移动 这是我的问题的答案!自从我上次检查它以来已经很久了,但我的意思是,当我看到我的问题时,我笑了!我觉得更好!至少我越来越好了:p 这是为了帮助未来可能会问的人,但是你在这里仍然要去
•def shift(): value=eval(input("Please enter the value here.")) file = open("Passwords.txt","w") with open ("word-text.txt","r") as m: for line in m: line=line.strip() print (line) newString = "" for char in line: char_int=ord(char) t=char_int+value if t==124: t = t-27 charme= chr(t) print (char,">>",charme) newString += charme file.writelines(line+" "+newString+"\n")
答案 0 :(得分:2)
你不必转换为ascii,你可以只使用maketrans函数
def shift_string(text, shift):
intab='abcdefghijklmnopqrstuvwxyz'
outab=intab[shift:]+intab[:shift]
return maketrans(intab, outab)
答案 1 :(得分:1)
繁重的工作正在进行转换,所以我已经做到了 - 你可以做其余的事情,因为它非常微不足道。 :)
这可以通过将每个字符转换为数字表示并校正循环性能(即Z
移位2
将输出B
)。
def limits_correction(character, distance, start, end):
char = character
if char >= start and char < end:
if char + distance >= end:
char = char + distance - 26
else:
char = char + distance
return char
def modify_string(string, distance):
ords = [ord(c) for c in string]
corrected_distance = 0
if distance > 26:
corrected_distance = distance % 26
elif distance > 0 and distance <= 26:
corrected_distance = distance
lower_start = 97
lower_end = lower_start + 26
upper_start = 65
upper_end = upper_start + 26
shifted_string = []
for char in ords:
if char >= lower_start and char < lower_end:
char = limits_correction(char, corrected_distance, lower_start, lower_end)
elif char >= upper_start and char < upper_end:
char = limits_correction(char, corrected_distance, upper_start, upper_end)
shifted_string.append(chr(char))
return ''.join(shifted_string)
这也适用于任何整数移位数的大写和小写(从0到非常大)。
参考:
答案 2 :(得分:1)
你需要自己完成作业(或者学习编程没有意义),如果你不理解这个问题,你应该向老师要求澄清。
那就是说,原则上转变很简单。你可以手工完成。如果你有一个字母,比如说A,把它换成1(键= 1)会把它变成B.在作业中你移动2个位置,所以A会变成C,B(在原始单词中)会变成D等等。你必须要小心字母表的结尾。当移位1时,Z变为A.当移位2时,Y变为A而Z变为B.
所以在你的例子中,HELLO变成了JGNNQ,因为当转移2个位置时:
H =&gt; Ĵ
E =&gt; ģ
L =&gt; Ñ
O =&gt; Q
(注意:我使用大写字母表示可读性,但你的作业似乎是关于小写字符。我假设你只被要求处理小写字母。)
你是怎么做到的?查看您获得的链接。基本上ord()将一个字符转换为一个整数,chr()将一个这样的整数转换为一个字符。它基于字符在计算机中表示为数字的方式。因此,对于给定的字符,如果将其转换为ord(),则可以添加键以移动它,然后将其转换回带有chr()的字符。
对于从Y和Z到A和B的包装,你可以使用模数运算符(%),但要小心,它有点繁琐(你需要计算你的角色和ord之间的差异) 'a',应用%26(它给出0到25之间的数字),然后将其添加到ord('a)以获得正确的ord)。如果它过于复杂,只需使用几个IF即可。
我建议从一个小程序开始,该程序从用户获取输入并打印输出以检查它是否正常工作。您不需要输入并在最终版本中打印,但它可以帮助您测试您的移位代码是否正常工作。
然后你有关于从文件读取和写入文件的部分。您的作业不会要求用户输入,而是从文件中读取。您的行with open ("word-text.txt","r") as f:
看起来很好,这应该为您提供读取数据所需的文件句柄。您可以使用f.read()读取数据并将其分配给变量。我不确定你曾经教过什么,但是我把这个字符串分成了<string>.split()
的单词,它创建了一个字符串列表(你的单词)。
然后对于每个单词,使用您之前编写的代码来移动字符串,您只需将原始单词和移位的单词写入输出文件即可。最简单的可能是从打开输出文件开始(在写入模式下),并通过循环列表一次完成移位和写入。