首页 > 解决方案 > 案例语句中的用户输入问题

问题描述

我在运行我的案例切换代码时遇到问题这是我第一次运行案例切换。每当我在 python 上运行它时,它只允许用户为 1 选择与 2 和 3 相关的问题,它只是打印要求用户输入的消息。我可能缺少一个非常简单的解决方法。

    userchoice=1
while userchoice!=0:
    userchoice = input("Press 1 or 2 or 3 to run solution for 1 or 2 or 3 or press 0 to exit: ")
    
    if int(userchoice)==1:
               
        # Copy your code for question 1 here
            #Question 1 

        def main():
        #String input
            s=input('Enter Random String of numbers and letters: ')
  
    #Calculating string of numbers
            str1=""
            for i in range(0,len(s)):
                str=s[i]
                if(str.isnumeric()==True):
                    str1+=str
            print("String of Numbers is: ", str1)

    #Calculating longest substring in descending order
            str2=""
            str2+=str1[0]
            max_string=str2
            length=1
            max_length=1
            for i in range(1,len(str1)):
                if str1[i]>str1[i-1]:
                    length+=1
                    str2+=str1[i]
                    if length>max_length:
                        max_length=length
                        max_string=str2
                else:
                    length=1
                    str2=str1[i]

            
            print("Longest substring in numberic descending order is", max_string)
    #Calculating the Average of numbers
            avg=0.0
            for i in range(0, len(max_string)):
                avg+=float(max_string[i])
            avg=avg/max_length
            print("Average: ", round(avg,0))

            if __name__=="__main__":
                main()   
    
    elif int(userchoice)==2:
               #Encryption section:

        text=input("Enter a phrase for encryption (lowercase, no spaces):" ) #instructions that will assist the user to meet the input requirements for the code to work
        dis=int(input("Enter distance value: ")) #dis is the number of spaces the user wishes the letter to be moved for encryption (example if dis is 5 and the phrase is "cat", "cat" will become "hfy")
        code=" "
        
        for ch in text: 
            ordvalue=ord(ch)  #the ordvalue is defined as ord(ch), ord takes the string argument of a single unicode character and returns its point value
            ciphervalue=ordvalue+dis #the ciphervalue takes the point value of the characters in the selected phrase and adds the numberic value inputted by the user to each characters point value 
    
        if ciphervalue>ord('z'): #defines rules for if the ciphervalue is grater then the unit value of 'z'
                x=ciphervalue-ord('z') #uses the constant 'x' defining it as the ciphervalue minus the value of 'z'
                ciphervalue=ord('a')+x-1 #if the value is greater then 'z' then the cipher value is the unit value of 'a' plus what is defined to be 'x'
        code=code+chr(ciphervalue) #uses the 'chr' function to convert the interger collected by the ciphervalue and converts it to the character that occupies that value
        print("Encription is: ", code) #Prints the encrypted values

#Decryption 
        decrypt=input("Enter a phrase for decryption (lowercase, no spaces): ") #instructions that will assist the user to meet the input requirements for the code to work
        dis=int(input("Enter distance value: ")) #number of spaces the user wishes to move the letter to decrypt the code (example, encryption: "hfy", distance:5, decryption= cat )
        code=" "

        for ch in decrypt:
            ordvalue=ord(ch) #similar to decryption
        ciphervalue=ordvalue-dis #instead of adding the users numeric input to the unit value this takes the value inputted by the user
    
        if ciphervalue<ord('a'): #rules for if the ciphervalue results in a value less then the unit value of 'a'
            x=ord('a')-ciphervalue #defines 'x' in a similar way to the encryption
            ciphervalue=ord('z')-x+1 
        code=code+chr(ciphervalue)
        print("decryption is:", code)       
        # Copy your code for question 2 here
        
    
    elif int(userchoice)==3:
        
        #Question 3
        count = 0
        total = 0.0

        filename = input("Enter file name: ")
        x = open(filename) 

        for line in x:
            if not line.startswith("X-DSPAM-Confidence:") : 
                continue 
            t=line.find("0")
            number=float(line[t: ])
            count = count+1
            total = total + number
        average = total/count
        print("Average spam confidence: ", average)
        
    elif int(userchoice)==0:
        print("Thanks!")
        break
    
    else:
        print("Wrong Choice, Please try 1,2,3 or press 0 to exit!")

标签: pythonswitch-statement

解决方案


您正在选项 1 中创建函数 main ,但从不调用该函数。

if __name__ == "__main__"

是您的脚本的入口点,尽管在这种情况下您想要做的是直接调用您的main函数。你可以这样尝试:

 if int(userchoice) == 1:

    # Copy your code for question 1 here
    # Question 1

    def main():
        # String input
        s = input('Enter Random String of numbers and letters: ')

        # Calculating string of numbers
        str1 = ""
        for i in range(0, len(s)):
            str = s[i]
            if (str.isnumeric() == True):
                str1 += str
        print("String of Numbers is: ", str1)

        # Calculating longest substring in descending order
        str2 = ""
        str2 += str1[0]
        max_string = str2
        length = 1
        max_length = 1
        for i in range(1, len(str1)):
            if str1[i] > str1[i - 1]:
                length += 1
                str2 += str1[i]
                if length > max_length:
                    max_length = length
                    max_string = str2
            else:
                length = 1
                str2 = str1[i]

        print("Longest substring in numberic descending order is", max_string)
        # Calculating the Average of numbers
        avg = 0.0
        for i in range(0, len(max_string)):
            avg += float(max_string[i])
        avg = avg / max_length
        print("Average: ", round(avg, 0))

    main()

或者您可以直接将代码放在选项 1 块中的main函数中,如下所示:

    if int(userchoice) == 1:

    # Copy your code for question 1 here
    # Question 1

    # String input
    s = input('Enter Random String of numbers and letters: ')

    # Calculating string of numbers
    str1 = ""
    for i in range(0, len(s)):
        str = s[i]
        if (str.isnumeric() == True):
            str1 += str
    print("String of Numbers is: ", str1)

    # Calculating longest substring in descending order
    str2 = ""
    str2 += str1[0]
    max_string = str2
    length = 1
    max_length = 1
    for i in range(1, len(str1)):
        if str1[i] > str1[i - 1]:
            length += 1
            str2 += str1[i]
            if length > max_length:
                max_length = length
                max_string = str2
        else:
            length = 1
            str2 = str1[i]

    print("Longest substring in numberic descending order is", max_string)
    # Calculating the Average of numbers
    avg = 0.0
    for i in range(0, len(max_string)):
        avg += float(max_string[i])
    avg = avg / max_length
    print("Average: ", round(avg, 0))

推荐阅读