Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 此代码中最终显示的问题在哪里?_Python 3.x - Fatal编程技术网

Python 3.x 此代码中最终显示的问题在哪里?

Python 3.x 此代码中最终显示的问题在哪里?,python-3.x,Python 3.x,代码要求用户提供字符串输入,并将大写转换为小写,反之亦然。输入:Rohit Tapadia,预期输出:Rohit Tapadia,实际输出:Rohit Tapadia。它应该像swapcase那样做 inp = input("Enter ") for i in inp: inp_lst.append(i) print(inp_lst) for j in inp_lst: if j.isupper()==True:

代码要求用户提供字符串输入,并将大写转换为小写,反之亦然。输入:Rohit Tapadia,预期输出:Rohit Tapadia,实际输出:Rohit Tapadia。它应该像swapcase那样做

    inp = input("Enter  ")
    for i in inp:
        inp_lst.append(i)
    print(inp_lst)
    for j in inp_lst:
        if j.isupper()==True:
            x=inp_lst.index(j)
            #print(x)
            #print(j)
            k = j.lower()
            #print(k)
            inp_lst[x]=k
            print(inp_lst[x])
        elif j.islower()==True:
            y=inp_lst.index(j)
            #print(y)
            #print(j)
            l = j.upper()
            inp_lst[y]=l
            print(inp_lst[y])
        else:
            z=inp_lst.index(j)
            #print(z)
            #print(j)
            inp_lst[z]=j
            print(inp_lst[z])
        print(''.join(inp_lst))```

使用内置的,您可以在两行中实现完全相同的功能:

输入示例:

heLLo StackOverflow
输出:

HEllO sTACKoVERFLOW
演示:

编辑:这里是一个工作和简化的代码实现。请注意,不需要inp_lst,因为您可以直接迭代字符串中的字符。您可以简单地使用字符串连接将每个字符添加到输出字符串,而不是outputString+=j等同于outputString=outputString+j-它只是在字符串的末尾添加j

inp = input("Enter  ")
outputString = ""
for j in inp:
    if j.isupper():
            outputString += j.lower()
    elif j.islower():
            outputString += j.upper()
    else:
            outputString += j
print(outputString)

编辑2:代码中的问题是inp_lst.indexj,因为索引搜索第一次出现的字符j。因此,如果j='t',它将选择列表中第一个出现的t,并将其大写/小写,即使循环位于第二个出现的t。这就是为什么Rohit Tapadia中的第一个t在输出中变为小写。

您可以通过内置的两行代码实现完全相同的效果:

输入示例:

heLLo StackOverflow
输出:

HEllO sTACKoVERFLOW
演示:

编辑:这里是一个工作和简化的代码实现。请注意,不需要inp_lst,因为您可以直接迭代字符串中的字符。您可以简单地使用字符串连接将每个字符添加到输出字符串,而不是outputString+=j等同于outputString=outputString+j-它只是在字符串的末尾添加j

inp = input("Enter  ")
outputString = ""
for j in inp:
    if j.isupper():
            outputString += j.lower()
    elif j.islower():
            outputString += j.upper()
    else:
            outputString += j
print(outputString)

编辑2:代码中的问题是inp_lst.indexj,因为索引搜索第一次出现的字符j。因此,如果j='t',它将选择列表中第一个出现的t,并将其大写/小写,即使循环位于第二个出现的t。这就是为什么Rohit Tapadia中的第一个t在输出中变为小写。

您也可以试试这个

inp = input("Enter  ")
output="".join([char.lower() if  char.isupper() else char.upper() for char in inp ]) 
inp=Rohit Tapadia

输出将是


rOHIT tAPADIA

你也可以试试这个

inp = input("Enter  ")
output="".join([char.lower() if  char.isupper() else char.upper() for char in inp ]) 
inp=Rohit Tapadia

输出将是


rOHIT tAPADIA

下面的输出是您期望的输出输入abCD['a'、'b'、'C'、'D']0A abCD 1B b b abCD 2C abCD 3D abCD我鼓励OP包括产生不希望的输出的明确输入示例。请包括代码的输出以及所需的输出。@glhr输入:rOHIT tAPADIA,预期输出:rOHIT tAPADIA,实际输出:rOHIT tAPADIA下面的输出是您预期的输出输入abCD['a','b','C','D']0A AbCD 1B b AbCD 2C AbCD 3D AbCD我鼓励OP包含产生不需要的输出的输入的明确示例。请包括代码的输出以及所需的输出。@glhr输入:Rohit Tapadia,预期输出:Rohit Tapadia,实际输出:Rohit TAPADIAYes,但我想自己生成一个函数来实现它。上面是函数内部的代码块。无论如何谢谢你!谢谢@glhr。简单而优雅!:是的,但我想自己生成一个函数来实现它。上面是函数内部的代码块。无论如何谢谢你!谢谢@glhr。简单而优雅!: