Python 不是加拿大的国家

Python 不是加拿大的国家,python,if-statement,Python,If Statement,下面是我用python编写的代码。如果该国不是加拿大,我该怎么做?然后让它打印不含税的总价?现在,如果我把美国放进去,它会给我一个合适的价格,但它也会给我其他省份的价格 country = raw_input('What country are you from? ').lower() if country == 'canada': total_price = int(raw_input('What was your total price? ')) province = raw

下面是我用python编写的代码。如果该国不是加拿大,我该怎么做?然后让它打印不含税的总价?现在,如果我把美国放进去,它会给我一个合适的价格,但它也会给我其他省份的价格

country = raw_input('What country are you from? ').lower()
if country == 'canada':
    total_price = int(raw_input('What was your total price? '))
    province = raw_input('What province are you from? ').lower()
elif country != 'canada':
    total_price = int(raw_input('What was your total price? '))
if province == 'alberta':
    total_alberta = (total_price * .00005) + total_price
    print 'Your total price is ' + str(total_alberta)
if province == 'ontario' or province == 'new brunswick'\
or province == 'nova scotia':
    total_onn = (total_price * .0013) + total_price
    print 'Your total price is ' + str(total_onn)
if country == 'canada' and province != 'ontario' and province != 'new brunswick' and province != 'nova scotia' and province != 'alberta':
    total_else = ((total_price * .0006) + (total_price * .0005)) \
    + total_price
    print 'Your total price is ' + str(total_else)
else:
    print 'Your total price is ' + str(total_price)

如果出现以下情况,请将代码放在第一位:

country = raw_input('What country are you from? ').lower()
if country == 'canada':
    total_price = int(raw_input('What was your total price? '))
    province = raw_input('What province are you from? ').lower()
    if province == 'alberta':
        total_alberta = (total_price * .00005) + total_price
        print 'Your total price is ' + str(total_alberta)
    elif province == 'ontario' or province == 'new brunswick'\
    or province == 'nova scotia':
        total_onn = (total_price * .0013) + total_price
        print 'Your total price is ' + str(total_onn)
    else:
        total_else = ((total_price * .0006) + (total_price * .0005)) \
        + total_price
        print 'Your total price is ' + str(total_else)
else:
    total_price = int(raw_input('What was your total price? '))
    print 'Your total price is ' + str(total_price)

将省逻辑嵌套到if country==canada中

您的布尔逻辑在许多情况下也是多余的,可以像我上面所做的那样进行修剪

将您的if省状态放入if加拿大,然后放入如果国家不是加拿大,它将跳出整个if状态

if country =='canada':
    if province =='ontario':
    .....
else //the not canada statment

干净的pythonic版本-您的逻辑和ifs嵌套不好:

base_canada_tax = 0.13
provinces = {'alberta': 0.05, 'ontario': base_canada_tax, 'new brunswick': base_canada_tax, 'nova scotia': base_canada_tax}

country = raw_input('What country are you from? ').lower()
total_price = int(raw_input('What was your total price? '))
if country == 'canada':
    province_in = raw_input('What province are you from? ').lower()
    total_price *=  1 + provinces.get(province_in, base_canada_tax)
print 'Your total price is {0}'.format(total_price)

这是基于@Incognos的答案,并更正了逻辑和数字:

provinces = {'alberta': 1.05, 'ontario': 1.13,
             'new brunswick': 1.13, 'nova scotia': 1.13} # excess alberta removed
base_canada_tax = 1.113 # 6% and 5% together as per question's (corrected) code
country = raw_input('What country are you from? ').lower()
total_price = float(raw_input('What was your total price? ')) # float
if country == 'canada':
    province = raw_input('What province are you from? ').lower()
    total_price *= provinces.get(province, base_canada_tax)
print 'Your total price is', total_price

仅供参考,如果a在‘a’、‘b’、‘c’中,那么说a比说a=='a'或a=='b'或a=='c'等更容易。你确定这就是你遇到的问题吗?如果你进入一个“美国”的国家,它应该在到达If省后立即崩溃。。。因为省没有定义。如果你稍微重构一下你的代码会更好。现在有点乱。您可以将一些省份分组,检查该集合中每个原始输入的成员资格,然后做出相应的决定。此外,还应定义一组所有省份,以防有人随意放置某些内容。然后,如果您需要将其扩展到其他国家,则每个集合都可以是字典的一项,其键是国家字符串。谢谢您的反馈。我是新手,所以我还在学习。这绝对有助于你永远无法进入内心世界,因为伊里夫省阿尔伯塔省总是成功的。如果第一个省=='alberta'抓住了thatHa!是的,我刚刚看到了。很抱歉谢谢你的接球!又短又好。非常感谢。IMHO这是最好的,因为您将所有ifs替换为[province in[0]中的tableif province in[province in province]:total_price*=province[province]-否则:total_price*=1.0013会检查字符“a”、“o”、“n”、“n”和“a”,所以我认为它不会起作用。您可以用total_price*=provinces.getprovinces,1.0013替换这四行。此外,我怀疑0.13%是正确的税率。你也有两次阿尔伯塔省,有不同的价值。更好,但税收价值仍然很小,例如,在阿尔伯塔省花费的每一美元的1/200便士。LOL-我希望我们可以通过编程确定税收价值,但这些都是不符合逻辑的。。。这些在代码段中很容易修改,任何其他方式都需要更多的工作:-顺便说一句,Python用于注释,而不是//。我更熟悉php和java,甚至有一段时间没有看到Python代码了。好的,这也很有意义。第一个如果是加拿大,那么其他任何国家。。。谢谢
provinces = {'alberta': 1.05, 'ontario': 1.13,
             'new brunswick': 1.13, 'nova scotia': 1.13} # excess alberta removed
base_canada_tax = 1.113 # 6% and 5% together as per question's (corrected) code
country = raw_input('What country are you from? ').lower()
total_price = float(raw_input('What was your total price? ')) # float
if country == 'canada':
    province = raw_input('What province are you from? ').lower()
    total_price *= provinces.get(province, base_canada_tax)
print 'Your total price is', total_price