开发者

Python - display different output if the input is a letter or a number

I want to print the result of the equation in my if statement if the input is a digit and print "any thing" if it is a letter.

I tried this code, but it's not working well. What is wrong here?

while 1:
    print '\tConvert ciliuse to fehrenhit\n'
    temp = input('\nEnter the temp in C \n\t')
 开发者_高级运维   f = ((9/5)*temp +32)
    if temp.isdigit():
        print f
    elif temp == "quit" or temp == "q" :
        break
    elif temp.isalpha() :
        print ' hhhhhhh '


You need to go through your code line by line and think about what type you expect each value to be. Python does not automatically convert between, for example, strings and integers, like some languages do, so it's important to keep types in mind.

Let's start with this line:

temp = input('\nEnter the temp in C \n\t')

If you look at the documentation for input(), input() actually calls eval() on what you type in in Python 2.x (which it looks like you're using). That means that it treats what you type in there as code to be evaluated, just the same as if you were typing it in the shell. So if you type 123, it will return an int; if you type 'abc', it will return a str; and if you type abc (and you haven't defined a variable abc), it will give you an error.

If you want to get what the user types in as a string, you should use raw_input() instead.

In the next line:

f = ((9/5)*temp +32)

it looks like you're expecting temp to be a number. But this doesn't make sense. This line gets executed no matter what temp is, and you're expecting both strings containing digits and strings containing letters as input. This line shouldn't go here.

Continuing on:

if temp.isdigit():

isdigit() is a string method, so here you're expecting temp to be a string. This is actually what it should be.

This branch of the if statement is where your equation should go, but for it to work, you will first have to convert temp to an integer, like this:

c = int(temp)

Also, to get your calculation to work out right, you should make the fraction you're multiplying by a floating-point number:

f = ((9/5.0)*c +32)

The rest of your code should be okay if you make the changes above.


A couple of things first - always use raw_input for user input instead of input. input will evaluate code, which is potentially dangerous.

while 1:
    print "\tConvert ciliuse to fehrenhit\n"
    temp = raw_input("\nEnter the temp in C \n\t")

    if temp in ("quit", "q"):
        break

    try:
        f = ((9.0 / 5.0) * float(temp) + 32)
    except ValueError:
        print "anything"

Instead of using isalpha to check if input is invalid, use a catch clause for ValueError, which is thrown when a non-numerical value is used.


Why isn't it working? Are you getting an error of any kind?

Straight away I can see one problem though. You are doing the calculation before you verify it as a number. Move the calculation to inside the if temp.isdigit().


Take a look at this for some examples:

http://wiki.python.org/moin/Powerful%20Python%20One-Liners

OK, this works. Only problem is when you quit, you get dumped out of the interpreter.

while 1: import sys; temp=raw_input('\nEnter the temp in C \n\t'); temp.isdigit() and sys.stdout.write('%lf' %((9./5)*float(temp)+32)) or temp=='q' and sys.exit(0) or sys.stdout.write(temp)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜