我知道我将此for循环写错了,那么如何正确编写它才能接受多个字母?

时间:2019-04-23 15:59:58

标签: python python-3.x

我正在尝试将文本写入二进制转换器,虽然可以正常工作,但一次只能接受一个字母。我该如何做才能容纳多个字母?非常感谢您的帮助。也是第一次在这里发布,所以请让我知道我做错了什么。

在意识到我可以做一个for循环之前,我为每个字母进行了硬编码,这很痛苦,所以我就做一个循环。

letters = {
  'A' : 65,
  'B' : 66,
  'C' : 67,
  'D' : 68,
  'E' : 69,
  'F' : 70,
  'G' : 71,
  'H' : 72,
  'I' : 73,
  'J' : 74,
  'K' : 75,
  'L' : 76,
  'M' : 77,
  'N' : 78,
  'O' : 79,
  'P' : 80,
  'Q' : 81,
  'R' : 82,
  'S ': 83,
  'T' : 84,
  'U' : 85,
  'V' : 86,
  'W' : 87,
  'X' : 88,
  'Y' : 89,
  'Z' : 90,
}
def converter():
    answer = input('What would you like to convert to binary?')
    for i in range(1):
        print(bin(letters.get(answer)))

while True:
    converter()

3 个答案:

答案 0 :(得分:2)

您不需要字典,可以使用下面的ord函数。

try
{
    LdapDirectoryIdentifier ldi = new LdapDirectoryIdentifier("hostname", 50001);
    System.DirectoryServices.Protocols.LdapConnection ldpcon = new System.DirectoryServices.Protocols.LdapConnection(ldi);

    NetworkCredential networkCredential = new NetworkCredential(username, pass, "domain");

    ldpcon.SessionOptions.SecureSocketLayer = true;

    ldpcon.AuthType = AuthType.Basic;

    if(ldpcon.SessionOptions.HostReachable == true)
    {
        ldpcon.Bind(networkCredential);

        Response.Redirect("~/Default.aspx");
    }
    else
    {
        errorLabel.Text = "Failed binding.";
        errorLabel.Visible = true;
    }

}
catch (System.DirectoryServices.Protocols.LdapException)
{
    errorLabel.Text = "Error authenticating.";
    errorLabel.Visible = true;
}
catch (Exception)
{
    errorLabel.Text = "Error authenticating.";
    errorLabel.Visible = true;
}

例如

def converter():
    answer = input('What would you like to convert to binary?')
    for c in answer:
        print(bin(ord(c)))

答案 1 :(得分:1)

您可以将字符串作为输入,并为字符串中的每个字母输出二进制文件

String username = ((UserDetails)principal).getUsername();
String password = ((UserDetails)principal).getPassword();

答案 2 :(得分:1)

这很简单。您需要在converter()函数的开始处输入另一个输入,该输入指示该输入有多长时间。因此,例如,我们可以添加length = int(input())。然后只需输入字符串即可像您已经进行的那样进行转换。另外,如果您在其中使用一个字符ord(),也可以使二进制打印更加容易,因此根本不需要字母字典。这就是您的新converter()函数:

def converter():
    length = int(input("lenght of the letters"))
    letters = input("what letters do you want to turn in binary?")
    for i in range(length):
        print(bin(ord(letters[i]), ' ')) # ' ' for the spacing between the values

就是这样。我现在将解释解决方案:

首先,我们提示用户将要转换为二进制的字符。 现在,随着长度的增加,我们开始进行for循环。

如果您不知道字母[i]的功能,它将获取字符串的第i个索引。索引只是减少列表,字符串,元组和可能更多数据类型的元素的一种方法。请注意,如果n是字符串/列表/元组的长度,则它们从0开始并以n-1结束。还要注意,它们不能用在字典中->您可以使用dictionary [i],但“ i”不是索引,它是键。好的,现在我们已经覆盖了该内容(如果您还不知道),可以将其返回到代码中。因此,如果range函数只有一个参数,则从0开始。这就是为什么索引起作用的原因。最后是印刷品。 ord()函数获取字符的二进制(这是一个字符串,但在python中的长度为1)。因此,字母[i]获取字符串的第i个元素,该元素只是一个字符,因此ord()函数起作用。您也可以在这里看到替代解决方案(但我不会解释它们,因为我讨厌打字): 解决方案2:

def converter():
    #length = int(input("lenght of the letters"))
    letters = input("what letters do you want to turn in binary?")
    for i in range(len(letters)): # len() gets the lenght of letters
        print(bin(ord(letters[i]), ' ')) # ' ' for the spacing between the values

解决方案3:

def converter():
    #length = int(input("length of the letters"))
    letters = input("what letters do you want to turn in binary?")
    for i in letters:
        print(bin(ord(letters[i]), ' ')) # ' ' for the spacing between the values

是的。再见!