字母不均匀,TypeError:字符串格式化期间并非所有参数都已转换

时间:2020-08-17 12:37:17

标签: python

def ul(a):
    if a %2 == 0:
        print(a.upper())
    else:
        print(a.lower())

ul(input())

我收到以下错误:

TypeError: not all arguments converted during string formatting

我想用大写字母写每个偶数字母,用小写字母写每个不规则字母

我做错了什么?

4 个答案:

答案 0 :(得分:0)

尝试一下

def ul(a):
    a = a.lower()
    if ord(a) %2 == 0:
        print(a.upper())
    else:
        print(a.lower())

如果您只希望用户输入字母,请尝试

def ul(a):
    if ord(a) >= 110 and ord(a) < 123:
        a = a.lower()
        if ord(a) %2 == 0:
            print(a.upper())
        else:
            print(a.lower())
     else:
         print("Please enter Alphabets only")

答案 1 :(得分:0)

此函数现在要执行的操作是检查输入(字符串)是否可以被2整除。这并不是您真正想做的事情,并且由于字符串不是模可整的,因此会产生错误。

您最好循环遍历输入字符串的索引,以用大写和小写字母填充第二个字符串:

def ul(s):
    outstring = ''
    for i in range(len(s)): ## For each index of the string
        if i%2==0:
            outstring += s[i].upper()  ## Even indices become upper case
        else:
            outstring += s[i].lower()  ## Odd indices become lower case
    print(outstring)


ul(input("Enter a string: "))

答案 2 :(得分:0)

据我所知,您正在尝试获取字符串模式。您应该使用len(a)。

def ul(a):
    if len(a) %2 == 0:
        print(a.upper())
    else:
        print(a.lower())

ul(input())

答案 3 :(得分:0)

输入将给您一个字符串。您想使用模运算符%,这正是您通常发现数字的偶数的方式。因此,您的方向正确! 实际发生的是Python将您的%解释为格式运算符(可能有一个漂亮的名字)。

number = 2
print("Number %d is this" % number)
>>> Number 2 is this

Python中的字符串是不可变的,因此您不能只是轻易地更改字符串。

尝试使用Replacing every 2nd character in a string,在这里您可以通过将所有单个字符加在一起来构造新的字符串。

def ul(word):
    new = []
    for i in range(len(word)):
        if i%2 == 0:
            new += word[i].upper()
    else:
        new += word[i].lower()
    print("".join(new))

这将逐个字符地处理字符串,基于是否均匀来转换单个字符,然后构造一个包含所有单个字符的列表“ new”。最后,只需加入即可,因此从列表中创建一个新字符串。

还有更多使用列表理解的pythonic方法,但这现在更容易阅读和理解。