【问题标题】:For loops python (beginner): Don't know why this won't work对于循环python(初学者):不知道为什么这不起作用
【发布时间】:2014-03-17 15:40:49
【问题描述】:

所以我正在尝试创建一个程序,该程序接受诸如“34123+74321”之类的输入并使用 for 循环输出答案。我被卡住了,不知道为什么我的以下代码不起作用:

S = str(input())
for char in range(0, len(S)):
    x = S[1:char]
    p = int(char)+1 
    z = S[p:]
    if chr(char) == "+":
        print (int(z)+int(x))

【问题讨论】:

  • 你用的是python 2还是3?
  • 出了什么问题?有错误信息吗?
  • 你为什么不在+上分裂?
  • 先看:在循环第一次迭代中,当char = 0 => S[1:0]
  • @juankysmith 这给了你一个''。不应该伤害...

标签: python loops for-loop


【解决方案1】:

这样做会容易得多:

>>> s = input()
34123+74321
>>> print(sum(int(x) for x in s.split('+')))
108444

分解:

  1. 通过将字符串拆分为以'+' 作为分隔符的部分来制作数字字符串列表。

  2. for list 中的每个值,将其转换为整数。

  3. 找出这些整数的总数或sum

  4. print 将该值输出到屏幕上供用户查看。

你也可以试试:

>>> import ast
>>> s = input()
34123+74321
>>> ast.literal_eval(s)
108444

【讨论】:

  • 谢谢!正是我需要的!
  • @ExoticBirdsMerchant 感谢您的支持,如果是您的话。 :)
【解决方案2】:

char 被赋值为(0, 1, ..., len(S)-1),因此chr(char) 永远不会等于'+'

【讨论】:

    【解决方案3】:

    你的意思可能是if s[char] == "+":

    一般来说,您应该尝试使用“会说话”的变量名。

    E. g.,而不是char,最好使用idx或其他东西。

    string = str(input())
    for idx in range(0, len(string)):
        if string[idx] == "+":
            part1 = string[1:idx]
            part2 = string[idx+1:]
            print (int(part1) + int(part2))
    

    【讨论】:

    • 很酷的错字:“cariable”。
    • @Robᵩ 谢谢。这是因为我的键盘上的键在看到我的手指时总是跳到一边……
    【解决方案4】:

    您正在使用循环来查找“+”字符的位置,对吗?那么代码应该是:

    for char in range(len(S)): 
        if S[char] == '+': pos = char
    

    然后你可以继续前进:

    z = S[pos+1:]
    x = S[:pos]
    print int(x) + int(z)
    

    但是,请注意,这不是一种非常pythonic 的做事方式。在 Python 中,有一个字符串方法 index 已经找到了你要找的位置:

    pos = '1234+5678'.index('+') 
    

    一个更简单的方法(和更多的Pythonic)是:

    x, z = '1234+5678'.split('+')
    

    当然,你也可以这样做:

    print sum(map(int, S.split('+')))
    

    如果您要添加许多项目,这也可以。

    如果您开始学习 Python,最好了解一切都是对象并且有自己的方法。你对这些方法了解得越多,你对 Python 的了解就越好。它是比您的传统语言更高级别的程序,因此请尽量不要受到您习惯的相同算法结构的限制。

    干杯,编程愉快!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      相关资源
      最近更新 更多