2017-05-26 99 views
-2

这是我的program的代码片段,其中当输入要求的值时,增加该变量的值,并在按下键q后退出循环来打印结果。请注意,我的代码通过从用户sys导入argv的参数(这就是为什么我的名字在命令行中)。compare int with char

prompt = "# " 
come_out = True 
one = 0 
two = 0 
three = 0 
four = 0 
answer = 0 

while (come_out == True): 
    print """ 
    Enter q to exit() 
    > Do you like Got? 
    > What about LoTR? 
    > Okay, Fargo? 
    > Alright, last choice: American Gods? 
    """ 
answer = raw_input(prompt) 
if answer == 1: 
    one = one + 1 
elif answer == 2: 
    two = two + 1 
elif answer == 3: 
    three = three + 1 
elif answer == 4: 
    four = four + 1 
elif answer == ord('q'): 
    come_out = False  
else: 
    print "Not applicable ~~~ exiting" 
    come_out = False 

当我被命令执行脚本:

$ python ex14.py Sambhav-Jain

它不给任何错误,但作为假设不工作,因为它必须通过的循环,直至跑一路用户明确按下键q退出,但:

Hi, Sambhav-Jain. Welcome to your ex14.py script. 

Enter q to exit() 
> Do you like Got? 
> What about LoTR? 
> Okay, Fargo? 
> Alright, last choice: American Gods? 

# 1 
Not applicable ~~~ exiting 

GoT Lovers: 0 
LoTR Lovers: 0 
Fargo Lovers: 0 
American God Lovers: 0 

然后我在网上搜索,发现了一种显式转换answer变量int即:

answer = int(raw_input(prompt)) 

通过这样做,并执行我用以前的版本相同的命令,它会产生一个错误:

Hi, Sambhav-Jain. Welcome to your ex14.py script. 

Enter q to exit() 
> Do you like Got? 
> What about LoTR? 
> Okay, Fargo? 
> Alright, last choice: American Gods? 

# 1 

Enter q to exit() 
> Do you like Got? 
> What about LoTR? 
> Okay, Fargo? 
> Alright, last choice: American Gods? 

# q 
Traceback (most recent call last): 
File "ex14.py", line 26, in <module> 
    answer = int(raw_input(prompt)) 
ValueError: invalid literal for int() with base 10: 'q' 

PS:请不要将此标记为重复。

+0

你可以做的快速改变是要求-1而不是q。这样,所有输入类型都是相同的。 – Antimony

+1

请遵循以下指导原则:https://stackoverflow.com/help/mcve – klutt

回答

1

raw_input()返回一个字符串。

因此,您需要将其转换或仅与字符串进行比较。

如果你改变你的攀比:

if answer == '1': 
    one = one + 1 
elif answer == '2': 
    two = two + 1 
elif answer == '3': 
    three = three + 1 
elif answer == '4': 
    four = four + 1 
elif answer == 'q': 
    come_out = False  

,你希望它会工作。