吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1236|回复: 11
收起左侧

[已解决] 请问为什么按q不能正常退出,input 不是接收的字符串吗?

[复制链接]
worromot 发表于 2021-7-1 19:07
[Asm] 纯文本查看 复制代码
products = [["iphone", 6888], ["MacPro", 14800], ["小米6", 2499], ["Coffee", 31], ["Book", 60], ["Nike", 699]]

print("-" * 5, "\t""商品列表", "\t", "-" * 5)

for product in products:
    print(products.index(product), end="\t")
    print(product[0], end="\t")
    print(product[1])

shopping_cart = []
sum_money = 0

while True:
    user = input("请输入您需要购买的商品编号(q为结账):")
    if -1 < int(user) <= len(products):
        print("已在您的购物车里添加商品:%s" % products[int(user)][0])
        shopping_cart.append(products[int(user)])
        sum_money += products[int(user)][1]

    # print(shopping_cart)
    elif user == "q":
        print("您购买的商品有:", end="")
        for i in shopping_cart:
            print(shopping_cart.index(i), end="\t")
            print(i[0], end="\t")
            print(i[1])
        break
    else:
        print("您输入的商品编号不存在,请重新输入!")

错误提示:ValueError: invalid literal for int() with base 10: 'Q'单独执行elif也能进行啊,为什么整体运行就提示格式错误呢?前面的input 接收的user 不正是字符串类型吗?这里按q为什么会出错呢?谢谢!

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

yacc 发表于 2021-7-1 20:47
python是弱类型,又不分char和string,建议这样应该没问题了
if user.isdigit() && int<len
  添加
elif ==q
  输出
else
  报错

免费评分

参与人数 1热心值 +1 收起 理由
worromot + 1 谢谢@Thanks!

查看全部评分

麦田孤望者 发表于 2021-7-1 19:17
 楼主| worromot 发表于 2021-7-1 19:22
麦田孤望者 发表于 2021-7-1 19:17
15行 int(user) user为字符"q"无法被转成int

如果 use 为  q 的话,不是应该直接执行21行的 elif 吗? 15行的if 后面的代码还行执行吗?
15行和21的代码会冲突吗?
冲突的话,应该怎么修改呢?谢谢
kk159 发表于 2021-7-1 19:35
worromot 发表于 2021-7-1 19:22
如果 use 为  q 的话,不是应该直接执行21行的 elif 吗? 15行的if 后面的代码还行执行吗?
15行和21的代码 ...

if -1 < int(user) <= len(products):
这个你不用范围判断就ok
因为你用while 1,所以你输入q 会先判断int(user)。
dej0 发表于 2021-7-1 19:37
程序的执行顺序都是入口函数开始从上至下,不是你想他执行哪就执行哪(除了人为加上执行跳转条件)
 楼主| worromot 发表于 2021-7-1 19:47
dej0 发表于 2021-7-1 19:37
程序的执行顺序都是入口函数开始从上至下,不是你想他执行哪就执行哪(除了人为加上执行跳转条件)

意思是即使 user 为 q , 也要从 if 语句判断一下是不是需要的编号 ,这一判断就出错了.
谢谢.
 楼主| worromot 发表于 2021-7-1 19:50
[Asm] 纯文本查看 复制代码
products = [["iphone", 6888], ["MacPro", 14800], ["小米6", 2499], ["Coffee", 31], ["Book", 60], ["Nike", 699]]

print("-" * 5, "\t""商品列表", "\t", "-" * 5)

for product in products:
    print(products.index(product), end="\t")
    print(product[0], end="\t")
    print(product[1])

shopping_cart = []
sum_money = 0

while True:
    user = input("请输入您需要购买的商品编号(q为结账):")
    if  user == "q":
        print("您购买的商品有:")
        for i in shopping_cart:
            print(shopping_cart.index(i), end="\t")
            print(i[0], end="\t")
            print(i[1])
        print("商品总金额为 %d 元" % sum_money)
        break
    elif -1 < int(user) <= len(products):
        print("已在您的购物车里添加商品:%s" % products[int(user)][0])
        shopping_cart.append(products[int(user)])
        sum_money += products[int(user)][1]
    else:
        print("您输入的商品编号不存在,请重新输入!")


把之前的 elif 和 if 的代码互换一下,就行了.
 楼主| worromot 发表于 2021-7-1 20:01

1 我把 elif 和 if 语句调换位置就可以运行了.
2 改 if 语句为     if user != "q" and -1 < int(user) <= len(products): 也可以运行,这样直接判断不等于q后直接跳过了if后面的语句.
您这里的不用范围判断 应该怎么写呢?
谢谢
kk159 发表于 2021-7-1 20:19
worromot 发表于 2021-7-1 19:50
[mw_shl_code=asm,true]products = [["iphone", 6888], ["MacPro", 14800], ["小米6", 2499], ["Coffee", 3 ...

这也不合理了。只判断q,如果是a,b,c,d呢 还是要过int(user),难道不报错?

免费评分

参与人数 1吾爱币 +1 收起 理由
worromot + 1 热心回复!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-1 09:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表