python - 案例语句中的用户输入问题
问题描述
我在运行我的案例切换代码时遇到问题这是我第一次运行案例切换。每当我在 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!")
解决方案
您正在选项 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))
推荐阅读
- git - 如何使用 bfg 减小 git 存储库的大小
- javascript - 按键退出按钮状态上的全屏按钮不会更改为关闭
- php - 对 XMLHttpRequest 的 Flutter Web 访问已被 CORS 策略阻止
- javascript - React material-ui textfield decimal step 1.00 on 1.00 作为默认数字
- excel - 根据值将 1 个长 excel 列拆分为多个列
- sql - SQL 将 nvarchar 转换为 int
- qt - 具有自己的子小部件(按钮)和背景图像的 QWidget 不起作用
- cmake - cmake:尽管设置了 CMAKE_REQUIRED_INCLUDES,但 check_include_file 失败
- makefile - 可以在模式规则中使用函数来计算先决条件吗?
- excel - VBA - 期望表达式/高级过滤器,CopyToRange