繁体   English   中英

output 与 output 不同。 我究竟做错了什么?

[英]The output is different from the output. What am I doing wrong?

我是 python 编程的新手。 这是我第一次期末考试的作业。 如果用户将其设施输入为“1”,则用户输入为“是”。 系统应相应地显示价格。 这是我的代码,但是,当我的输入是“2”和“yes”或任何带有“yes”的数字时,它总是显示 output for facility == 4。我不知道我在这里做错了什么。 在这个巨大的代码中很难找到错误。 反正有没有缩短这个。 如果是,请帮帮我。

if facility == 1 and user == "Yes" or user == "YES" or user == "yes":
    if day == "Monday" or day == "MONDAY" or day == "monday":
        price = 100
    elif day == "Tuesday" or day == "TUESDAY" or day == "tuesday":
        price = 100
    elif day == "Wednesday" or day == "WEDNESDAY" or day == "wednesday":
        price = 100
    elif day == "Thursday" or day == "THURSDAY" or day == "thursday":
        price = 100
    elif day == "Friday" or day == "FRIDAY" or day == "friday":
        price = 100
    elif day == " Saturday" or day == "SATURDAY" or day == "saturday":
        price = 150
    elif day == "Sunday" or day == "SUNDAY" or day == "sunday":
        price = 150

if facility == 2 and user == "Yes" or user == "YES" or user == "yes":
    if day == "Monday" or day == "MONDAY" or day == "monday":
        price = 100
    elif day == "Tuesday" or day == "TUESDAY" or day == "tuesday":
        price = 100
    elif day == "Wednesday" or day == "WEDNESDAY" or day == "wednesday":
        price = 100
    elif day == "Thursday" or day == "THURSDAY" or day == "thursday":
        price = 100
    elif day == "Friday" or day == "FRIDAY" or day == "friday":
        price = 100
    elif day == " Saturday" or day == "SATURDAY" or day == "saturday":
        price = 150
    elif day == "Sunday" or day == "SUNDAY" or day == "sunday":
        price = 150

if facility == 3 and user == "Yes" or user == "YES" or user == "yes":
    if day == "Monday" or day == "MONDAY" or day == "monday":
        price = 200
    elif day == "Tuesday" or day == "TUESDAY" or day == "tuesday":
        price = 200
    elif day == "Wednesday" or day == "WEDNESDAY" or day == "wednesday":
        price = 200
    elif day == "Thursday" or day == "THURSDAY" or day == "thursday":
        price = 200
    elif day == "Friday" or day == "FRIDAY" or day == "friday":
        price = 200
    elif day == " Saturday" or day == "SATURDAY" or day == "saturday":
        price = 250
    elif day == "Sunday" or day == "SUNDAY" or day == "sunday":
        price = 250

if facility == 4 and user == "Yes" or user == "YES" or user == "yes":
    if day == "Monday" or day == "MONDAY" or day == "monday":
        price = 30
    elif day == "Tuesday" or day == "TUESDAY" or day == "tuesday":
        price = 30
    elif day == "Wednesday" or day == "WEDNESDAY" or day == "wednesday":
        price = 30
    elif day == "Thursday" or day == "THURSDAY" or day == "thursday":
        price = 30
    elif day == "Friday" or day == "FRIDAY" or day == "friday":
        price = 30
    elif day == " Saturday" or day == "SATURDAY" or day == "saturday":
        price = 60
    elif day == "Sunday" or day == "SUNDAY" or day == "sunday":
        price = 60

if facility == 1 and user == "No" or user == "NO" or user == "no":
    if day == "Monday" or day == "MONDAY" or day == "monday":
        price = 150
    elif day == "Tuesday" or day == "TUESDAY" or day == "tuesday":
        price = 150
    elif day == "Wednesday" or day == "WEDNESDAY" or day == "wednesday":
        price = 150
    elif day == "Thursday" or day == "THURSDAY" or day == "thursday":
        price = 150
    elif day == "Friday" or day == "FRIDAY" or day == "friday":
        price = 150
    elif day == " Saturday" or day == "SATURDAY" or day == "saturday":
        price = 200
    elif day == "Sunday" or day == "SUNDAY" or day == "sunday":
        price = 200

if facility == 2 and user == "No" or user == "NO" or user == "no":
    if day == "Monday" or day == "MONDAY" or day == "monday":
        price = 150
    elif day == "Tuesday" or day == "TUESDAY" or day == "tuesday":
        price = 150
    elif day == "Wednesday" or day == "WEDNESDAY" or day == "wednesday":
        price = 150
    elif day == "Thursday" or day == "THURSDAY" or day == "thursday":
        price = 150
    elif day == "Friday" or day == "FRIDAY" or day == "friday":
        price = 150
    elif day == " Saturday" or day == "SATURDAY" or day == "saturday":
        price = 200
    elif day == "Sunday" or day == "SUNDAY" or day == "sunday":
        price = 200

if facility == 3 and user == "No" or user == "NO" or user == "no":
    if day == "Monday" or day == "MONDAY" or day == "monday":
        price = 250
    elif day == "Tuesday" or day == "TUESDAY" or day == "tuesday":
        price = 250
    elif day == "Wednesday" or day == "WEDNESDAY" or day == "wednesday":
        price = 250
    elif day == "Thursday" or day == "THURSDAY" or day == "thursday":
        price = 250
    elif day == "Friday" or day == "FRIDAY" or day == "friday":
        price = 250
    elif day == " Saturday" or day == "SATURDAY" or day == "saturday":
        price = 300
    elif day == "Sunday" or day == "SUNDAY" or day == "sunday":
        price = 300

if facility == 4 and user == "No" or user == "no" or user == "NO":
    if day == "Monday" or day == "MONDAY" or day == "monday":
        price = 35
    elif day == "Tuesday" or day == "TUESDAY" or day == "tuesday":
        price = 35
    elif day == "Wednesday" or day == "WEDNESDAY" or day == "wednesday":
        price = 35
    elif day == "Thursday" or day == "THURSDAY" or day == "thursday":
        price = 35
    elif day == "Friday" or day == "FRIDAY" or day == "friday":
        price = 35
    elif day == " Saturday" or day == "SATURDAY" or day == "saturday":
        price = 65
    elif day == "Sunday" or day == "SUNDAY" or day == "sunday":
        price = 65

问题在于and优先于or 像这样的表达式:

facility == 4 and user == "No" or user == "no" or user == "NO"

是相同的:

(facility == 4 and user == "No") or (user == "no") or (user == "NO"):

要让这个表达式做你想做的事,你会想使用更像以下之一的东西:

facility == 4 and (user == "No" or user == "no" or user == "NO")
facility == 4 and user in ("No", "no", "NO")
facility == 4 and user.lower() == "no"

以下是我将如何更紧凑地编写此逻辑的方法——使用 Enums 标准化所有字符串值(这可以保护您免受拼写错误,并且可以轻松验证输入是预期值之一),然后将所有逻辑放入一个 dict 而不是一堆if/elif 由于您没有每天的单独价格,只是不同的工作日/周末价格,因此可以使字典更加紧凑:

from enum import Enum

class User(Enum):
    YES = "yes"
    NO = "no"

class Day(Enum):
    MONDAY = "monday"
    TUESDAY = "tuesday"
    WEDNESDAY = "wednesday"
    THURSDAY = "thursday"
    FRIDAY = "friday"
    SATURDAY = "saturday"
    SUNDAY = "sunday"
    def is_weekend(self) -> bool:
        return self in (Day.SATURDAY, Day.SUNDAY)


# Prices are keyed on facility number(int), User, and Day.is_weekend().
prices = {
    1: {User.YES: {False: 100, True: 150}, User.NO: {False: 150, True: 200}},
    2: {User.YES: {False: 100, True: 150}, User.NO: {False: 150, True: 200}},
    3: {User.YES: {False: 200, True: 250}, User.NO: {False: 250, True: 300}},
    4: {User.YES: {False: 30, True: 60}, User.NO: {False: 35, True: 65}},
}

price = prices[facility][User(user.lower())][Day(day.lower()).is_weekend()]

尝试使用 if/elif 而不是 if/if。 另外,在 if 逻辑周围加上括号,如下所示:

if facility == 4 and (user == "Yes" or user == "YES" or user == "yes":)

问题是您的if语句逻辑不正确。 当您执行以下检查时:

if facility == 4 and user == "Yes" or user == "YES" or user == "yes":

这在功能上等同于:

if (facility == 4 and user == "Yes") or (user == "YES") or (user == "yes"):

意思是,如果用户选择了"Yes"的变体,那么将始终输入if语句。 您的逻辑应如下所示:

if facility == 4 and (user == "Yes" or user == "YES" or user == "yes"):

通过比较用户字符串的小写版本,可以将其简化为:

if facility == 4 and user.lower() == "yes":

您可以简化所有逻辑以使用小写字母,这将简化您的if语句,如下所示:

if facility == 4 and user.lower() == "yes":
    if day.lower() == "monday":
        price = 30
    elif day.lower() ==  "tuesday":
        price = 30
    elif day.lower() == "wednesday":
        price = 30
    elif day.lower() == "thursday":
        price = 30
    elif day.lower() == "friday":
        price = 30
    elif day.lower() == "saturday":
        price = 60
    elif day.lower() == "sunday":
        price = 60

要缩短此代码,您可以使用.lower()将字符串转换为小写。

user = user.lower()
day = day.lower()

这将允许您只检查是否day == "monday"而不是查看 Monday 的不同大小写。

你也可以做

if day in ["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]

这将删除您的大部分elif语句,并将它们全部放在一个中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM