案例陈述中的用户输入问题



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

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!")

您正在选项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))

您可以使用以下函数定义模拟switch语句:

def switch(v): yield lambda *c: v in c

您可以在C样式中使用它:

for case in switch(int(userchoice)):
if case(1):
# ... you code for userchoice 1
break
if case(2):
# ... you code for userchoice 2
break
if case(3):
# ... you code for userchoice 3
break
if case(0):
# ... you code for userchoice 0
break
else:
# ... your code for bad userchoice

您也可以使用if/elif/else模式而不中断:

for case in switch(int(userchoice)):
if case(1):
# ... you code for userchoice 1
elif case(2):
# ... you code for userchoice 2
elif case(3):
# ... you code for userchoice 3
elif case(0):
# ... you code for userchoice 0
else:
# ... your code for bad userchoice

最新更新