【问题标题】:How do I have a value that can be both a floating decimal point or a string in python?python - 如何在python中获得一个既可以是浮点小数点也可以是字符串的值?
【发布时间】:2021-11-09 01:25:26
【问题描述】:

所以,我需要我的一个变量是一种可能性。比如,它是一个用户输入变量,它既可以是浮点数,也可以是字符串。而且,所以我想用它做一些事情,比如 >/= 但如果用户说“完成”我退出。所以,让我告诉你:

largest = None
smallest = None
while True:
    try:
        num = input("Enter a number: ")
        float(num)
    except:
        "invalid input"
    if num == "done":
        break
    if num > largest:
        largest = num
        
    if smallest == None:
        smallest= num
        
    if smallest > num:
        smallest = num
    print(num)

print("Maximum is", largest)
print("Minimum is", smallest)

【问题讨论】:

  • 只需在float(num) 之前检查if num == "done"。注意,你没有保留你创建的浮动,你只是立即丢弃它。所以num 仍然是str

标签: python string if-statement floating-point numbers


【解决方案1】:

我不太明白您要做什么,但是在将用户输入与字符串进行比较后,您始终可以执行 float 转换:

largest = float('inf')
smallest = None

while True:
    num = input("Enter a number: ")
    if num == "done":
        break
    try:
        num = float(num)
    except:
        print("invalid input")
    if num > largest:
        largest = num

    if smallest == None:
        smallest = num

    if smallest > num:
        smallest = num
    print(num)

print("Maximum is", largest)
print("Minimum is", smallest)

这是一个示例游戏:

Enter a number: 1.2
1.2
Enter a number: 3.4
3.4
Enter a number: 0
0.0
Enter a number: done
Maximum is inf
Minimum is 0.0

假设您使用的是 Python 3.8+,我对代码简化的一个建议是使用 walrus := 运算符,这应该允许您省略 break 条件:

while (num := input("Enter a number: ")) != 'done':
    try:  # same as before
       ...

【讨论】:

    【解决方案2】:

    首先,将数字读取为字符串,检查它是否“完成”并且仅在转换为浮点数之后:

    while True:
        num = input()
        if num == "done":
            break
        num = float(num)
        # ... do something with num ...
    

    【讨论】:

      【解决方案3】:

      对于这个例子,你不需要它。您从用户输入中读取的值始终可以是一个字符串,如果这个字符串不是"done",那么它应该是一个浮点数,否则它是无效的。更具体地说,您不需要输入是任何浮点数或字符串。你需要它是任何浮点数或"done"。看下面的sn-p:

      largest = None
      smallest = None
      while True:
        text = input("Enter a number: ")
        if text == "done":
          break
        else:
          try:
            num = float(text)
            if smallest is None or num < smallest:
              smallest = num
            if largest is None or num > largest:
              largest = nunm
          except:
            print("Invalid input")
      
      print("Maximum is", largest)
      print("Minimum is", smallest)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-24
        • 2021-07-21
        • 1970-01-01
        • 2010-12-28
        相关资源
        最近更新 更多